如果 CALLERID(ani) 未设置,CDR 使用 CALLERID(ani) 的当前值而不是 CDR(src) 的原始 CALLERID(num)。
[incoming]
exten => s,1,Verbose(Incoming call on line 123)
; try to extract phone number from sip header P-Asserted-Identity
same => n,Set(FON=$["${SIP_HEADER(P-Asserted-Identity)}" : "<sip:([0-9+]+)"])
; This changes clid number wthout affecting cdr's (Just for Dial...)
same => n,ExecIf($[${ISNULL(${FON})}=0]?Set(CALLERID(num)=${FON}))
; prevent beeing hacked by inject
same => n,Set(CALLERID(num)=${FILTER(+0123456789,${CALLERID(num)})})
; This tells cdr to use the new num for "automatic identified (billing) number" as src-field
same => n,Set(CALLERID(ani)=${CALLERID(num)})
same => n,Dial(SIP/me)
这是因为您必须记录真正的始发分机而不是一般公共服务号码 (08000815) 以进行内部计费。在大多数情况下,计费的有趣部分是真正的原始扩展。这就是 CDR 保存 CALLERID(num) 的原始值的原因。CALLERID(num) 在拨出电话期间经常被修改为普通公众号。在这种情况下,您无法再通过 cdr 识别真正的原始扩展名。