Автоматически направляйте входящие вызовы заданным получателям на основе номера вызывающего абонента.
Этот скрипт позволяет направлять входящие вызовы определенным получателям на основе Caller ID (телефонного номера) вызывающего абонента. Он проверяет список номеров, хранящихся в файле, и соответствующим образом маршрутизирует вызовы с совпадающим Caller ID. Маршрутизация вызовов полезна для ускорения контакта с VIP-клиентами, блокировки спама или гибкого распределения вызовов в нужные отделы.
Работа сценария маршрутизации вызовов по входящему Caller ID абонента
- Считывается файл с именем contacts.csv, содержащий телефонные номера абонентов.
- Сравнивается входящий идентификатор абонента с номерами в файле.
- Если есть совпадение, вызов направляется на предопределенный добавочный номер (например, 114).
- Если совпадения нет, вызов может быть сброшен в зависимости от конфигурации.
Настройка сценария маршрутизации
- Перейдите в Admin Console > Integrations > Call Scripts.
- Выберите Add from Store и выберите Inbound Caller ID Routing.
- Назначьте имя для идентификации.
- Настройте сценарий для запуска при получении вызова по транку или при вызове определенного DID.
- Выберите транк или DID, на котором должны перехватываться вызовы.
- Установите переменную назначения, чтобы определить, куда должны направляться вызовы.
- Загрузите файл CSV или TXT, содержащий номера вызывающих абонентов, разделенные запятыми (например, +123456,+9827262).
Как операторы используют сценарий
- Обновляйте файл contacts.csv когда нужно, чтобы изменить правила маршрутизации.
- Убедитесь, что назначение правильно настроено для корректного направления вызовов (например, голосовая почта, добавочный номер или очередь).
- При необходимости измените имя файла CSV или переменную назначения в сценарии.
Чем полезен этот скрипт
- Автоматизация маршрутизации вызовов – мгновенно направляйте вызовы на основе Caller ID вызывающего абонента.
- Гибкость и простота обновления – изменяйте маршрутизацию, просто обновляя файл.
- Улучшение управления вызовами – ускоряйте контакт с VIP-клиентами, блокируйте спам или направляйте вызовы в нужный отдел.
Внутренняя работа скрипта
Этапы работы скрипта:
- Проверка, является ли вызов входящим, с помощью объекта ExternalLine и свойства IsInbound.
- Получение сохраненного списка Caller ID вызывающих абонентов с помощью GetPropertyValue для определения правильного пути к файлу.
- Чтение файла с помощью ReadLines для доступа к Caller ID.
- Сопоставление Caller ID с помощью Regex.
- Маршрутизация вызова в соответствующий пункт назначения с помощью DestinationStruct и RouteToAsync.
Что нужно знать
- Если Caller ID не найден в списке, вызов может быть сброшен (в зависимости от ваших настроек).
Пример скрипта
ВНИМАНИЕ! Чтобы увидеть этот сценарий в магазине скриптов, требуется версия 3CX v20 U5. Скрипт приведен только для справки. Для получения последней версии загрузите ее из Магазина 3CX.
Скрипт: Доступен
[Script C#]
#nullable disable
using CallFlow;
using System.Threading.Tasks;
using TCX.Configuration;
using TCX.PBXAPI;
using System.IO;
using System.Text.RegularExpressions;
namespace dummy
{
public class InterceptInboundCall : ScriptBase
{
//Specify here your csv filename with callerid list that needs to be redirected
const string csvFileName = "contacts.csv";
//Change the value of the below variable to a destination of your choosing.
//I.e for Voicemail of extension 101 replace Extension.114. with VoiceMail.101.
const string destination = "Extension.114.";
public override async Task StartAsync()
{
if (MyCall.Caller.DN is ExternalLine externalLine && MyCall.IsInbound)
{
var DIDNumber = MyCall.Caller.CalledNumber;
var CallerID = MyCall.Caller.CallerID;
var matched = false;
var cfdAppName = MyCall.CallHandler.MyDN.GetPropertyValue("CF_APP_NAME");
string cfdPath;
if (!string.IsNullOrEmpty(cfdAppName))
cfdPath = cfdAppName.Split('.')[0];
else
cfdPath = MyCall.CallHandler.MyDN.Number.Split('.')[0];
var csvPath = System.IO.Path.Combine(MyCall.PS.GetParameterValue("IVRPROMPTPATH"), "Callflows", cfdPath, csvFileName);
var lines = File.ReadLines(csvPath);
foreach (var line in lines)
{
var matchCollection = new Regex("([\\+]?[0-9]+)").Matches(line);
if (matched == true)
{
break;
}
foreach (Match match in matchCollection)
{
if (CallerID == match.Value)
{
matched = true;
break;
}
}
}
var has_valid_destination = DestinationStruct.TryParse(destination, out var destination_struct);
if (has_valid_destination && matched)
{
var result = await MyCall.RouteToAsync(destination_struct);
MyCall.Info($"{CallerID}->{DIDNumber} has been redirected to {destination} ({result}");
return true;
}
}
return false;
}
}
}
Другие скрипты CFD
На нашем сайте есть коллекция скриптов CFD. Ознакомьтесь с ними и узнайте, как можно автоматизировать 3CX в соответствии с вашими потребностями.



