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