尝试使用自定义字段利用 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))
在出站拨号计划中使用。