Это старая версия документа.


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

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

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

При использовании FreePBX, в файл /etc/asterisk/extensions_custom.conf необходимо добавить текст контекста GetCDRRows или создать файл с текстом контекста в каталоге /etc/asterisk присоединить его с помощью инструкции #include.

ВАЖНО

В строке подключения к БД, необходимо указать ваши имя пользователя БД, пароль пользователя БД и само имя БД.

Как правило, имя пользователя - asteriskuser, а БД - 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]