===== Настройка Asterisk для проигрывания записи разговора по запросу панели 1С =====
==== Пример диалплана использующего запрос к CDR MYSQL через Asterisk ====
Для прослушивания звонков из 1С, нам необходима возможность получения имени файла звонка по уникальному идентификатору.
Добавим в диалплан mikoajamdll следующие строчки:
[miko_ajam]
exten => 0000777,1,NoCDR()
exten => 0000777,n,Set(dbname=${AST_CONFIG(cdr_mysql.conf,global,dbname)})
exten => 0000777,n,Set(user=${AST_CONFIG(cdr_mysql.conf,global,user)})
exten => 0000777,n,Set(password=${AST_CONFIG(cdr_mysql.conf,global,password)})
exten => 0000777,n,Set(monitor_path=${ASTSPOOLDIR}/monitor)
exten => 0000777,n,Set(recordingfile=${SHELL( mysql -sse 'SELECT recordingfile FROM cdr WHERE uniqueid Like ${QUOTE(${uniqueid1c}%)} LIMIT 1' -u${user} -p${password} ${dbname} )})
exten => 0000777,n,Gotoif($[${LEN(${recordingfile})} > 4]?FindInFileSystem:FindInUserfield)
exten => 0000777,n(FindInUserfield),Set(recordingfile=${SHELL( mysql -sse 'SELECT userfield FROM cdr WHERE uniqueid Like ${QUOTE(${uniqueid1c}%)} LIMIT 1' -u${user} -p${password} ${dbname} )})
exten => 0000777,n,ExecIf($[${LEN(${recordingfile})} < 4]?Hangup())
exten => 0000777,n(FindInFileSystem),Set(namedorashiren=$[${LEN(${recordingfile})}-4])
exten => 0000777,n,Set(recfile=${SHELL(find ${monitor_path} -name *${recordingfile:0:${namedorashiren}}*|head -n 1)})
exten => 0000777,n,ExecIf($[${LEN(${recfile})} > 4]?UserEvent(CallRecord,Channel: ${chan},FileName: ${recfile}))
exten => 0000777,n,Answer()
exten => 0000777,n,Hangup()
Если у вас в CDR БД отсутствует поле recordingfile, то нужно его добавить вручную.
На MySQL это выглядит следующим образом.
ALTER TABLE `cdr` ADD `recordingfile` VARCHAR(120) NOT NULL
Так же необходимо внести изменения в контекст записи разговоров.
Для FreePBX это [macro-record-enable].
Скопируйте его из extensions_additional.conf в extensions_override_freepbx.conf, и после назначения переменной имени файла записи добавьте следующую строку:
exten => s,n,Set(CDR(recordingfile)=${CALLFILENAME})
==== Пример запроса к CDR MYSQL из 1С:Предприятия 8 (внешние источники данных) ====
//Функция генерирует строку соединения с сервером через ODBC драйвер
Функция СформироватьСтрокуСоединенияСАстерискСервером(host,database,user,pass)
СтрокаСоединения = "DRIVER={MySQL ODBC 5.1 Driver}; SERVER="+host+"; DATABASE="+database+"; UID="+user+"; PWD="+pass;
Возврат СтрокаСоединения;
КонецФункции
// Возвращает с астериска запись разговора по переданному уникальному идентификатору
//
// Параметры
// <Дата начала периода поиска> - <Тип.Дата>
// <Дата окончания периода поиска> - <Тип.Дата>
// - <Тип.Строка> - Для каждого звонка Астериск возвращает такой идентификатор
//
// Возвращаемое значение:
//
// Таблица значений со строкой CDR Записи разговоров
//
Функция ВернутьЗаписьCDRДляУникальногоIDЗвонка(ДатаНачало,ДатаОкончания,ID) Экспорт
ПозицияТочкиВИД=Найти(ID,".");
ИДДляПоиска=Лев(ID,ПозицияТочкиВИД)+"%";
СтрокаСоединенияСАстерискСервером = СформироватьСтрокуСоединенияСАстерискСервером("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 КАК duration,
| cdr.billsec,
| cdr.disposition,
| cdr.amaflags,
| cdr.accountcode,
| cdr.uniqueid,
| cdr.userfield,
| cdr.recordingfile
|ИЗ
| ВнешнийИсточникДанных.Asterisk.Таблица.cdr КАК cdr
|ГДЕ
| ВЫРАЗИТЬ(cdr.calldate КАК ДАТА) МЕЖДУ &НачалоДня И &КонецДня
| И cdr.uniqueid ПОДОБНО &uniqueid
| И cdr.disposition = ""ANSWERED""
|
|УПОРЯДОЧИТЬ ПО
| duration УБЫВ
|АВТОУПОРЯДОЧИВАНИЕ";
Запрос.УстановитьПараметр("uniqueid",ИДДляПоиска);
Запрос.УстановитьПараметр("НачалоДня",ДатаНачало);
Запрос.УстановитьПараметр("КонецДня",ДатаОкончания);
Результат = Запрос.Выполнить();
ТЗ=Результат.Выгрузить();
Если ТЗ.Количество()>0 Тогда
Возврат ТЗ;
Иначе
Возврат "";
КонецЕсли;
КонецФункции // ВернутьЗаписьCDRДляУникальногоIDЗвонка()
Готовые файлы скриптов лежат в дистрибутиве поставки панели Asterisk для 1C
Если для вас данная инструкция оказалась сложной, не стесняйтесь,[[http://www.miko.ru/contacts/|пишите, звоните]], мы поможем или предложим настроенные решения от партнеров.
==== Полезные ссылки ====
* [[doc:1cajam:astcastomize|Общая предварительная настройка AJAM интерфейса Asterisk.]]
* [[astpanel:ats:asterisk:environments|Настройка передачи общих параметров системы из Asterisk]]
* [[astpanel:ats:asterisk:callhistory|Настройка получения истории звонков в панели 1С]]
* [[astpanel:ats:asterisk:playrecords|Настройка проигрывания записи разговора по запросу панели 1С]]
* [[astpanel:ats:asterisk:downrec|Настройка скачивания файла записи пользователем из панели телефонии]]
* [[astpanel:ats:asterisk:faxhistory|Настройка отображения истории факсимильных сообщений в панели 1С]]
* [[astpanel:ats:asterisk:faxsend|Настройка отправки факсимильного сообщения из 1С]]
* [[astpanel:ats:asterisk:downfax|Настройка скачивания файла факса пользователем из панели телефонии]]
==== Комментарии ====
~~DISQUS~~