Leiten Sie eingehende Anrufe dynamisch weiter, basierend auf Anrufer-ID, DID und Tageszeit.
Mit diesem Skript können Sie eingehende Anrufe basierend auf bestimmten Kriterien wie Tageszeit, Anrufer-ID oder DID umleiten. Es wird aktiviert, wenn ein Anruf auf einer Amtsleitung eingeht, und leitet den Anruf an ein konfiguriertes Ziel um.
So richten Sie das zeitbasierte Anrufskript ein
- Gehen Sie zu Admin Console > Integrationen > Anrufskripte.
- Fügen Sie es aus dem Store hinzu und wählen Sie „Zeitbasierte Anrufweiterleitung“.
- Geben Sie dem Skript einen Namen, damit es leicht zu identifizieren ist.
- Führen Sie dieses Skript aus, wenn Sie einen Anruf auf einem Trunk erhalten.
- Wählen Sie den Trunk aus, auf der eingehende Anrufe abgefangen werden.
- Standardmäßig enthält das Skript vordefinierte Stunden, die Sie durch Ändern/Hinzufügen/Entfernen von Werten aus dem Zeitplan in Ihre eigenen Stunden ändern können.
- { DayOfWeek.Monday, new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24))
- Das Skript akzeptiert auch Anrufe von allen DIDs/CallerIDs, da die Variablen DIDs/Callers das * enthalten, wo sie geändert werden können, um bestimmte DIDs und Anrufer-IDs zu enthalten.
- Ändern Sie 801 in const string DestinationDN = „801“; durch Ihr ausgewähltes Ziel.
Warum dieses Skript verwenden?
- Zeitkritisches Routing: Leiten Sie Anrufe basierend auf Ihren Geschäftszeiten automatisch an bestimmte Ziele um.
- Anruferspezifische Handhabung: Erstellen Sie einzigartige Routing-Regeln für wichtige Anrufer-IDs oder DIDs.
- Effizientes Anrufmanagement: Reduzieren Sie manuelle Eingriffe, indem Sie das Anrufrouting für außerhalb der Geschäftszeiten oder bestimmte Kriterien automatisieren.
Beispielskript
HAFTUNGSAUSSCHLUSS! Dieses Skript dient nur zu Referenzzwecken. Die neueste Version können Sie im Store herunterladen.
Skript: Eingehende Anrufe abfangen
/*
* Time Base Call Routing - Use code with caution!
* Calls will be intercepted and redirected to the specified DestinationDN during the following times:
* Monday to Sunday: 5:30 PM to 7:00 AM
* The current destination DN is set to "801" modify destination to any system extension or extension you want.
*
* INSTRUCTIONS
* - Configure Date & Time (Line 31)
* - Change the destination DN, and modify the value of the constant DestinationDN to any destination you want to route call (Line 26).
*/
#nullable disable
using CallFlow;
using System;
using System.Threading;
using System.Threading.Tasks;
using TCX.Configuration;
using TCX.PBXAPI;
using System.Collections.Generic;
using System.Linq;
using CallFlow.CFD;
namespace interceptcall
{
public class InterceptInboundCall : ScriptBase
{
// The destination DN to which the call will be redirected
const string DestinationDN = "801";
// Define a schedule for when calls should be intercepted
static readonly Schedule schedule = new Schedule(RuleHoursType.SpecificHours)
{
{ DayOfWeek.Monday, new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },
{ DayOfWeek.Monday, new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) },
{ DayOfWeek.Tuesday, new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },
{ DayOfWeek.Tuesday, new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) },
{ DayOfWeek.Wednesday, new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },
{ DayOfWeek.Wednesday, new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) },
{ DayOfWeek.Thursday, new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },
{ DayOfWeek.Thursday, new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) },
{ DayOfWeek.Friday, new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },
{ DayOfWeek.Friday, new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) },
{ DayOfWeek.Saturday, new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },
{ DayOfWeek.Saturday, new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) },
{ DayOfWeek.Sunday, new Schedule.PeriodOfDay(TimeSpan.FromHours(17.5), TimeSpan.FromHours(24)) },
{ DayOfWeek.Sunday, new Schedule.PeriodOfDay(TimeSpan.FromHours(0), TimeSpan.FromHours(7)) }
};
public override async void Start()
{
// Handle calls as a detached task, catching all exceptions.
try
{
await Task.Run(async () =>
{
try
{
MyCall.Debug($"Script start delay: {DateTime.UtcNow - MyCall.LastChangeStatus}");
MyCall.Debug($"Incoming connection {MyCall} from {MyCall.Caller}");
bool intercepted = false;
var ps = MyCall.PS as PhoneSystem;
if (MyCall.Caller.DN is ExternalLine externalLine)
{
var DIDNumber = MyCall.Caller["inbound_did"];
var CallerID = MyCall.Caller.CallerID;
var currentTime = externalLine.Now(out var utc, out var timezone, out var groupmode);
// Intercept calls during the specified schedule
if (schedule.IsActiveTime(currentTime))
{
string[] DIDs = { "*" }; // Allow all DIDs
string[] Callers = { "*" }; // Allow all Callers
var destination_struct = new DestinationStruct(ps.GetDNByNumber(DestinationDN));
// Check if the call's DID and CallerID match the interception criteria
if ((DIDs.Contains(DIDNumber) || DIDs.Contains("*")) &&
(Callers.Contains(CallerID) || Callers.Contains("*")))
{
try
{
var result = await MyCall.RouteToAsync(destination_struct);
MyCall.Info($"{CallerID} -> {DIDNumber} has been redirected to {DestinationDN} ({result})");
intercepted = true;
}
catch (Exception ex)
{
MyCall.Info($"{CallerID} -> {DIDNumber}: interception failed. '{DestinationDN}' is not reachable: {ex}");
}
}
else
{
MyCall.Info($"{CallerID} -> {DIDNumber}@{currentTime}: Default CallerID/DID based routing will be applied");
}
}
}
MyCall.Return(intercepted);
}
catch (Exception ex)
{
MyCall.Error($"Script execution failed: {ex}");
MyCall.Return(false);
}
});
}
catch (Exception ex)
{
MyCall.Error($"Task execution failed: {ex}");
MyCall.Return(false);
}
}
}
}



