Звонок Rails 5: Начало работы с Twilio на Rails

Автор: | 03.08.2026

Мне жаль, что я пропустил RailsConf 2016 в Канзас-Сити, но это заставило меня снова задуматься о Rails. Только что вышла первая версия Rails 5, и релиз-кандидат не за горами, так что самое время посмотреть, как он взаимодействует с Twilio.

Давайте создадим простое приложение с Twilio на Rails 5. Вам понадобится установленный Ruby, аккаунт Twilio и номер Twilio. Если у вас его ещё нет, вы можете зарегистрироваться и получить бесплатный аккаунт Twilio прямо сейчас. Если вы хотите протестировать это локально, вам также понадобится ngrok. Я большой поклонник ngrok, и уверен, что он понравится и вам.

Начнём с установки Rails 5. Откройте терминал и установите последнюю версию.

Создадим новое приложение на Rails.

Уже на этом этапе мы можем оценить новую функцию Rails 5, запустив тесты с помощью новой универсальной команды `rails`.

Конечно, у нас пока нет тестов, и если вы использовали Rails 4, это выглядит так же, как старая команда `rake test`. Но разница в том, что в Rails 5 все команды будут доступны через команду `rails`, а не часть через `rails`, а часть через `rake`. Мы ещё не видим этого, но тестовый раннер также получил несколько очень хороших улучшений.

На этом этапе мы можем запустить наш сервер Rails. Просто введите:

Ура! Посмотрите на новое оформление и иллюстрацию страницы успешной установки.

Некоторые вещи не изменились в этой последней версии Rails. Чтобы добавить гем `twilio-ruby`, остановите сервер, откройте `Gemfile`, добавьте строку:

и установите гем с помощью Bundler.

Откройте `app/controllers/twilio_controller.rb` и создадим голосовой эндпоинт для нашего номера Twilio. Идея заключается в том, что когда на наш номер Twilio поступает звонок, Twilio отправляет HTTP-запрос нашему приложению, чтобы узнать, что с ним делать. Этот экшн ответит на запрос инструкциями в формате TwiML — набором XML-тегов и атрибутов, которые понимает Twilio.

Сначала нам нужно отключить проверку подлинности токена Rails. Это сделано для предотвращения CSRF-атак, но это не применимо, когда мы ожидаем вебхук от внешнего сервиса. У нас также есть собственный способ проверки того, что запрос пришёл от Twilio, с помощью Rack middleware.

Теперь мы можем написать экшн для ответа на входящий звонок. Мы создадим TwiML, чтобы озвучить ответ по телефону, отправить нам поздравительное SMS-сообщение и завершить звонок любимой мелодией.

Мы используем TwiML-билдер из библиотеки Twilio Ruby (который на самом деле основан на геме builder) для генерации нашего XML, который затем рендерится с правильным типом контента с помощью метода `render` Rails.

Чтобы обрабатывать запросы от Twilio, нам также понадобится маршрут. Откройте `config/routes.rb` и добавьте:

Теперь POST-запрос к нашему приложению по пути `/twilio/voice` будет перенаправлен на только что написанный экшн. Запустите сервер, и Twilio начнёт отправлять эти запросы.

Нам нужно сделать наше локальное приложение доступным из интернета, чтобы Twilio мог до него достучаться. Мне нравится использовать для этого ngrok, так что просто откройте новое окно терминала и введите:

Когда ngrok запустится, он будет выглядеть примерно так. Запомните URL, который вы видите, он нам скоро понадобится.

Нам нужен этот URL вместе с маршрутом, который мы создали ранее, чтобы сообщить Twilio, какой URL вызывать, когда мы звоним на наш номер. Зайдите в консоль Twilio, найдите или купите номер, который хотите использовать для этого (убедитесь, что он может принимать звонки), и отредактируйте номер.

Найдите раздел Voice, убедитесь, что у вас выбрана опция Webhooks/TwiML для настройки. Затем для случая входящего звонка введите полный URL к вашему голосовому экшну.

Сохраните настройки, возьмите телефон и наберите свой номер. Вскоре вы услышите праздничные звуки успешного звонка через Twilio.

Теперь, когда мы создали наше первое приложение на Rails 5 и Twilio, можно сделать гораздо больше. Вы можете почитать обо всех других изменениях между Rails 4 и 5, особенно о новом, работающем в реальном времени ActionCable. Это кажется полезным кандидатом для создания отзывчивого пользовательского интерфейса для двухфакторной аутентификации с помощью Authy OneTouch.

Если вы хотите обсудить Ruby, Rails и коммуникации, то SIGNAL — это то место, где нужно быть. Там будет более ста сессий на темы от коммуникаций в реальном времени до безопасности и даже ботов. Кроме того, на конференции выступят два члена команды Rails Committers. Эйлин Учителль расскажет о распространённых уязвимостях программного обеспечения, а Шон Гриффин погрузится в скрытую семантику кода, который мы пишем. Я тоже буду там, и хотя мне пока не удалось внести коммит в Rails, у меня есть промокод, который даст вам 20% скидку на участие вместе с Эйлин и Шоном всего через две недели. Зарегистрируйтесь сейчас и используйте код PNASH20 при оформлении заказа.

Надеюсь увидеть вас на SIGNAL. Если вам понадобится связаться со мной до этого, просто оставьте комментарий ниже, напишите мне в Twitter или отправьте письмо по электронной почте.