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

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

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


doc:panel1ccrm:asterisk_config:playrecords

Настройка Asterisk для проигрывания записи разговора по запросу панели 1С

Пример диалплана использующего запрос к CDR MYSQL через Asterisk

Для прослушивания звонков из 1С, нам необходима возможность получения имени файла звонка по уникальному идентификатору.

Добавим в диалплан mikoajamdll следующие строчки:

extensions_miko.conf
[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; 
 
	Возврат СтрокаСоединения;
 
КонецФункции
 
// Возвращает с астериска запись разговора по переданному уникальному идентификатору
//
// Параметры
//  <Дата начала периода поиска>  - <Тип.Дата> 
//  <Дата окончания периода поиска>  - <Тип.Дата> 
//  <ID>  - <Тип.Строка> - Для каждого звонка Астериск возвращает такой идентификатор
//
// Возвращаемое значение:
// 
//	Таблица значений со строкой 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
Если для вас данная инструкция оказалась сложной, не стесняйтесь,пишите, звоните, мы поможем или предложим настроенные решения от партнеров.

Полезные ссылки

Комментарии

2013/08/06 14:10 · nb
doc/panel1ccrm/asterisk_config/playrecords.txt · Последние изменения: 2014/11/14 22:32 (внешнее изменение)