Дмитрий Барышников
27.02.2019
394

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

В это статье сделаем игрушку с помощью IP-телефона и Asterisk. Задумка в том, чтобы ребенок по нажатию какой-либо цифры на панели телефона услышал сообщения записанное одним из родственников. Определим конкретную задачу в рамках статьи. По нажатию кнопки один, ребенок должен услышать сообщение от бабушки Юлии, по нажатию двойки – сообщение от бабушки Лидии, по нажатию […]

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

Определим конкретную задачу в рамках статьи. По нажатию кнопки один, ребенок должен услышать сообщение от бабушки Юлии, по нажатию двойки – сообщение от бабушки Лидии, по нажатию кнопки три – сообщения от дедушки Владимира и по нажатию кнопки четыре – сообщение от дедушки Александра.

Звуковые файлы должны быть в формате .wav и частотой 8кГц

Звуковые файлы для каждого члена семьи переименуем по порядку начиная с единицы

Звуковые файлы скопируем на атс в папку соответствующую номеру каждого члена семьи. Эти папки будут храниться по пути /var/lib/asterisk/sounds/ru/custom/

Для бабушки Юлии под номером один папка со звуковыми файлами на атс примет вид:

Для дедушки Владимира под номером три папка со звуковыми файлами на атс примет вид:

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

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

Первая строчка:

Отлавливаем нажатие кнопки один с помощью exten. После чего с помощью функции Set в переменную COUNT1 сохраняем количество звуковых фалов от бабушки Юлии в соответствующей папке. Подсчет количество файлов  папке происходит с помощью команды ls /var/lib/asterisk/sounds/ru/custom/1/ | wc –l

ls  — утилита Unix, которая выводит содержимое каталогов. Команда ls с  параметром wc –l подсчитывает и выводит количество файлов в указанной папке.
Так как команда ls это unix команда и выполняется она в консоле(SHELL), а используется в диалплане asterisk, то используем функцию SHELL

Вторая строчка

Функция NoOp выводит в консоль asterisk содержимое переменной COUNT1. Это используется в качестве отладочной информации. Поэтому данную строчку можете не использовать.

Третья строчка

С помощью функции Playback воспроизводим звуковой файл. Для этого в параметрах этой функции указываем путь к папке со звуковыми файлами бабушки Юлии. В качестве имени звукового файла используем функцию RAND. Эта функция генерирует случайное число из промежутка указанного в параметрах это функции. В нашем случае этот промежуток равен от единицы до числа количества звуковых файлов в соответствующей папке.

Четвертая строчка

Выполняем завершение вызова после прослушивания аудио файла.

Подсчет количества аудио фалов в папке и случайное число используем для того чтобы asterisk мог воспроизводить аудио файлы которые будут добавляться далее для расширения картотеки файлов. То есть конструкция рассчитана на использование динамического количества аудио файлов.

Вся конструкция для бабушки Юлии выглядит так:

Для бабушки Лидии диалплан примет вид:

В данной конструкции отлавливаем нажатие кнопки 2, что соответствует коду для бабушки Лидии и соответственно поменяли пути к папке с файлами.

Целиком диалплан для всех бабушек и дедушек будет выглядеть так:

Протестируем полученный диалплан

В данной схеме есть недостаток. Он заключается в том, чтобы прослушать другой звуковой файл нужно выполнить сброс соединения, т.е. положить трубку. Чтобы избавится от этого недостатка, пересоберем схему используя IVR.

Создадим отдельный контекст, например ivrforbaby. В этот контекст перенесем екстены созданные для каждого члена семьи. Так же добавим конструкцию для обработки ошибочного набора, которая будет, переводит на ожидание нового нажатия:

В данной конструкции воспользуемся функцией GoTo, которая позволяет переходить на определенный контекст, exten с приоритетом. В нашем случае будем переводит на наш созданный контекст на exten с функцией ожидания нажатий цифры.

Exten с функцией ожидания выглядит так:

Для ожидания нажатия используем функцию WaitExten(60), которая ожидает нажатие в течение 60 секунд.

Далее добавим конструкцию для обработки timeout, т.е. когда закончится время ожидания нажатия кнопки:

В нашем случаю по истечению времени будем, переводить заново на ожидание нажатия клавиши.

Теперь нужно подключить созданный контекст с IVR к телефону ребенка. Для этого в контекст телефона добавим следующую конструкцию:

Данный exten ловит нажатие любой кнопки и перенаправляет на IVR. Так же используем функцию GoTo в параметрах которого добавим созданный контекст ivrforbaby, в качестве параметра exten в контекст будет передаваться цифра которую нажал ребенок с приоритетом 1. В свою очередь IVR отработает согласно нажатой цифре.

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

Протестируем полученный диалплан:

 
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