Настройка, получение и воспроизведение файлов записи

Запись разговора - это стандартная функциональность Asterisk. По умолчанию, запись выполняется в каталог /var/spool/asterisk/monitor

Настройка записи на стороне Asterisk

Если используется FreePBX, тогда необходимо проверить следующие настройки:

  • Меню Конфигурация - Основные настройки

Флаг «Не использовать запись разговоров» должен быть снят.

Должен быть указан «Формат записи разговоров».

  • Меню Конфигурация - Внутренние номера

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

  • Меню Конфигурация - Очереди

Если вы планируете запись звонков, проходящих через очередь, тогда необходимо разрешить для этой очереди запись.

Настройка прав пользователя AMI

Чтобы получать информацию о файлах записи разговора, пользователь AMI должен иметь права чтения на класс событий dialplan.

Детальная информация о настройке пользователя AMI изложена в статье Настройка AMI

Получение файла записи в 1С:Предприятие

События, получаемые из Asterisk доступны в обработчике внешнего события. Это может быть обработчик в какой-либо форме, либо глобальный обработчик ОбработкаВнешнегоСобытия(Источник,Событие,Данные)

Информация о файле записи поступит как значение переменной MIXMONITOR_FILENAME события VarSet.

Пример пакета Asterisk:

Event: VarSet
Variable: MIXMONITOR_FILENAME
Value: /var/spool/asterisk/monitor/1234567890.gsm

Организация прослушивания файла записи с телефона/софтфона

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

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

[1c-playfile]; Takes range of $MSG(n) and quantity $COUNT = n at the last position
exten => s,1,NoCDR()
exten => s,n,Answer
exten => s,n,Wait(1)
exten => s,n,Set(i=1)
exten => s,n(repeat),Background(${MSG${i}})
exten => s,n,Set(i=$[${i} + 1])
exten => s,n,Gotoif($["${i}" < "${COUNT}"]?repeat)
exten => s,n,Playback(vm-goodbye)
exten => s,n,Hangup
;end of [1c-playfile]

Пример функции воспроизведения файла записи для 1С

Функция ЗаписьПрослушать(Знач ИмяФайла="") Экспорт;
	CRLF=Chars.CR+Chars.LF;
	Протокол="SIP/";
	ВнутреннийНомер="902";
	Приоритет="1";
	Таймаут="30000";
 
	ИмяФайла=СтрЗаменить(ИмяФайла,".gsm","");
	ИмяФайла=СтрЗаменить(ИмяФайла,".wav","");
	Приемник="s";
	Источник=Протокол+ВнутреннийНомер;
	КонтекстЗаписи="1c-playfile";
	ИДНомера="1c-playfile";
	СтрокаПерем="MSG1="+ИмяФайла+",COUNT=1";
 
	ТекстКоманды="Action: Originate"+CRLF+
	"Channel: "+Источник+CRLF+
	"Context: "+КонтекстЗаписи+CRLF+
	"Exten: "+Приемник+CRLF+
	"Priority: "+Приоритет+CRLF+
	"Callerid: "+ИДНомера+CRLF+
	"Timeout: "+Таймаут+CRLF+
	"Variable: "+СтрокаПерем+CRLF;
 
	Телефония.ВыполнитьКоманду(ТекстКоманды);
 
КонецФункции // ЗаписьПрослушать

Настройка фильтра регулярного выражения

ROM-Asterisk имеет мощную и гибкую систему фильтрации на базе регулярных выражений. Это позволяет значительно снизить нагрузку на сеанс 1С:Предприятие.

СтрокаФильтра="Dial.{1,}?Begin.{1,}?902|Bridge.{1,}?902|Hangup.{1,}?902|MIXMONITOR_FILENAME";
Телефония.УстановитьРегулярноеВыражение(СтрокаФильтра);

В примере, фильтром игнорируются все события, кроме:

  • События начала звонка на внутренний номер 902: Dial Begin
  • События соединения с внутренним номером 902: Bridge
  • Событие завершения звонка на номер 902: Hangup
  • Событие создания файла записи: MIXMONITOR_FILENAME