Настройка, получение и воспроизведение файлов записи
Запись разговора - это стандартная функциональность 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
