【问题标题】:Asterisk: Logging changed CALLERID(num) to CDR星号:记录将 CALLERID(num) 更改为 CDR
【发布时间】:2015-06-03 23:09:39
【问题描述】:

Asterisk 通过 cdr 将调用信息记录到数据库中。

如果通过 sip 中继打入电话,则通常会为远程公共电话号码提供 P-Asserted-Identity。这些信息通常会在 CDR 计费数据库中丢失。

[incoming]
exten => s,1,Set(CALLERID(num)=${SIP_HEADER(P-Asserted-Identity)})
 same => n,Dial(SIP/me)

这会将 P-Asserted-Identity 设置为下一次拨号的主叫号码,但不会在挂机时记录到 CDR。原来的 CALLERID(num) 仍然记录为 src

【问题讨论】:

    标签: asterisk cdr


    【解决方案1】:

    如果 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 识别真正的原始扩展。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多