V20 - Dial Codes funktionieren nicht

Hi, danke für die Codes und Erklärungen. Das hat mir sehr geholfen.
Zu deiner Frage bzgl. des Routingverhaltens, hier wirst du in den Rufgruppen bzw. Warteschleifen die Option "Außerhalb der Geschäftszeiten weiterleiten an" verwenden müssen.
1723795163063.png

Hier die Codes, die ich jetzt im Einsatz habe:

Innerhalb der Geschäftszeiten:
Die Variable scriptCompleted habe ich nicht verstanden, die kann eigentlich raus oder?
C#:
#nullable disable

using CallFlow;
using System;
using System.Threading.Tasks;
using TCX.Configuration;
using System.Linq;
using CallFlow.CFD;


namespace dummy
{
    public class ForcePBXDefaultHours : ScriptBase<ForcePBXDefaultHours>
    {
        public override async void Start()
        {
            var scriptCompleted = false;
            try
            {
                await Task.Run(async () =>
                {
                    try
                    {
                        PhoneSystem ps = MyCall.PS as PhoneSystem;
                        ps.GetAll<Group>().Where(x=>x.AllowCallService).Select(x=>
                        {
                            //WARNING: time check will be available in v20 SP1+
                            //This script will not be compilable in earlier versions
                            // x.OverrideExpiresAt=x.Now(out var utc, out var timezone, out var groupmode);
                            //it is not required to update mode, because it is ignored after OverrideExpiresAt time
                            var timezone=TimeZoneInfo.Local;
                            x.CurrentGroupHours = x.CurrentGroupHours & ~GroupHoursMode.HasForcedMask;
                            // MyCall.Info($"{x.Name} reset to '{x.CurrentGroupHours}' until {x.OverrideExpiresAt} @ time:utc={utc}, timezone={timezone}, groupmode={groupmode}");
                            return x;
                        }).OMSave();
                        var result = await MyCall.AssureMedia().ContinueWith(_ => MyCall.PlayPrompt(null, new[] { "Empty.wav", "ST_AVAILABLE_SET" }, PlayPromptOptions.Blocked), TaskContinuationOptions.OnlyOnRanToCompletion).Unwrap();
                        MyCall.Return(true);
                    }
                    catch
                    {
                        MyCall.Error("Unexpected failure");
                        scriptCompleted = false;
                    }
                });
            }
            finally
            {
                scriptCompleted = false;
            }
        }
    }
}

Außerhalb der Geschäftszeiten:
Hier sind die Zeiten angepasst, sodass die Telefonanlage nicht um 0 Uhr zurückspringt.
Code:
using CallFlow;
using System;
using System.Threading.Tasks;
using TCX.Configuration;
using System.Linq;
using CallFlow.CFD;

namespace dummy
{
    public class ForcePBXDefaultHours : ScriptBase<ForcePBXDefaultHours>
    {
        public override async void Start()
        {
            var scriptCompleted = false;
            try
            {
                await Task.Run(async () =>
                {
                    try
                    {
                        PhoneSystem ps = MyCall.PS as PhoneSystem;
                        //in this example, all groups will be overrides to the end of the day in "global" PBX timezone
                        var PBXLocalTimeEndOfOverride = DateTime.Now.Date.AddYears(10) + new TimeSpan(23, 59,59);
                        ps.GetAll<Group>().Where(x=>x.AllowCallService).Select(x=>
                        {
                            //WARNING: time check will be available in v20 SP1+
                            //This script will not be compilable in earlier versions
                            //  groupCurrentTime = x.Now(out var utc, out var timezone, out var groupmode);
                            var timezone=TimeZoneInfo.Local;
                            x.OverrideExpiresAt = TimeZoneInfo.ConvertTime(PBXLocalTimeEndOfOverride, timezone);
                            x.CurrentGroupHours = GroupHoursMode.ForceClosed;
                            // MyCall.Info($"{x.Name} reset to '{x.CurrentGroupHours}' until {x.OverrideExpiresAt} @ time:utc={utc}, timezone={timezone}, groupmode={groupmode}");
                            return x;
                        }).OMSave();
                        var result = await MyCall.AssureMedia().ContinueWith(_ => MyCall.PlayPrompt(null, new[] { "Empty.wav", "ST_AWAY_SET" }, PlayPromptOptions.Blocked), TaskContinuationOptions.OnlyOnRanToCompletion).Unwrap();
                    MyCall.Return(true);
                    }
                    catch
                    {
                        MyCall.Error("Unexpected failure");
                        scriptCompleted = false;
                    }
                });
            }
            finally
            {
                scriptCompleted = false;
            }
        }
    }
}
 
Die Variable scriptCompleted habe ich nicht verstanden, die kann eigentlich raus oder?
So wie du den Code des try und abschl. catch / finally geändert hast: ja.

Ich hätte das belassen wie es ist. Dir fehlt damit das MyCall.Critical wenn das erste try was alles umschließt fehlschlägt, das fängst du nie als Fehler mit Meldung ab.

Nachtrag:
Der Programmierer des Beispieles hat sich das mit der Verwendung der Variable sicher mal anders gedacht. Da hätte an Statt
MyCall.Return(true); ein scriptCompleted = true; im originalen Code stehen sollen. Das ergibt in meinen Augen mehr Sinn. So machen wir das anderswo auch.
 
Zuletzt bearbeitet:

Statistik des Forums

Themen
44.413
Beiträge
232.713
Mitglieder
78.328
Neuestes Mitglied
as7h