FreePBX – 如何重写转发“跟我来电”的来电显示?

山姆叫朱莉的直拨电话,因为她不在她的办公桌(因为遵循我的规则),电话被转发给她的手机。

FreePBX通过正确的呼出路由转发呼叫, 除了在Julie手机上提供的CID ,所有function都应该如此。

由于山姆是从本地移动电话07123456789 ,FreePBX将他的CID传递给我们的出境航空公司, 没有国际拨号代码 – 这是一个不可预知的CID出现在朱莉的电话上。

这是networking,负责提供“正确”的CID – 但只有我们的运营商有正确格式的号码开始。

为了正确传递CID,我们的出站提供商要求所有号码都通过国际拨号代码发送。
例如: 447123456789

我如何告诉FreePBX:

如果电话正在转发
如果是11位数字
如果它从07或020开始
通过剥离前导0并添加44更改CID

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

澄清 – FreePBX发送山姆的CID通过。
但是因为它是以07123456789forms发送的,所以在Julie的电话上显示(大部分时间或根本不显示)为+7123456789

我需要将CID作为447123456789发送给运营商和networking,将其转换为07123456789

根据你的描述,CALLERID(num),如果匹配某个结构,应该被改变。 这表明使用正则expression式。

在“权威指南”中 ,介绍了如何操作string以从正则expression式中获取新string

expr1:expr2

此运算符将expr1与expr2相匹配,其中expr2必须是正则expression式。 正则expression式用隐式^锚定到string的开头。

如果匹配成功,并且模式至less包含一个正则expression式子expression式 – \(… \) – 则返回对应于\ 1的string; 否则,匹配运算符返回匹配的字符数。 如果匹配失败并且模式包含正则expression式子expression式,则返回空string; 否则返回0。

我在在线正则expression式testing中检查一个debugging器 ,你的条件可以用正则expression式0((7 [0-9] {9})|(20 [0-9] {8}))表示

所以,你可以尝试在拨号scheme的FollowMe部分获取新的string,如下所示:

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

请注意,我已经在第一个“(”之前放置了第一个“\”来隔离我们感兴趣的string的部分,并按照指南中描述的方式将它与44连接起来,其他“\”将用于(“”和“}”,它们在正则expression式中用作乘数,但是具有特殊的含义以星号(它们用来定义variables)。我认为反斜线在星号中是必须的,但是我不确定对不起,我现在不能做任何testing,直到下个周末)。

如果调用者ID与正则expression式不匹配,则new_caller_id将为“44”,否则为您正在search的string。 你可以使用这样的东西

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

我希望这有帮助