Сергей Маликов
02.07.2020
10442

Создание IVR для записи голосовых сообщений средствами телефона, и их использование

Для использования приветствий и голосовых сообщений в Asterisk их необходимо предварительно записать, сконвертировать в формат wav и, после, загрузить. О конвертировании имеющегося звукового файла для Asterisk смотрите данную статью. Но, сообщения могут быть также записаны и средствами самого телефона. Создадим голосовое меню, в котором можно будет сделать запись и прослушать сообщение. Для добавления оповещения в […]

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

О конвертировании имеющегося звукового файла для Asterisk смотрите данную статью.

Но, сообщения могут быть также записаны и средствами самого телефона.

Использовавшееся ПО: ОС CentOS Linux release 7.6.1810 (Core) (cat /etc/centos-release), Asterisk 13.27.1 (asterisk -V), FreePBX 13.0.192.19 (amportal a ma list | grep framework)

Создадим голосовое меню, в котором можно будет сделать запись и прослушать сообщение.

Для добавления оповещения в IVR  используем уже имеющиеся системные записи. В веб админке переходим Аdmin(Управление)->System Recordings(Звуковые файлы)

Записи во Freepbx можно добавить также воспользовавшись доступными опциями Record In Browser(запись с помощью браузера) или Record Over Extension(запись с помощью звонка на добавочный номер). Но, если у пользователя на момент записи нет (или не может быть) доступа к веб-админке, необходимо реализовать способ ниже.

Для оповещения с текстом: «Для записи сообщения нажмите 1, для прослушивания сообщения нажмите 2» можно использовать следующие системные записи.

to-rerecord-it
 vm-message
 press-1
 to-listen-to-it
 vm-message
 press-2

Для добавления системной записи необходимо ввести относительный путь в поле Add system recording

Добавление системной записи

В результате должно получиться одно сообщение, состоящее из нескольких записей, которое будем использовать в IVR:

Звуковое оповещение IVR Record

После добавления – Submit(Сохранить), соглашаемся с предупреждением о конвертации “ If you are doing media conversions this can take a very long time, is that ok?”, Apply Config(Применить).

Переходим Applications(Приложения)->IVR(Голосовое меню) -> Add new IVR(Добавление нового) и создаем IVR

Заполняем поля Announcement(голосовое сообщение при попадании в IVR), Timeout(время ожидания выбора пункта меню), Invalid Retries(количество ошибок при выборе), остальные поля пока не заполняем, сохраняем.

Для использования в веб-интерфейсе пользовательского кода из extensions_custom.conf переходим в Admin(Управление)->Custom Destinations(Системный диалплан). Добавляем custom destination для записи, отмечаем Return (возврат после выхода), Destination – ранее созданная IVR.

И, также, custom destination для прослушивания записанного сообщения. Сохраняем изменения.

Добавление в веб-интерфейс custom destination для прослушивания

Дозаполняем IVR: указываем Invalid Destination(назначение после неправильного выбора пункта меню), Timeout Destination(назначение после окончания таймаута выбора), добавляем пункты 1 и 2.

IVR for recording

Подключаемся по SSH, в консоли выполняем

nano /etc/asterisk/extensions_custom.conf

Рассмотрим диалплан для записи/перезаписи одного сообщения (например, сообщения, которое будет проигрываться в праздничные дни):

[record]
exten => s,1,NoOp(New recording)
;Предупреждение о вводе пароля и ввод пароля
same => n,Read(pin,vvedite-parol,4,,,10)
;pin для записи – 1212, если пользователь ввел верно, продолжаем
;(переход в именованный приоритет ok), если нет – повтор ввода
same => n,GotoIf($["${pin}"="1212"]?ok)
same => n,Playback(invalid)
same => n,Goto(record,s,1)
:Для системных оповещений в процессе записи используем имеющиеся
;системные звуковые файлы из /var/lib/asterisk/sounds/ru/ (record, saved и др.)
;если необходимо немного подкорректировать эти записи -скопировать их
;в другую директорию /var/lib/asterisk/sounds/ru/custom/sys/ и изменить
same => n(ok),Playback(/var/lib/asterisk/sounds/ru/custom/sys/record)
;указываем имя записи
same => n,Set(REC_NAME=recorded_announcement)
;если требуется, чтобы
;записи писались в 1 файл (имя в формате ггммдд-ччммсс.wav) – 
;по-другому установить переменную REC_NAME
;same => n,Set(REC_NAME=${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)})
;запись сохраняем в /var/lib/asterisk/sounds/ru/custom/rec/ , 
;указываем имя, формат, максимальное  кол-во сек тишины, максимальную длительность
same => n,Record(/var/lib/asterisk/sounds/ru/custom/rec/${REC_NAME}.wav,10,300)
;проигрываем системное сообщение - сохранено
same => n,Background(/var/lib/asterisk/sounds/ru/custom/sys/saved)
;Воспроизводим записанное сообщение
same => n,Background(/var/lib/asterisk/sounds/ru/custom/rec/${REC_NAME})
;Воспроизводим “Если корректно нажмите 1, для перезаписи – 2”
same => n,Background(/var/lib/asterisk/sounds/ru/custom/sys/if-correct-press)
same => n,Background(/var/lib/asterisk/sounds/ru/digits/1)
same => n,Background(/var/lib/asterisk/sounds/ru/custom/sys/to-rerecord-it)
same => n,Background(/var/lib/asterisk/sounds/ru/custom/sys/press-2)
;Ожидаем ответа 5 сек
same => n,WaitExten(5)

;При нажатии 1 или неправильном вводе
exten  => i,1,NoOp(Сообщение записано. Выход)
same => n,Playback(/var/lib/asterisk/sounds/ru/auth-thankyou)
same => n,Wait(2)
same => n,Playback(/var/lib/asterisk/sounds/ru/goodbye)
same => n,Wait(2)
same => n,Hangup

;При истечении таймаута ввода
exten  => t,1,NoOp(Сообщение записано. Выход)
same => n,Playback(/var/lib/asterisk/sounds/ru/auth-thankyou)
same => n,Wait(2)
same => n,Playback(/var/lib/asterisk/sounds/ru/goodbye)
same => n,Wait(2)
same => n,Hangup

;При нажатии 2 – удаление и перезапись
exten  => 2,1,NoOp(Удаление файла /var/lib/asterisk/sounds/ru/custom/rec/${REC_NAME}.wav)
same  => n,System(rm /var/lib/asterisk/sounds/ru/custom/rec/${REC_NAME}.wav)
same => n,Wait(1)
same  => n,Goto(s,1)

[playback-recording]
exten => s,1,NoOp(Воспроизведение последнего записанного сообщения)
same => n,Playback(/var/lib/asterisk/sounds/ru/custom/sys/last-message)
;Скрипт, определяющий последнее записанное сообщение
;В /var/lib/asterisk/sounds/ru/custom/rec
same => n,AGI(last-recording.sh,${LAST_MESSAGE})
same => n,NoOp(${LAST_MESSAGE})
same => n,Playback(/var/lib/asterisk/sounds/ru/custom/rec/${LAST_MESSAGE})

Для того, чтобы записи писались в разные файлы и, далее, сами добавлялись в БД и были доступны в веб-интерфейсе, необходимо в контекст [record] для экстеншенов i,t (куда абонент попадает в случае успешно записанного сообщения), перед Hangup, добавить вызов AGI скрипта (например на php), куда передать имя записанного сообщения – переменную ${REC_NAME} и добавить в БД asterisk в таблицу recordings, новую запись.

Для применения изменений в базе необходимо инициировать из AGI скрипта выполнение команды

fwconsole reload  

Данный код аналогичен нажатию кнопки Apply Config в веб-интерфейсе

См.подробнее статью об использовании AGI скриптов.

Для определения последней сделанной записи cоздаем скрипт last-recording.sh, даем права на выполнение

nano /var/lib/asterisk/agi-bin/last-recording.sh
chmod +x /var/lib/asterisk/agi-bin/last-recording.sh
Скрипт, определяющий последнее записанное сообщение

Для, того, чтобы перейти в созданное IVR для записи сообщения создадим новый добавочный (напр. 210), и на вкладке Advanced(расширенные настройки) укажем Optional Destination (например Not Reachable — назначение при отключенном добавочном)  IVR for recording

Назначение при отключенном добавочном

Для применения диалплана, добаленного в extensions_custom.conf:

asterisk -rvvv

CLI>

dialplan reload

После этого при звонке на 210 произойдет попадание в IVR для записи.

Попадание в IVR для записи при звонке на доб. 210

Для добавления необходимо перейти в веб-интерфейсе Admin->System recordings и указать название сообщения (напр. Recording-announcement), в поле Add System Recording вписать относительный путь к файлу — custom/rec/recording-announcement

Добавление сообщения в веб-интерфейсе

Далее его можно использовать. Например, для проигрывания сообщения при звонке в установленное время (дни, часы) – перейти в Application->Announcement, добавить новое системное сообщение, указать Destination after Playback(действие после воспроизведения – в примере отбой)

Добавление системного сообщения

Добавить/cкорректировать временную группу (Time Groups)

Временная группа для праздничных дней

Добавить/cкорректировать правило по времени (Time condition), указав в нем временную группу, Destination matches (назначение при попадании в нее — системное сообщение Custom-recording-for-rest-day) и Destination non-matches (направление при непопадании – IVR Main).

Правило по времени

Далее необходимо во входящих маршрутах(Inbound routes) для каждого маршрута, где должно проигрываться записанное сообщение (при попадании в указанные во временной группе рамки) выбрать добавленное правило по времени(Rest-days).

Входящие маршруты
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование


ближайшие курсы

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

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

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.