Twilio и Rails – Интеграция Twilio с вашим приложением на Rails 4

Автор: | 30.07.2026

В этом посте я расскажу вам об основах интеграции Twilio с вашим приложением на Rails 4. Мы рассмотрим регистрацию в Twilio, покупку телефонного номера и подключение этого номера к вашему Rails-приложению. Но сначала я хотел бы рассказать вам одну историю.

Задолго до того, как я присоединился к Twilio и стал евангелистом разработчиков, я был владельцем малого бизнеса, которому нужно было создать достаточно сложное веб-приложение, и время поджимало. Это было в 2005 году, и я недавно уволился с работы Java-разработчика, чтобы открыть лигу любительского спорта. Почему я решил заняться этим — тема для отдельного поста, но мне нужно было быстро создать программное обеспечение, которое позволило бы людям регистрироваться в моей новой лиге, присоединяться к команде и совершать онлайн-платежи. Это были лишь начальные требования. Я знал, что могу создать это программное обеспечение с использованием Java-стека (Struts, Hibernate, MySQL), но меня беспокоило, как быстро я смогу все это реализовать. Мне нужно было запустить проект и открыть регистрацию в течение нескольких недель, чтобы начать рекламную кампанию перед предстоящим весенним сезоном.

На помощь пришел Ruby on Rails, который вышел в версии 1.0 13 декабря 2005 года. С помощью Rails я смог быстро создать необходимое программное обеспечение, и регистрация открылась вовремя. После запуска я мог продолжать быстро вносить изменения, легко мигрировать изменения в схеме базы данных и в целом сосредоточиться на своих клиентах, а не на мелочах. Справедливо будет сказать, что Rails стал одной из самых влиятельных технологий для веба за последнее десятилетие и с тех пор остается частью моего инструментария.

А теперь вернемся к нашей основной теме, где мы переносимся в 2014 год и интегрируем Twilio с веб-приложением на Rails 4. Первое, что нам нужно сделать, — это зарегистрироваться в бесплатной учетной записи Twilio.

После регистрации Twilio отправит вам SMS или позвонит, чтобы подтвердить, что вы реальный человек, а не вредоносный спам-бот.

Вы получите либо SMS, либо телефонный звонок с кодом подтверждения. Введите этот код, и мы сможем перейти к самой интересной части: получению телефонного номера.

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

Теперь вы стали счастливым обладателем программируемого телефонного номера. Здорово! Нажмите «Начать». На следующей странице нажмите на красную кнопку «Перейти в ваш аккаунт».

Когда вы войдете в панель управления, вы можете нажать на вкладку «Номера», чтобы увидеть все телефонные номера, которыми вы владеете.

При нажатии на номер вы попадете на страницу конфигурации номера. Когда кто-то отправляет сообщение или звонит на ваш номер, Twilio нужно знать, **что делать**. Для обработки таких входящих событий Twilio использует конструкцию, известную как вебхук. Вебхук — это просто URL, к которому Twilio обращается, чтобы получить инструкции по обработке входящего сообщения или звонка.

Каждый телефонный номер имеет два настраиваемых вебхука:

— URL запроса голосовых вызовов для входящих звонков

— URL запроса сообщений для входящих SMS или MMS

В этом посте мы создадим простое приложение, которое позволит человеку позвонить на ваш номер Twilio. Поскольку это входящий звонок, нам нужно установить URL запроса голосовых вызовов, чтобы он указывал на маршрут в нашем Rails-приложении. Давайте углубимся в это.

Если у вас уже есть существующее приложение на Rails 4, можете сразу переходить к шагу 4. Для тех, кто только начинает, вот несколько простых шагов по созданию приложения. Сначала вам нужно установить Rails на вашу систему. После этого откройте терминал и перейдите в каталог, где вы храните свои проекты. Создание нового веб-приложения на Rails так же просто, как:

Чтобы упростить интеграцию с Twilio, мы будем использовать гем twilio-ruby. Откройте Gemfile и добавьте следующую строку:

Вы увидите, что этот контроллер имеет действие voice. Назначение действия voice — сообщить Twilio, что делать, когда кто-то звонит на ваш номер Twilio. В данном случае мы используем вспомогательную библиотеку twilio-ruby для создания объекта ответа, а затем рендерим этот объект как TwiML. Здесь происходит много всего, так что давайте разберемся.

#### Отключение проверки CSRF

Rails поставляется с отличной функцией, которая помогает предотвратить CSRF-атаки. Это достигается путем автоматического внедрения случайно сгенерированного токена в веб-формы приложения и последующей проверки наличия и корректности этого токена при отправке формы. Эта функция обычно включается в файле app/controllers/application.rb с помощью строки protect_from_forgery with: :exception. Эта строка указывает всем контроллерам включать проверку CSRF и выбрасывать исключение при ее обнаружении.

Однако, если ваше приложение должно предоставлять конечную точку POST для внешних сторонних сервисов (например, Twilio), вам нужно отключить проверку CSRF для этих конечных точек. К счастью, Rails позволяет легко отключить проверку CSRF для контроллера или даже для конкретных действий в контроллере. В нашем случае мы используем следующую строку в app/controllers/twilio_controller.rb для отключения проверки CSRF: skip_before_action :verify_authenticity_token

#### TwiML

Я уже несколько раз упоминал, что Twilio использует вебхуки для определения «что делать». Инструкции, которые ваше приложение отправляет Twilio, закодированы в TwiML, который представляет собой XML-словарь Twilio.

В приведенном выше коде мы используем вспомогательную библиотеку twilio-ruby для программного создания TwiML. Это очень похоже на то, как можно использовать Builder для генерации XML. Имейте в виду, что использование вспомогательной библиотеки не обязательно, это просто удобный способ генерации TwiML.

#### Concern Webhookable

Rails 4 представил встроенную поддержку Concerns. Concerns — это способ поощрения повторного использования кода в контроллерах и моделях, и вы увидите подкаталог concerns как в каталоге controllers, так и в каталоге models.

Поскольку все вебхуки Twilio требуют схожей функциональности, это стало отличным кандидатом для Concern. Давайте создадим файл webhookable.rb и поместим его в app/controllers/concerns:

Этот Concern предоставляет две простые возможности:

— Установка типа содержимого HTTP-ответа в «text/xml»

— Рендеринг объекта TwiML в необработанный XML

#### Добавление маршрута

Последнее, что нам нужно сделать, — это отредактировать config/routes.rb и связать путь URL с нашим контроллером и действием:

Вы можете протестировать twilio_controller из командной строки с помощью cURL:

Вы должны получить следующий XML:

Теперь нам просто нужно вывести наше Rails-приложение в интернет. Для этого обычно есть два варианта:

— Развернуть ваше Rails-приложение на вашем VPS или PaaS по выбору.

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

Для целей этого поста я выберу второй вариант, используя замечательный инструмент под названием Ngrok. Мой коллега Кевин Уиннери написал отличный пост о том, как начать работу с Ngrok.

После установки Ngrok вы можете запустить его и подключить к вашему серверу Rails следующим образом:

Когда Ngrok запущен, он получит уникальный URL для вашего веб-приложения:

Вы можете проверить, работает ли это, вставив этот URL в браузер. Если вы видите сообщение «Welcome Aboard», самое время поднять кулак в воздух! Ваше приложение доступно в интернете и готово к последнему шагу.

Вернитесь в панель управления Twilio, нажмите на вкладку «Номера» и выберите ваш номер Twilio. Вы увидите экран, похожий на этот. В поле для URL запроса голосовых вызовов введите URL вашего сервера Ngrok плюс путь к действию voice (/twilio/voice).

Теперь настал момент истины: позвоните на ваш номер Twilio. Следите за Ngrok, вы должны увидеть следующее, когда звонок соединится:

Если вы услышите сообщение, за которым последует отличная музыка, все готово! Вы успешно интегрировали Twilio в ваше приложение на Rails 4.

*[Благодарность Майклу Саллису за его ремикс на тему кантины из «Звездных войн», который распространяется под лицензией CC 3.0]*

Если вы переключитесь на терминал, где запущено ваше Rails-приложение, вы также увидите следующее:

Twilio не только отправляет HTTP POST-запрос вашему приложению, но и передает большое количество параметров. Эти параметры содержат всю информацию, которую Twilio знает о номере, совершающем звонок (звонящий), и номере, на который звонят (адресат), включая географическую информацию, такую как город. Ваше приложение может по желанию использовать эту информацию, чтобы более разумно реагировать на такие запросы.

И это все! Теперь вы успешно:

— Зарегистрировались в Twilio

— Приобрели телефонный номер

— Настроили приложение на Rails 4

— Подключили Twilio к вашему Rails-приложению

— Обработали входящий звонок

Весь код, который я показал сегодня, размещен на Github, не стесняйтесь делать форк. В следующем посте я расскажу вам о:

— Защите ваших вебхуков, чтобы к ним мог обращаться только Twilio

— Использовании REST API Twilio для отправки исходящих SMS

А пока — счастливого кодинга!

**ОБНОВЛЕНИЕ:** Ознакомьтесь с частью 2 этой серии постов.