v3.Контекст получения истории звонков АТС для 1C

Применимо к Asterisk версий 1.6; 1.8; 10; 11

Для этого, на сервер Asterisk необходимо добавить специализированный контекст, с помощью которого будет выполняться запрос в таблицу CDR, получение данных и передача их в AMI.

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

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

ВАЖНО

Вместо ВАШ_ЛОГИН (*asteriskuserDB*) - вставьте имя пользователя БД.

Вместо ВАШ_ПАРОЛЬ (*asteriskpasswordDB*) - пароль пользователя БД.

Вместо ИМЯ_ВАШЕЙ_БД (*NameasteriskDB*) - вставьте имя БД (по умолчанию, asteriskcdrdb)

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

;Блок выполняет запрос и получение результата из БД, а также трансляцию в АМI полученных данных.
exten => *22222,1,NoCDR()
;  Подключение к БД !!!ВАЖНО!!! данные логин, пароль и название БД необходимо заменить на свои. Как правило, имя пользователя asteriskuser, а БД asteriskcdrdb 
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]