Asterisk 传出 CDR 记录到 Mysql

Asterisk 传出 CDR 记录到 Mysql

尝试使用自定义字段利用 cdr 日志记录(到 mysql)。我遇到的问题仅在拨打外拨电话时,在拨打入站电话期间,我可以毫无问题地记录自定义字段。

我遇到问题的原因是因为我需要的自定义 cdr 字段对于系统上的每个用户来说都是一个唯一的值。

配置文件

 ...
 ...

 [sales_department](!)
 type=friend
 host=dynamic
 context=SalesAgents
 disallow=all
 allow=ulaw
 allow=alaw
 qualify=yes
 qualifyfreq=30


 ;; company sales agents:
 [11](sales_agent)
 secret=xxxxxx
 callerid="<...>"

 [12](sales_agent)
 secret=xxxxxx
 callerid="<...>"

 [13](sales_agent)
 secret=xxxxxx
 callerid="<...>"

 [14](sales_agent)
 secret=xxxxxx
 callerid="<...>"

扩展配置文件

 [SalesAgents]
 include => Services

 ; Outbound calls
 exten=>_1NXXNXXXXXX,1,Dial(SIP/${EXTEN}@myprovider)


 ; Inbound calls
 exten=>100,1,NoOp()
 same => n,Set(CDR(agent_id)=11)
 same => n,CELGenUserEvent(Custom Event)
 same => n,Dial(${11_1},25)
 same => n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
 same => n(unavail),VoiceMail(11@asterisk)
 same => n,Hangup()
 same => n(busy),VoiceMail(11@asterisk)
 same => n,Hangup()

 exten=>101,1,NoOp()
 same => n,Set(CDR(agent_id)=12)
 same => n,CELGenUserEvent(Custom Event)
 same => n,Dial(${12_1},25)
 same => n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
 same => n(unavail),VoiceMail(12@asterisk)
 same => n,Hangup()
 same => n(busy),VoiceMail(12@asterisk)
 same => n,Hangup()

 ...
 ...

对于上例中拨号计划的入站部分,我可以插入自定义 cdr 字段 (agent_id)。但在上面,您可以看到,对于拨号计划的出站部分,我一直不知道如何才能告诉拨号计划哪个 agent_id 正在拨打出站电话。

我的问题:如何将 agent_id=[11] & agent_id=[12] 和 agent_id=[13] 和 agent_id=[14] 等用作外拨电话的 cdr 的自定义字段?

答案1

@miken32 的建议很好。

另一种方法是让每个代理的 SIP 对等定义在通道变量中定义其代理 ID:

; sip.conf
[agent_12]
type=peer
setvar=__AGENT_ID=agent_12

每次为该对等方创建通道时,都会自动为其设置 AGENT_ID 变量。由于我们已在该变量前面加上继承,因此从其创建的任何子通道(即其拨号的通道)也将在其上设置 AGENT_ID。

在您的外拨电话中,您可以像这样在频道拨号上进行设置:

 ; Outbound calls
 exten =>_1NXXNXXXXXX,1,NoOp()
 same  =>             n,Set(CDR(agent_id)=${AGENT_ID}
 same  =>             n,Dial(SIP/${EXTEN}@myprovider)

这将设置agent_id您的 CDR 中的列。

请注意,如果您需要在 Dial 中创建的出站通道上设置值,则可以使用预拨号处理器

答案2

如果您没有使用 SIP 对等定义中的 accountcode 字段,您可以将其设置为代理 ID,然后Set(CDR(agent_id)=CDR(accountcode))在出站拨号计划中使用。

相关内容