根据来电者的号码自动将呼入电话引导至特定目的地。
此脚本允许您根据来电者的电话号码将呼入电话引导至特定目的地。它会检查存储在文件中的号码列表,并相应地路由匹配的电话。这对于优先处理VIP客户、阻止垃圾电话或确保重要来电到达正确部门非常有用。
呼入来电者 ID 路由脚本的工作原理
- 读取名为 contacts.csv 的文件,其中包含来电者电话号码。
- 将来电者 ID 与文件中的号码进行比较。
- 如果匹配,电话将被转发到预定义的分机(例如,分机114)。
- 如果没有匹配,根据配置,通话可能会被挂断。
如何设置呼入来电者 ID 路由脚本
- 转到 管理控制台 > 集成 > 呼叫脚本。
- 选择 从商店添加 并选择 Inbound Caller ID Routing。
- 为易于识别分配一个名称。
- 配置脚本以 在中继上接收呼叫或当特定DID被呼叫时运行。
- 选择应拦截呼叫的中继或DID。
- 设置 目标变量 以定义呼叫应路由到的位置。
- 上传包含以逗号分隔的来电者号码的 CSV或TXT文件(例如,+123456,+9827262)
您的座席如何使用此脚本
- 随时更新 contacts.csv 文件以更改路由规则。
- 确保正确配置目标以将呼叫转发到正确的位置(例如,语音信箱、分机或队列)。
- 如有需要,在脚本中更改 CSV文件名 或 目标变量。
为什么使用这个脚本?
- 自动呼叫路由 – 根据来电者ID立即引导呼叫。
- 灵活且易于更新 – 通过更新简单文件来修改路由。
- 改进呼叫管理 – 优先处理VIP客户、阻止垃圾电话或将呼叫引导至正确的团队。
它在后台的工作原理
此脚本通过以下方式处理呼入电话:
- 检查呼叫是否为呼入 使用ExternalLine对象和IsInbound属性。
- 检索存储的来电者ID列表 通过使用GetPropertyValue定位正确的文件路径。
- 读取文件 使用ReadLines访问来电者ID。
- 匹配来电者的号码 使用Regex。
- 路由呼叫 到适当的目的地使用DestinationStruct和RouteToAsync。
需要了解的事项
如果在列表中找不到来电者ID,通话可能会被挂断(取决于您的设置)。
示例脚本
免责声明! 查看此脚本需要v20 U5。此脚本仅供参考。要获取最新版本,请从商店下载。
脚本:可用
[脚本 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
{
//在此处指定包含需要重定向的callerid列表的csv文件名
const string csvFileName = "contacts.csv";
//更改下面变量的值为您选择的目标。 //例如,要将分机101的语音信箱替换为Extension.114.,请使用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(‘.’); else cfdPath = MyCall.CallHandler.MyDN.Number.Split(‘.’);
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("([\\+]?+)").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;
}
}
}