Это пример приложения на Ruby on Rails вдохновлён набором инструментов Rapid Response Kit, созданным Twilio и используемым по всему миру организациями, которым необходимо быстро действовать в чрезвычайных ситуациях.
Сотрудники служб помощи могут использовать инструменты этого приложения для немедленного общения с большой группой волонтёров. В ситуациях, когда всем участникам нужно говорить одновременно, организатор может быстро создать конференц-линию. В других случаях она может транслировать голосовое сообщение на список телефонных номеров волонтёров.
Чтобы запустить этот пример приложения самостоятельно, скачайте код и следуйте инструкциям на GitHub. Возможно, вам также будет полезно ознакомиться с представлениями этого приложения, так как в этом руководстве мы рассмотрим только компоненты Twilio.
Прежде чем мы сможем позвонить на нашу конференц-линию, нам нужно настроить один из наших номеров Twilio для отправки HTTP-запроса нашему веб-приложению при входящем звонке.
Выберите один из ваших номеров и настройте Voice URL так, чтобы он указывал на наше приложение. В нашем коде маршрут будет `/Conference/Join`.
Наш номер Twilio теперь настроен на отправку HTTP-запросов этому методу контроллера при любых входящих голосовых звонках. Наше приложение отвечает TwiML-инструкциями, чтобы сообщить Twilio, как обработать звонок.
Мы используем библиотеку Twilio Ruby для генерации TwiML, который указывает Twilio выполнить `Dial` в `Conference`, которую мы называем `RapidResponseRoom`. Это означает, что любой, кто позвонит на ваш номер Twilio, автоматически присоединится к этой конференции.
Далее мы превратим это в модерируемую конференц-линию с модератором и слушателями.
В этом сценарии мы спрашиваем у звонящего его роль, прежде чем подключать его к конференции. Эти роли следующие:
**Модератор**: может начинать и заканчивать конференцию
**Докладчик**: может говорить на конференц-звонке
**Слушатель**: отключён от микрофона и может только слушать звонок
В этом контроллере мы `Say` простое сообщение, а затем просим звонящего выбрать роль.
После того как звонящие прослушали несколько вариантов ролей, они могут выбрать одну. Для этого мы указываем Twilio `Gather` нажатие кнопки на телефоне звонящего, чтобы узнать, какую роль он хочет использовать. Давайте посмотрим, как это сделать дальше.
Глагол `
Когда звонящий завершает ввод цифр, Twilio отправляет GET или POST запрос на этот URL, включая параметр `Digits` с номером, выбранным звонящим.
Мы используем этот параметр для установки нескольких переменных, `isMuted` и `canControlConferenceOnEnter`, которые затем используем для настройки наших элементов TwiML `Dial` и `Conference`.
На этом всё по подключению звонящих к нашей конференц-комнате. Далее рассмотрим другую функцию этого приложения: трансляцию голосового сообщения на список телефонных номеров.
Помимо проведения конференц-звонков, организатор может использовать наше приложение для трансляции голосового сообщения на список телефонных номеров. Она может сделать это, выбрав запись из выпадающего списка, введя список телефонных номеров и нажав «Отправить».
Для реализации этой функции мы будем использовать REST API Twilio, чтобы получить все записи, связанные с нашим аккаунтом. Если организатору нужно записать новое сообщение, мы позвоним ей и запишем её ответ.
Теперь, когда мы знаем, что представляет собой эта функция, давайте углубимся в код.
Этот маршрут получает все `recordings`, связанные с нашим аккаунтом Twilio. Мы могли бы фильтровать эти результаты по дате или идентификатору звонка с помощью API Twilio, но в этом примере мы просто получаем все записи.
Чтобы использовать удобный API Twilio, нам сначала нужно создать клиент Twilio, что мы можем легко сделать, передав наши учётные данные. Поскольку мы будем использовать `@client` несколько раз, мы установим его в общем фильтре, который вызывается перед каждым действием, которому он нужен.
После того как мы получили все записи, нам нужно сформировать JSON-ответ с нашим объектом записей. Этот маршрут будет вызываться нашим JavaScript при загрузке страницы.
Мы можем получить все сохранённые записи, но как записать новое сообщение? Давайте посмотрим это далее.
Если организатору нужно сделать новую запись, мы просто позвоним ей и запишем звонок. Twilio делает это просто с помощью глагола `Record`.
Здесь мы `Say` что-то звонящему, а затем `Record` его сообщение. У `Record` есть много дополнительных опций, но здесь мы просто указываем ему прекратить запись при нажатии ***.
Мы только что увидели, как перечислить все записанные сообщения и как записать новое. Осталось последнее: позволить звонящему транслировать одно из этих записанных сообщений. Давайте посмотрим это далее.
Этот контроллер обрабатывает веб-форму голосовой трансляции, начиная с телефонных номеров, предоставленных организатором. Поскольку они разделены запятыми, мы можем использовать класс CSV Ruby для их разбора.
Далее мы инициируем звонок на каждый номер с помощью REST API Twilio.
Когда Twilio подключает этот звонок, он отправит запрос на параметр `Url` для получения дальнейших инструкций. Мы включаем параметр `recordingUrl` в этот URL, чтобы наш метод действия `Play` знал, какую запись использовать.
Это упрощает работу для нашего маршрута `Broadcast/Play` — мы просто `Play` запись.
Вот и всё! Мы только что реализовали две основные функции набора инструментов Rapid Response Kit! Возможно, в будущем вы сможете добавить другие функции и создать полноценный набор!
Если вы разработчик на Ruby, работающий с Twilio, вам могут понравиться эти другие руководства:
**Автоматизированный опрос**
Мгновенно собирайте структурированные данные от ваших пользователей с помощью опроса, проводимого по голосовому звонку или SMS. Узнайте, как создать свой собственный опрос в Rails.
Создайте полностью функциональное автоматическое телефонное дерево с несколькими вкусностями Reese’s Pieces.
#### Помогло ли это?
Спасибо за ознакомление с этим руководством! Если у вас есть отзывы, которыми вы хотите поделиться, напишите нам в Твиттере @twilio.