v3.Файл для подключения контекстов прослушивания записей и получения истории звонков АТС для 1C

Использование получения истории звонков АТС через AMI-соединение должно использоваться только в случае, если ваша IP-АТС не поддерживает MySQL-подключение (MyPBX Std, SOHO, Zycoo, etc)

Получение истории через AMI может снизить производительность сеанса 1С.

Для удобства клиентов, все служебные контексты для корректной работы панели телефонии мы собрали в один конфигурационный файл, который необходимо создать в каталоге /etc/asterisk/ на вашем сервере телефонии.

Для включения его в работу необходимо добавить строчку #include extensions_Simplit.conf в самое начало файла /etc/asterisk/extentions_custom.conf и указать правильные параметры подключения (имя пользователя БД, пароль пользователя БД и имя самой БД).

Примечание: на некоторых дистрибутивах (FreePBX Distro) необходимо выполнить команду из консоли после вышеперечисленных операций:

chown asterisk:asterisk /etc/asterisk/extensions_Simplit.conf

Содержимое файла extensions_Simplit.conf

[GetCDRRows] ;Получение набора записей из CDR
;Блок выполняет поднятие трубки и ее удержание в течении 5 секунд.
exten => *11111,1,NoCDR()
exten => *11111,n,Answer(5000)
exten => *11111,n,Hangup()

;Блок выполняет запрос и получение результата из БД, а также трансляцию в АМI полученных данных.
exten => *22222,1,NoCDR()
;Подключение к БД !!!ВАЖНО!!! данные логин, пароль и название БД необходимо заменить на свои.
exten => *22222,n,MYSQL(Connect connid localhost *asteriskuserDB* *asteriskpasswordDB* *NameasteriskDB*)
;Передача запроса
exten => *22222,n,MYSQL(Query resultid ${connid} SELECT Concat_WS('|',Cast(`calldate` As char),Cast(src as char),Cast(dst as char),Cast(duration as char),Cast(disposition as char),cast(uniqueid as char)) as Result_String FROM `cdr` WHERE ${condition})
;Получение первой строки результата
exten => *22222,n(fetchrow),MYSQL(Fetch foundrow ${resultid} Result_String)
;Запуск цикла по разбору оставшегося набора данных
exten => *22222,n,While($["${foundRow}" = "1"])
;Трансляция полученных данных в АМI 
exten => *22222,n,UserEvent(ListCDRRows,CDRRow: ${Result_String},ActionID: ${actionID})
exten => *22222,n,MYSQL(Fetch foundrow ${resultid} Result_String)
;Конец цикла
exten => *22222,n,EndWhile ;continue loop if row found
;Финальное сообщение о окончании разбора данных
exten => *22222,n(done),UserEvent(ListCDRRowsComplete,ListItems: ${resultid},ActionID: ${actionID})
;Отключение от БД
exten => *22222,n,MYSQL(Clear ${resultid})
exten => *22222,n,MYSQL(Disconnect ${connid})
exten => *22222,n,Hangup()

;end of [GetCDRRows]

[1c-playfile]; Контекст для прослушивания записей.

;Позволяет принять набор ссылок на записи MSG{i} и количество записей {COUNT} в наборе.

exten => s,1,NoCDR()
exten => s,n,Answer
exten => s,n,Wait(1)
exten => s,n,Set(i=1)
exten => s,n(repeat),ControlPlayback(${MSG${i}},5000,#,*,8,0)
exten => s,n,Set(i=$[${i} + 1])
exten => s,n,Gotoif($["${i}" < "${COUNT}"]?repeat)
exten => s,n,Playback(vm-goodbye)
exten => s,n,Hangup
;end of [1c-playfile]