Назад | Перейти на главную страницу

Запись исходящего CDR Asterisk в Mysql

Попытка использовать ведение журнала cdr (в mysql) с использованием настраиваемых полей. Проблема, с которой я сталкиваюсь, возникает только тогда, когда выполняется исходящий вызов, во время входящих вызовов настраиваемое поле я могу регистрировать без проблем.

Причина, по которой у меня возникла проблема, заключается в том, что необходимое мне настраиваемое поле cdr является уникальным значением для каждого пользователя в системе.

sip.conf

 ...
 ...

 [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="<...>"

extension.conf

 [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). Но над ним вы можете увидеть раздел Oubound диалплана. Я был озадачен тем, как я смогу сообщить диалплану, какой agent_id выполняет исходящий вызов.

Мой вопрос: как взять agent_id = [11] & agent_id = [12] и agent_id = [13] и agent_id = [14] и т.д. и использовать это как настраиваемое поле для cdr при исходящих вызовах?

Предложение @miken32 - хорошее.

Другой способ сделать это - указать в определениях SIP-узла каждого агента свой идентификатор агента в переменной канала:

; 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, вы можете использовать Обработчик предварительного набора.

Если вы не используете поле accountcode в определении однорангового узла SIP, вы можете установить его на идентификатор агента, а затем использовать Set(CDR(agent_id)=CDR(accountcode)) в исходящем диалплане.