根据来电者的号码自动将呼入电话引导至特定目的地。

此脚本允许您根据来电者的电话号码将呼入电话引导至特定目的地。它会检查存储在文件中的号码列表,并相应地路由匹配的电话。这对于优先处理VIP客户、阻止垃圾电话或确保重要来电到达正确部门非常有用。

呼入来电者 ID 路由脚本的工作原理

  1. 读取名为 contacts.csv 的文件,其中包含来电者电话号码。
  2. 将来电者 ID 与文件中的号码进行比较。
  3. 如果匹配,电话将被转发到预定义的分机(例如,分机114)。
  4. 如果没有匹配,根据配置,通话可能会被挂断。

如何设置呼入来电者 ID 路由脚本

  1. 转到 管理控制台 > 集成 > 呼叫脚本
  2. 选择 从商店添加 并选择 Inbound Caller ID Routing
  3. 为易于识别分配一个名称。
  4. 配置脚本以 在中继上接收呼叫或当特定DID被呼叫时运行。
  5. 选择应拦截呼叫的中继或DID。
  6. 设置 目标变量 以定义呼叫应路由到的位置。
  7. 上传包含以逗号分隔的来电者号码的 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;
}
}
}