将来电发送到正确的目的地。
此脚本拦截来电。它将拨打的号码与文件中的列表进行对比。这意味着调整规则很容易,因为你只需更新文件即可。当号码与列表中的一个匹配时,呼叫将被转发到指定的目的地。如果中继设置严格且没有匹配项,则呼叫将被阻止。
入站 DID 路由脚本的工作原理:
- 脚本打开一个名为 routes.json 的文件,该文件列出了电话号码及其目的地。
- 它将来电号码与文件中的号码进行比较。
- 当找到匹配项时,呼叫将被转发到相应的目的地。
如何使用此脚本:
- 在管理区域,转到控制台 > 集成 > 呼叫脚本。
- 从商店添加并选择”Route Calls Based on DID’s”。
- 为脚本命名。
- 设置脚本在中继收到呼叫时运行(或在呼叫此 DID 时)。
- 选择要监控的中继或 DID。
- 上传列出电话号码及其目的地的文件。
- 如果重命名文件,请更新脚本配置以匹配。
- 例如,如果重命名 JSON 文件,相应地更新 jsonFileName 变量。
注意:
如果脚本设置为在呼叫此 DID 时运行,DID 和目的地也必须在 json 文件中指定,否则呼叫将中断 .json 文件应按以下格式:
{
"": ".."
}
例如:DID 112233 路由到分机用户 100,您需要像这样保存文件;
{
"112233":"Extension.100."
}
脚本功能和实现:
实现:
- 使用 ExternalLine 对象和 IsInbound 属性检查呼叫是否为入站电话系统
- 使用 GetPropertyValue 方法获取呼叫脚本名称并构建存储文件的路径
- 使用 C# 类 File 中的 ReadAllText 方法读取文件内容
- 反序列化 Json 对象并提取 DID 和目的地
- 使用目的地结构检查目的地是否有效,如果有效则构建目的地
- 使用 RouteToAsync 将呼叫路由到目的地
功能:
- 从 routes.json 文件读取键/值对
- 基于键/值对将呼叫路由到目的地
免责声明! 查看此脚本需要 v20 U5。此脚本仅供参考。有关最新版本,请从商店下载。
#nullable disable
using CallFlow;
using System.Threading.Tasks;
using TCX.Configuration;
using TCX.PBXAPI;
using System.IO;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using Newtonsoft.Json;
namespace dummy { public class InterceptInboundCall : ScriptBase { // 在此指定您的路由 json 文件名 // JSON 的结构是 “Did_number”:”” // 目的地定义为 DestinationStruct 的字符串表示 //Extension.. – 路由到分机(也可用于系统分机),应用转发规则 //VoiceMail.<ringgroup,queue,extension number=””>. – 特定实体的语音邮件。 // 例如:”1222333″:”Extension.100.”</ringgroup,queue,extension>
const string jsonFileName = "routes.json";
public override async Task StartAsync() { if (MyCall.Caller.DN is ExternalLine externalLine && MyCall.IsInbound) { var DIDNumber = MyCall.Caller.CalledNumber;
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 filePath = System.IO.Path.Combine(MyCall.PS.GetParameterValue("IVRPROMPTPATH"), "Callflows", cfdPath, jsonFileName);
string jsonString = File.ReadAllText(filePath);
var data = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonString);
if (data.TryGetValue(DIDNumber, out var route)) { var has_valid_destination = DestinationStruct.TryParse(route, out var destination_struct); //如果目的地格式错误,则不会拦截呼叫 if (has_valid_destination) { var result = await MyCall.RouteToAsync(destination_struct); //当转发成功时,我们在这里将返回值设置为 true 并在 CallFlow 服务日志中记录消息 MyCall.Info($”{DIDNumber} has been redirected to {route} ({result}”); return true; } } } return false; } } }
更多呼叫流程脚本可用 -------------------------------- 我们在[网站](https://www.3cx.cn/blog/category/call-flow-scripts/)上有一系列呼叫流程脚本。查看它们,了解如何自动化 3CX 以满足您的需求。