===== Настройка 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~~