FreePBX - 如何重写转发的“跟随我”呼叫者 ID?

FreePBX - 如何重写转发的“跟随我”呼叫者 ID?

萨姆拨打了朱莉的直线电话,但由于她不在办公桌旁(并且由于“跟随我”规则),电话被转接到了她的手机上。

FreePBX 通过正确的出站路由转发呼叫,一切正常运行除了用于 Julie 手机上显示的 CID。

由于 Sam 是通过本地移动电话拨打电话的07123456789,因此 FreePBX 会将他的 CID 传递给我们的出站运营商没有国际拨号代码——这导致朱莉的电话上出现大量不可预测的来电显示。

网络负责呈现“正确的” CID - 但前提是我们的运营商首先拥有正确格式的号码。

为了正确传递 CID,我们的外拨服务提供商要求所有号码都加上国际拨号代码。
例如:447123456789

我如何告诉 FreePBX:

如果呼叫被转接
,并且号码长度为 11 位
,并且以 07 或 020 开头,则
更改临床诊断通过剥离前导0并添加44

是的,我们的出站承运商确实允许我们发送任何 CID。

澄清一下 - FreePBX 正在发送 Sam 的 CID。
但由于它发送时07123456789在 Julie 的手机上显示为(大多数时候或根本不显示)+7123456789

我需要发送 CID 以便447123456789运营商和网络将其转换为07123456789

答案1

根据您的描述,如果 CALLERID(num) 与某个结构匹配,则应进行更改。这建议使用正则表达式。

Asterisk:权威指南,描述了如何操作字符串以便从正则表达式中获取新字符串

expr1 : expr2

此运算符将 expr1 与 expr2 进行匹配,其中 expr2 必须是正则表达式。[92] 正则表达式通过隐式 ^ 锚定到字符串的开头。

如果匹配成功且模式包含至少一个正则表达式子表达式(\( ... \)),则返回与 \1 对应的字符串;否则,匹配运算符返回匹配的字符数。如果匹配失败且模式包含正则表达式子表达式,则返回空字符串;否则返回 0。

我已经登记入住在线正则表达式测试器和调试器你的条件可以用正则表达式来表示0((7[0-9]{9})|(20[0-9]{8}))

因此,您可以尝试在拨号计划的 FollowMe 部分中获取新字符串,如下所示:

Set(new_caller_id = 44$[${CALLERID(num)} : 0\((7[0-9]\{9\})|(20[0-9]\{8\})\)]) 

请注意,我在第一个“(”之前放置了第一个“\”,以隔离我们感兴趣的字符串部分,并按照指南中描述的方式将其与 44 连接起来。另一个“\”将用于转义“{”和“}”,它们在正则表达式中用作乘数,但对星号有特殊含义(它们分隔变量)。我认为在星号中需要使用反斜杠来转义花括号,但我不确定(抱歉,我现在不能做任何测试,直到下周末)。

如果呼叫者 ID 与正则表达式不匹配,则 new_caller_id 将为“44”和您正在搜索的字符串,否则。您可以使用以下代码

Set(CALLERID(num) = ${If($[${new_caller_id} = 44]? ${new_caller_id} : ${CALLERID(num))})

我希望这有帮助

相关内容