V20 Anrufskript: Feiertage aufgrund des Namens an Nebenstelle weiterleiten

Ursus

Free User
Mitglied seit
6. April 2020
Beiträge
22
Hallo zusammen

Ich habe heute ein Skript gebaut welches ich gerne hier mit der Community teilen möchte.
Dies, weil ich extrem genervt bin von der Tatsache, dass die Feiertage nur sehr statisch konfiguriert werden können
Als Beispiel, wir brauchen pro Feiertag andere Ansagen, IVR Optionen.... Also alles was man mit einem einfachen IVR lösen könnte.
Daher habe ich nun ein Skript zusammengebaut, welches entsprechend des Feiertagnamens aus einer Liste im Anrufskript die Nebenstelle raussucht und den Anrufer damit verbindet.

Ich hoffe, dass dieses Skript vielen von euch hilft :)

Bei Fragen, einfach fragen.

Lg
Ursus



Anleitung
Unter Admin -> Integration -> Anrufskripte ein Skript "Benutzerdefiniert hinzufügen" anlegen.
Name: feiertage (oder eigenen Namen geben).
Dieses Skript ausführen: Wenn diese DID angerufen wird
DID-Nummer: Nummer(n) einfügen welche betroffen ist.
Abteilung: Meist DEFAULT

Skript: Das untenstehende Skript

Skript Anpassungen
Standardroute

Beim Skript muss nun noch die Standard Nebenstelle angegeben werden.
C++:
MyCall.RouteToAsync("800"))

Weitere Feiertage hinzufügen
Wichtig, hinter dem letzten Eintrag ist kein komma.
C++:
("Weihnachten", "801"),
("Neujahr", "802"),
("Ostern", "803")
// Weitere Feiertagszuordnungen hinzufügen

Standard Feiertagsansage
Wird keine entsprechende Ansage gefunden, die Standardansage hinterlegen.
C++:
return "899";


Komplettes Skript
C++:
/*
 * Ursus Feiertage Anrufskript
 * Das Skript muss auf eine DID registriert werden, es ist nicht für den ganzen Trunk gedacht.
*/


#nullable disable
using System;
using CallFlow;
using CallFlow.CFD;
using TCX.Configuration;
using System.Threading.Tasks;
using TCX.PBXAPI;
namespace dummy
{
    public class PlayHolidayPromptBeforeRouting : ScriptBase<PlayHolidayPromptBeforeRouting>
    {
        string GetRealPromptFileName(OfficeHoliday holiday)
        {
            return holiday?.HolidayPrompt;
        }
      
        public override async Task<bool> StartAsync()
        {
          
            PhoneSystem ps = (PhoneSystem)MyCall.PS;
            if (MyCall.Caller.DN is ExternalLine externalLine)
            {
                var trunkTimeBasedroute = MyCall.Caller.DN.GetTimeBasedRoutingInfo();
                if (
                    trunkTimeBasedroute.reason == CallControlAPI.DivertReason.Holiday
                    )
                {

                    // Auslesen des Feiertages
                    string holidayName = trunkTimeBasedroute.holiday?.Name ?? "UnknownHoliday";
                    MyCall.Info($"URSUS: Aktueller Feiertag für die DID -- {holidayName}");
                    string targetExtension = MapHolidayNameToExtension(holidayName);
                    MyCall.Info($"URSUS: Anruf geht an Nebenstelle... -- {targetExtension}");

                            await MyCall.AssureMedia()
                            .ContinueWith(x=>MyCall.RouteToAsync(targetExtension))
                            .Unwrap();
                            return true;

                } else {
                    
                    // Falls das Skript für den ganzen Trunk eingerichtet wird, muss der folgende Bereich ausgeklammert werden.
                    // --- AUSKLAMMERN VON HIER ----------------
                    await MyCall.AssureMedia()
                    .ContinueWith(x=>MyCall.RouteToAsync("800"))  // Hier die Nebenstelle angeben welche von der DID Regel signalisiert wird.
                    .Unwrap();
                    return true;
                    // --- AUSKLAMMERN BIS HIER ----------------
                
                }
                
            }
            return false;
        }

        private string MapHolidayNameToExtension(string holidayName)
        {
            // Array von Feiertagsnamen und den entsprechenden Ziel-Nebenstellen
            (string HolidayName, string Extension)[] holidayToExtensionMap =
            {
                ("Weihnachten", "801"),
                ("Neujahr", "802"),
                ("Ostern", "803")
                // Weitere Feiertagszuordnungen hinzufügen
            };
        
            // Suche nach einer passenden Nebenstelle
            foreach (var entry in holidayToExtensionMap)
            {
                if (string.Equals(entry.HolidayName, holidayName, StringComparison.OrdinalIgnoreCase))
                {
                    return entry.Extension;
                }
            }
        
            // Nebenstelle mit Ansage für Standard Abwesenheiten
            // Bzw. wenn der Feiertag nicht genau mit einem der oben eingetragenen Feiertage korrespondiert.
            // In unserem Fall Standardansage mit "Unsere Öffnungszeiten"
            return "899";
        }
        
    }
}
 
  • Like
Reaktionen: mark1337

Statistik des Forums

Themen
44.413
Beiträge
232.713
Mitglieder
78.328
Neuestes Mitglied
as7h