Внимание!
Эта wiki об устаревших версиях
Документация к актуальной версии интеграции 1С и телефонии доступна по ссылке

Инструменты пользователя

Инструменты сайта


doc:panel1ccrm:asterisk_config:callhistory

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
doc:panel1ccrm:asterisk_config:callhistory [2012/05/18 12:18]
nb
doc:panel1ccrm:asterisk_config:callhistory [2014/11/14 22:32] (текущий)
Строка 1: Строка 1:
-===== Настройка Asterisk для получения истории звонков в панели 1С ===== +{{page>astpanel:ats:asterisk:callhistory}}
- +
-==== Источник истории звонков база данных MYSQL ==== +
-В панели реализована функция получения истории звонков с сервера asterisk, путем генерации вызова с номера 0000999 на номер 0000555 используя приведенный ниже диалплан. +
- +
-<file - extensions_miko.conf>​ +
-[from-internal] +
-exten => 0000999,​1,​NoCDR() +
-exten => 0000999,​n,​Answer() +
-exten => 0000999,​n,​Wait(60) +
-exten => 0000999,​n,​Hangup() +
- +
-exten => 0000555,​1,​NoCDR() +
-exten => 0000555,​n,​Set(num=0) +
-exten => 0000555,​n,​Set(i=0) +
-exten => 0000555,​n,​Set(chan=${v1}) +
-exten => 0000555,​n,​Set(date1=${v2}) +
-exten =0000555,​n,​Set(date2=${v3}) +
-exten => 0000555,​n,​Set(numbers=${v4}) +
-exten => 0000555,​n,​Set(dbname=${AST_CONFIG(cdr_mysql.conf,​global,​dbname)}) +
-exten => 0000555,​n,​Set(user=${AST_CONFIG(cdr_mysql.conf,​global,​user)}) +
-exten => 0000555,​n,​Set(password=${AST_CONFIG(cdr_mysql.conf,​global,​password)}) +
-exten => 0000555,​n,​Set(tmp_dir=${ASTLOGDIR}) +
-exten => 0000555,​n,​NoOp() +
-exten => 0000555,​n,​Set(packet=20) +
-exten => 0000555,​n,​Answer() +
-exten => 0000555,​n(NextNum),​Set(i=$[${i} + 1]) +
-exten => 0000555,​n,​Set(NumFilter=${CUT(numbers,,​${i})}) +
-exten => 0000555,​n,​Gotoif($[ ${LEN(${NumFilter})}=0 ]?​SendRequest) +
-exten => 0000555,​n,​ExecIf($[${i}=1]?​Set(SQLrequest=SELECT a.calldate,​a.src,​a.dst,​a.channel,​a.dstchannel,​a.billsec,​a.disposition,​a.uniqueid from (SELECT * from cdr where calldate BETWEEN ${QUOTE(${date1})} AND ${QUOTE(${date2})}) AS a where )) +
-exten => 0000555,​n,​ExecIf($[${i}>​1]?​Set(SQLrequest=${SQLrequest} OR )) +
-exten => 0000555,​n,​Set(SQLrequest=${SQLrequest} ((a.lastapp="​Transferred Call" AND a.lastdata like ${QUOTE(%/​${NumFilter}@%)}) OR (a.lastapp="​Dial"​ AND (a.channel like ${QUOTE(%/​${NumFilter}-%)} OR a.dstchannel like ${QUOTE(%/​${NumFilter}-%)} OR a.dstchannel like ${QUOTE(%/​${NumFilter}@%)} )))) +
-exten => 0000555,​n,​ExecIf($[${i}>​15]?​Hangup()) +
-exten => 0000555,​n,​Goto(NextNum) +
-exten => 0000555,​n(SendRequest),​System( mysql -sse '​${SQLrequest} LIMIT 100' -u${user} -p${password} ${dbname}>​ ${tmp_dir}/​${UNIQUEID}) +
-exten => 0000555,​n,​Set(kls=${SHELL(cat ${tmp_dir}/​${UNIQUEID} |wc -l)}) +
-exten => 0000555,​n,​Gotoif($[ ${kls} = 0 ]?​DelTmpFile:SendCDRHistory) +
-exten => 0000555,​n(SendCDRHistory),​Set(ostatok=${kls}) +
-exten => 0000555,​n(SendNextPacket),​Set(packet=${IF($[ ${ostatok} < ${packet}]?​${ostatok}:${packet})}) +
-exten => 0000555,​n,​Set(num=$[${num} + ${packet}]) +
-exten => 0000555,​n,​UserEvent(FromCDR,​Channel${chan},Date: ${date1},Lines: ${QUOTE(${SHELL(cat ${tmp_dir}/​${UNIQUEID} |head -n '​${num}'​| tail -n '​${packet}'​| sed '​s/​|/'​\',​\''/​g'​| sed '​s/​[\t]/'​\',​\''/​g'​|sed '​s/​$/​...../​g'​|tr "​\n"​ " "​)})}) +
-exten => 0000555,​n,​Set(ostatok=$[${ostatok}-${packet}]) +
-exten => 0000555,​n,​Gotoif($[ ${ostatok} > 0 ]?​SendNextPacket:​DelTmpFile) +
-exten => 0000555,​n(DelTmpFile),​System(rm ${tmp_dir}/​${UNIQUEID}) +
-exten => 0000555,​n,​ExecIf($[${kls}>​0]?​UserEvent(Refresh1CHistory,​Channel:​ ${chan},​Date:​ ${date1})) +
-exten => 0000555,​n,​Hangup() +
-</​file>​ +
- +
-Для базы звонков в 100000 записей,​ отображение истории в 1С за определенный день занимает 3-5 секунд. Потому мы рекомендуем именно этот способ работы с CDR записями. +
-Быстрее только прямое обращение к базе данных CDR из 1С, не используя функционал Asterisk. +
- +
-Для включения этого файла в работу необходимо положить его в директорию /​etc/​asterisk/​ и проинклюдить в файле /​etc/​asterisk/​extensions.conf с помощью следующей команды:​ +
-<​code>​ +
-#include extensions_miko.conf  +
-</​code>​ +
- +
-Если вы используете сборку asterisk с оболочкой freepbx тогда вам необходимо использовать extensions_override_freepbx.conf вместо extensions.conf +
- +
-Для сокращения количества обращений к серверу Asterisk, мы также рекомендуем добавить оповещение о добавлении CDR записи через AJAM интерфейс.  +
-Для этого необходимо включить опцию в файле настроек. +
-<file - cdr_manager.conf>​  +
-+
-; Asterisk Call Management CDR +
-+
-[general] +
-enabled = yes +
-</​file>​ +
-Таким образом после запроса записей за период,​ все новые записи о звонках будут добавляться динамически в историю при поступлении соответствующего эвента. +
- +
-===== Работа с базой данных CDR напрямую из 1С: Предприятия 8 ===== +
-Возможно специалистам 1С, будет проще работать с базой данных через новую возможность платформы 1С:​Предприятие 8 //​Внешние источники данных//​. +
-В блоге Николая Бекетова,​ описан процесс подключения к [[http://​www.miko.ru/​blogs/​SwordBlog/​52/​|базе данных из 1С]]. +
-В результате достаточно настроить связь с базой CDR записей и добавить в конфигурацию общий модуль **МИКО_Астериск_Сервер** +
-<code 1c> +
-//​Функция генерирует строку соединения с сервером через ODBC драйвер +
-Функция СформироватьСтрокуСоединенияСАстерискСервером(host,​database,​user,​pass) +
-  +
- СтрокаСоединения = "​DRIVER={MySQL ODBC 5.1 Driver}; SERVER="​+host+";​ DATABASE="​+database+";​ UID="​+user+";​ PWD="​+pass;​  +
-  +
- Возврат СтрокаСоединения;​ +
-  +
-КонецФункции +
- +
- +
-//​Функция возвращает информацию о звонках с сервера телефонии +
-Функция ВернутьЗаписиCDRДляТекущегоПользователя(ДатаНачало,​ ДатаОкончания,​КаналЛокальный,​КаналСотовый) Экспорт +
-  +
- СтрокаСоединенияСАстерискСервером = СформироватьСтрокуСоединенияСАстерискСервером("​ASTERISK_HOST","​ASTERISK_cdrdb","​ASTERISK_cdrdb_login","​ASTERISK_cdrdb_password"​);​ +
-  +
- ПараметрыСоединенияСАстерискомМИКО = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;​  +
- ПараметрыСоединенияСАстерискомМИКО.СтрокаСоединения = СтрокаСоединенияСАстерискСервером;​ +
-  +
- ВнешниеИсточникиДанных.Asterisk.УстановитьОбщиеПараметрыСоединения(ПараметрыСоединенияСАстерискомМИКО);​  +
- ВнешниеИсточникиДанных.Asterisk.УстановитьСоединение();​  +
-  +
- Запрос = Новый Запрос;​ +
- Запрос.Текст = "​ВЫБРАТЬ +
-                ​| ВЫРАЗИТЬ(cdr.calldate КАК ДАТА) КАК calldate, +
-                ​| cdr.clid,​ +
-                ​| cdr.src,​ +
-                ​| cdr.dst,​ +
-                ​| cdr.dcontext,​ +
-                ​| cdr.channel,​ +
-                ​| cdr.dstchannel,​ +
-                ​| cdr.lastapp,​ +
-                ​| cdr.lastdata,​ +
-                ​| cdr.duration,​ +
-                ​| cdr.billsec,​ +
-                ​| cdr.disposition,​ +
-                ​| cdr.amaflags,​ +
-                ​| cdr.accountcode,​ +
-                ​| cdr.uniqueid,​ +
-                ​| cdr.userfield,​ +
-                       ​| cdr.recordingfile  +
-                ​|ИЗ +
-                ​| ВнешнийИсточникДанных.Asterisk.Таблица.cdr КАК cdr +
-                ​|ГДЕ +
-                ​| (cdr.dstchannel ПОДОБНО ""​%""​ + &​НашКанал + ""​%""​ +
-                ​| ИЛИ cdr.channel ПОДОБНО ""​%""​ + &​НашКанал + ""​%""​ +
-                ​| ИЛИ cdr.dstchannel ПОДОБНО ""​%""​ + &​НашКаналСотовый + ""​%""​ +
-                ​| ИЛИ cdr.channel ПОДОБНО ""​%""​ + &​НашКаналСотовый + ""​%""​) +
-                | И ВЫРАЗИТЬ(cdr.calldate КАК ДАТА) МЕЖДУ &​НачалоДня И &​КонецДня +
-                | +
-                ​|УПОРЯДОЧИТЬ ПО +
-                ​| calldate УБЫВ +
-                ​|АВТОУПОРЯДОЧИВАНИЕ";​ +
-  +
- Запрос.УстановитьПараметр("​НашКанал",​СокрЛП(КаналЛокальный));​ +
- Запрос.УстановитьПараметр("​НашКаналСотовый",​СокрЛП(КаналСотовый));​ +
- Запрос.УстановитьПараметр("​НачалоДня",​ДатаНачало);​ +
- Запрос.УстановитьПараметр("​КонецДня",​ДатаОкончания);​ +
-  +
- Результат = Запрос.Выполнить();​ +
-  +
- ТЗ=Результат.Выгрузить();​ +
- Возврат ТЗ; +
-  +
-КонецФункции +
-</​code>​ +
- +
-<note tip>​Готовые файлы скриптов лежат в дистрибутиве поставки панели Asterisk для 1C</​note>​ +
- +
-<note important>​Если для вас данная инструкция оказалась сложной,​ не стесняйтесь,​[[http://​www.miko.ru/​contacts/​|пишите,​ звоните]],​ мы поможем или предложим настроенные решения от партнеров.</​note>​ +
- +
- +
-==== Полезные ссылки ==== +
-  * [[doc:​panel1ccrm:​asterisk_config|Настройка сервера Asterisk для работы с панелью]] +
-   +
- +
-==== Комментарии ==== +
- +
-~~DISQUS~~ +
doc/panel1ccrm/asterisk_config/callhistory.1337343487.txt.gz · Последние изменения: 2014/11/14 22:32 (внешнее изменение)