Создайте горячую линию для фэнтези-футбола с помощью Ruby и Twilio Voice

Автор: | 05.08.2026

Когда-то телефон был самым быстрым способом для спортивного болельщика получить новости. В 70-х, 80-х и 90-х годах компания *Sports Phone* служила спасательным кругом для фанатов, предоставляя самые свежие спортивные сводки.

Журнал Grantland недавно опубликовал увлекательную статью о взлете и падении Sports Phone:

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

К 1979 году сервис обрабатывал около 100 000 звонков в день… в удачный день студенческого футбола или воскресенье НФЛ количество звонков могло достигать 300 000.

Sports Phone просуществовал с 1972 по 2000 год, но в итоге был вытеснен кабельным телевидением и, конечно же, интернетом. На самом деле, нам потребовалось менее 30 минут, чтобы создать собственную горячую линию для фэнтези-футбола с помощью RSS-ленты, Twilio Voice и 31 строки кода на Ruby.

Суть в том, что мы звоним по номеру, и робот зачитывает нам заголовки из одной из RSS-лент RotoWorld. Хотите попробовать? **Позвоните по номеру 888.808.4929**.

Вот как выглядит итоговый код:

В оставшейся части статьи мы разберём два шага, необходимых для создания собственной горячей линии «Позвони и получи RSS-ленту»:

— Парсинг RSS-ленты с помощью Ruby

— Приём телефонного звонка с помощью Twilio и Ruby

Нашим первым шагом будет парсинг RSS-ленты новостей игроков от RotoWorld. К счастью, эта функциональность уже встроена в стандартную библиотеку Ruby. Приведённый ниже код взят из документации Ruby по парсингу RSS-лент, хотя мы внесли три небольших изменения:

— Получаем описание элемента

— Оборачиваем описание в TwiML (подробнее об этом позже)

— Собираем весь TwiML в переменную twiml и возвращаем её

Создайте новую директорию sports-phone и перейдите в неё. Сохраните приведённый выше код в файл app.rb и запустите ruby app.rb. Вы увидите множество заголовков, обёрнутых в XML. Именно так мы заставим Twilio говорить.

Отлично! Теперь подключим к этому RSS-ридеру телефонный номер.

Зарегистрируйтесь в Twilio, если у вас ещё нет аккаунта. Купите телефонный номер, затем нажмите «Настроить номер». Найдите поле в разделе *Голос*, где указано «При входящем звонке».

Когда кто-то звонит на наш номер Twilio, Twilio отправляет HTTP-запрос на URL, который мы указываем в этом поле. В ответ Twilio ожидает HTTP-ответ в формате TwiML — простой набор XML-тегов, которые говорят Twilio, что делать дальше.

Мы будем использовать Sinatra — лёгкий веб-фреймворк — для обработки этого POST-запроса. Прежде чем устанавливать этот гем, рекомендуется использовать rbenv или rvm, чтобы изолировать гемы этого проекта от остальных (хотя это не обязательно для работы кода).

Затем установите Sinatra.

И подключите его в начале файла app.rb:

Нам нужен маршрут, который будет отвечать на POST-запрос по адресу /call с TwiML, указывающим Twilio:

приветствие

новости и между каждым заголовком

прощание

Для этого удалите последнюю строку в вашем коде: get_news. Замените её на:

Примечание: для более сложной логики можно использовать Twilio Ruby gem для генерации TwiML, но для простых задач я предпочитаю писать XML вручную.

Вашему приложению понадобится общедоступный URL, чтобы Twilio мог отправлять на него POST-запросы. Самый простой способ сделать это на локальной машине — использовать ngrok. Альтернативно можно развернуть приложение в облаке, но тогда придётся переразвёртывать его при каждом изменении.

Запустите ngrok для приёма HTTP-запросов на стандартном порту Sinatra: 4567.

Скопируйте URL, который выдаст ngrok, и вставьте его в поле «При входящем звонке», добавив конечную точку /call.

Перезапустите приложение, позвоните на свой номер и послушайте, как гладкий робот-голос зачитает вам последние новости фэнтези-футбола.

В статье Grantland рассказывается, как успех Sports Phone породил «множество подобных сервисов Dial-It, как их называли, — время, погода, гороскопы, Dial-a-Joke, горячая линия доктора Джойс Братерс и так далее». Теперь у вас есть приложение на Sinatra, которое может отвечать на звонки и зачитывать RSS-ленту. Дайте волю фантазии.

А поскольку инфраструктура уже готова, довольно просто добавить немного TwiML, чтобы создать более сложные голосовые приложения. Например, можно использовать глагол , чтобы превратить это в IVR («телефонное дерево» на простом языке), позволяющее звонящему «Нажать 1, чтобы…» выбрать новости, которые он хочет услышать. Или можно воссоздать методологию оригинальной Sports Line, используя TwiML для записи короткого сообщения, а затем воспроизводить эту запись для последующих звонящих.

Если вы хотите узнать больше о том, что можно создать с помощью Twilio Voice и Ruby, ознакомьтесь с:

— Кратким руководством по Twilio Voice для Ruby

— Учебными материалами Twilio для готовых к производству голосовых приложений, которые можно клонировать и развернуть

— Вспомогательной библиотекой Twilio для Ruby

Буду рад услышать от вас, если у вас есть вопросы или вы хотите показать, что создали. Напишите мне на gb@twilio.com.