使用 SIP 客户端 Bria 拨打外部电话时。电话会将我们的来电显示为呼叫方的名称。查看日志,它显示它来自此线路
-- Executing [s@macro-dialout-trunk:21] ExecIf("SIP/100-0000004a", "1?Set(CONNECTEDLINE(name,i)=CID:2120000000)”) in new stack
我们如何设置我们的系统以便它查询 CNAM 或内部数据库来显示我们正在呼叫的企业或个人的实际姓名?
任何帮助,将不胜感激。
答案1
你可以这样做,但我认为这需要一些星号脚本技能,当然还需要 CNAM 数据库。
您可以覆盖原始的 macro-dialout-trunk 并对其进行修改,以便它查询 CNAM 或内部数据库。要覆盖现有的拨号方案上下文,您需要将代码放入/etc/asterisk/extensions_override_freepbx.conf。您需要复制整个修改后的[宏拨出中继]上下文放入此文件中。
例子:
...
exten => s,n(gocall),Macro(dialout-trunk-predial-hook,)
exten => s,n,GotoIf($["${PREDIAL_HOOK_RET}" = "BYPASS"]?bypass,1)
exten => s,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(CONNECTEDLINE(num,i)=${DIAL_NUMBER}))
;;; This is the line that puts caller ID as the name of the calling party
exten => s,n,ExecIf($[$["${DB(AMPUSER/${AMPUSER}/cidname)}" != ""] & $["${CALLERID(name)}"!="hidden"]]?Set(CONNECTEDLINE(name,i)=CID:${CALLERID(number)}))
exten => s,n,ExecIf($[$["${DB(AMPUSER/${AMPUSER}/cidname)}" != ""] & $["${CALLERID(name)}"="hidden"]]?Set(CONNECTEDLINE(name,i)=CID:(Hidden)${CALLERID(number)}))
exten => s,n,GotoIf($["${custom}" = "AMP"]?customtrunk)
exten => s,n,Dial(${OUT_${DIAL_TRUNK}}/${OUTNUM}${OUT_${DIAL_TRUNK}_SUFFIX},${TRUNK_RING_TIMER},${DIAL_TRUNK_OPTIONS})
...
您可以添加或修改 [macro-dialout-trunk] 中的行来查询所需的数据库,如下所示:
...
exten => s,n,AGI(iWantTheNameOfThisCompany.agi,${OUTNUM})
exten => s,n,Set(CONNECTEDLINE(name,i)=${awesomeCompanyName})
...
Asterisk 将运行 iWantTheNameOfThisCompany.agi AGI 脚本,将拨打的号码作为参数传递。然后,该脚本可以在函数 CONNECTEDLINE 中设置 ${awesomeCompanyName} 变量用户。您可以将 Perl、PHP、C、Pascal、Bourne Shell 用于查询 AGI 脚本。这确实是您的选择。