确定在Asterisk中哪个用户发起的呼叫

我在我的extensions.conf文件中有以下代码:

 [local] exten => _NXXNXXXXXX,1,Set(CALLERID(name)=${OUTGOING_NAME}) exten => _NXXNXXXXXX,n,Set(CALLERID(num)=${OUTGOING_NUMBER}) 

现在我想改变这个代码来设置来电号码和号码根据拨打电话的用户/分机。 实际上,我在sip.conf有四(4)个用户/分机,只有其中一个(我用于业务的)应该发送一个不同的主叫号码/号码。

因为所有线路都需要能够接听来电,因此所有内容都在相同的环境中(为了简单起见)。 唯一的区别是当line1需要打电话时,它必须发送一个不同的主叫号码/号码并使用不同的提供者。

这是我迄今为止:

 [local] exten => _NXXNXXXXXX,1,Set(line=${SIP_HEADER(From)}) exten => _NXXNXXXXXX,n,Verbose(line variable is <${line}>) exten => _NXXNXXXXXX,n,Set(CALLERID(name)=${IF($[ ${line} = line1 ]?${COMPANY_NAME}:${FAMILY_NAME})}) exten => _NXXNXXXXXX,n,Set(CALLERID(num)=${IF($[ ${line} = line1 ]?${COMPANY_NUMBER}:${FAMILY_NUMBER})}) exten => _NXXNXXXXXX,n,Dial(${IF($[ ${line} = line1]?SIP/${EXTEN}@${COMPANY_PROVIDER}:SIP/${EXTEN}@${FAMILY_PROVIDER})}) 

我真的不知道这是否正确, 我恐怕在validation之前将这些更改提交到我的extensions.conf

任何帮助将不胜感激。

根据VoIP Info Wiki,您可以在每个扩展基础上指定SIP扩展的callerid信息,如下所示:

 callerid="Tuomas Tammisalo" <1000> 

更新:您可以访问呼叫已经开始的CDRvariables 。 “$ {CDR(src)}”会给你通话的源扩展。

经过一番调查,我发现我可以从${CALLERID(num)}获得所需的信息。

所以,这就是我所做的:

 [local] exten => _NXXNXXXXXX,1,Set(line=${CALLERID(num)}) same => n,Verbose(line variable is <${line}>) same => n,GotoIf($["${line}" = "line1"]?business-out,${EXTEN},1:family-out,${EXTEN},1) [business-out] ... [family-out] ... 

希望能帮助别人