artem
27.03.2019
2

Делаем игрушку для ребёнка с помощью IP-телефона и Asterisk(Часть 2)

В этой статье мы будем модернизировать игрушку для ребенка, сделанную в статье «Делаем игрушку для ребёнка с помощью IP-телефона и Asterisk»

А именно добавим модуль для записи новых аудио сообщений. Т.е. добавим возможность для каждого члена семьи добавлять о себя новые аудио сообщения для ребенка.

Происходить  это будет следующим образом, например: бабушка Юлия звонит на номер 999. Прослушивает сообщение с приветствием и предложением набрать свой персональный код. В нашем случаем код будет равен номеру папки с аудио файлами от бабушки Юлии, т.е. код 1. Бабушка на панели телефона нажимает кнопку 1. Далее бабушка прослушивает сообщение-инструкцию с объяснением, когда начнется записать аудио сообщение и как закончить запись. После записи и завершении записи включится прослушивание записанного сообщения и сброс звонка.

Приступим к реализации. Для начало добавим маршрут при звонке на номер 999. Данный экстен добавим в контекст для абонентов, которые могут оставлять аудио сообщения для ребенка. В этом экстен будем использовать функцию GoTo которая будет переводить звонок в новый контекст, в котором будем описаны действия для записи аудио сообщений. В нашем случае это выглядеть будет так:

1.png

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

Добавим экстен:

2.png

Этот экстен выполняется, когда идет звонок на номер 999. Этот экстен устанавливает соединение функцией Answer(). Воспроизводит аудио файл, функцией Playback, с приветствием и  предложением вести персональный код для дальнейшей работы. Далее ожидаем ввод цифры функцией WaitExten в течении 10 секунд.

Добавим экстен для обработки ошибочного набора, т.е. если абонент набирает номер, которого  нет в экстенах, то происходит возврат на начало контексте в экстен s.

3.png

Добавим экстен для обработки окончания времени ожидания нажатий, т.е. если абонент в течение промежутка времени не вводит свой персональный код, то происходит возврат на начало контексте в экстен s.

4.png

Далее приступим к реализации записи аудио сообщений для каждого персонального кода. Сначала сделаем запись аудио сообщения для кода 1 т.е. добавим экстен для номера 1.

5.png

 Впервой строчке с помощью функции Set в переменную COUNT1 записывается общее количество аудио файлов в папке для абонента под кодом 1.

Во второй строчке с помощью функции Set и функции MATH ,созданную переменную на предыдущем шаге, увеличиваем на единицу и применяем тип данных integer т.е. тип целых чисел.

Функция MATH(). Назначение: выполнение некоторых математических функций. Функция выполняет математическую операция с числом «number 1» и «number 2». Доступны следующие математические операции: +, -, /, *, %, <, >, >=, <=, == которые ведут себя по аналогии с языком C. Тип результата:

f, float — float(по умолчанию)

i, int — целое число,

h, hex — шестнадцетиричное число,

c, char — символ

Пример

exten => s,1, Set(COUNT=${MATH(4+1,i)}) — устанавливает значение: COUNT=5

В третье строчке с помощью функции Playback воспроизводим аудио файл с инструкцией о том, когда начнется запись, как запись закончить и что далее будет воспроизведение записанного файла.

В четвертой строчке с помощью функции Record происходит запись аудио сообщения в папку абонента под кодом 1, а именем файла будет порядковый номер и формат wav.

Функция Record(). Назначение: запись разговора пользователя в файл. Описание: Record(filename.format[|silence][|maxduration][|option])

При начале работы функции Record будет коротки сигнал уведомляющий о начале записи. Чтобы закончить запись нужно положить трубку телефона или на панели телефона нажать решетку(#). Звуковой файл запишется в формате .wav и частотой 8кГц

В пятой строчке с помощью функции Playback воспроизводим записанный файл.

Подобную конструкцию используем для абонентов с другими персональными кодами.

6.png

Получилась рабочая конструкция для записи аудио сообщений. Данная конструкция имеет недостаток, а именно после прослушивания записи, не возможности удалить ее если не понравилось абоненту. Добавим этот функционал.

Работать это будет следующим образом: после прослушивания записанного аудио сообщения, будет воспроизводиться уведомление «Если записанное сообщение удовлетворяет, то положите трубку для завершения работы с записью. Если записанное сообщение вам не понравилось, то оставайтесь на линии в течение 10 секунд для перезаписи аудио сообщения».

Модернизируем диалплан. В шестую строчку добавим воспроизведение уведомления с помощью функции Playback.

8.png

Далее в седьмую строчку добавим ожидание в 10 секунд с помощью функции Wait.

9.png

В восьмую строчку добавим удаление записанного аудио файла с помощью unix команды rm c указанием пути к файлу. Данную команду выполним с помощью функции диалплана System.

10.png

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

11.png

В итоге получается вот такая конструкция:

7.png

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

Проверим работоспособность:

1.gif

 
avatar
  Подписаться  
Уведомление о

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

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

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

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

ближайшие Вебинары

ONLINE

Why Choose HUGE?

Unlimited pre-designed elements

Each and every design element is designed for retina ready display on all kind of devices

User friendly interface and design

Each and every design element is designed for retina ready display on all kind of devices

100% editable layered PSD files

Each and every design element is designed for retina ready display on all kind of devices

Created using shape layers

Each and every design element is designed for retina ready display on all kind of devices