CallCongress упрощает звонки сенаторам и представителям

Автор: | 16.07.2026

Хотите, чтобы ваш голос был услышан? Тогда вам следует позвонить своим избранным должностным лицам и убедиться, что они знают, какие вопросы важны для вас. Контактную информацию государственных органов можно найти на сайте USA.gov, но есть лучший способ связи. Используйте CallCongress.

Звонящим предлагается выбрать из списка имена своих сенаторов и представителей. Одним нажатием клавиши абонент напрямую соединяется с офисом выбранного должностного лица. Попробуйте прямо сейчас.

— Ruby – Мой любимый язык программирования. Он с динамической типизацией и максимизирует удовольствие программиста.

— Sinatra – Очень простой фреймворк для создания веб-приложений на Ruby.

— Builder – Библиотека Ruby для создания XML-документов.

— Sunlight Congress API – Простой доступ к данным о выборных должностных лицах, включая номера телефонов.

— Heroku – Простой хостинг для Ruby-приложений (бесплатно для небольших приложений).

— Twilio – API для создания голосовых приложений и приложений для отправки SMS.

Я собрал CallCongress всего за несколько часов с минимальным объёмом кода. Основная логика приложения занимает всего 35 строк.

Я добавил несколько вещей, получил API-ключ из переменных окружения, а затем объявил маршруты для метода POST по четырём шаблонам («/», «/people», «/nozip» и «/dial»). Далее мы рассмотрим каждый из маршрутов.

Я приобрёл номер и установил Voice URL на «http://callcongress.heroku.com» в панели управления моим аккаунтом Twilio. Каждый раз, когда кто-то звонит на этот номер, Twilio отправляет HTTP POST-запрос на Voice URL. Подробнее о запросах Twilio можно прочитать в нашей документации. Когда приложение получает HTTP POST-запрос от Twilio, находится совпадение, и определённый нами блок кода выполняется.

Вызывается шаблон «welcome», который генерирует TwiML для ответа Twilio. Я использую команду для общения с абонентом с помощью синтеза речи, прежде чем перенаправить его на «/people», что инициирует новый запрос Twilio к приложению, пока абонент находится на линии.

Когда приложение получает запрос на «/people», выполняется следующий блок. Запрос от Twilio содержит необязательный параметр FromZip для большинства звонков, совершаемых с телефонов в Соединённых Штатах. FromZip основан на самом номере телефона и является хорошим индикатором места регистрации абонента для голосования. Передача FromZip в метод «Sunlight::Legislator.all_in_zipcode» возвращает массив соответствующих законодателей. Ruby-гем Sunlight Congress API делает это очень простым. На этом этапе «@members_of_congress» содержит все имена и номера телефонов соответствующих законодателей, и вызывается шаблон «people». Если FromZip недоступен, запрос перенаправляется на «/nozip».

«@members_in_congress» становится доступным в шаблоне «people». Там используется простая команда для предложения абоненту выбрать, кому он хочет позвонить, а затем — для сбора ввода с клавиатуры. Внутри мы создаём один для каждого представителя, чтобы озвучить имя и указать, какую клавишу нажать для выбора, ожидая ввода. Как только абонент нажимает клавишу, Twilio отправляет запрос на «/dial» — указанный URL действия.

Запрос к «/dial» включает параметр Digits, который указывает, какая клавиша была нажата. Здесь мы используем нажатие клавиши, чтобы установить @member на должностное лицо, выбранное абонентом, прежде чем вызвать шаблон «dial».

Шаблон «dial» содержит сообщение о соединении в команде, чтобы озвучить имя выбранного должностного лица абоненту перед осуществлением соединения. Для соединения мы используем команду с номером телефона. На этом этапе абонент напрямую соединяется с офисом выбранного законодателя для обсуждения важных вопросов.

В случае отсутствия FromZip абонент перенаправляется на коммутатор Конгресса в Вашингтоне, округ Колумбия. Номер жёстко закодирован в шаблоне «nozip».

Я выпустил весь код CallCongress под лицензией MIT, вы можете найти его на GitHub. Вы можете запустить его самостоятельно и подключить к своим номерам Twilio.

Большое спасибо замечательным людям из Sunlight Foundation за создание такого полезного API. У них много полезных проектов. Sunlight Foundation — некоммерческая организация, поэтому вы можете рассмотреть возможность сделать пожертвование, чтобы помочь сделать правительство прозрачным и подотчётным.

Sunlight Labs Congress API предоставляет методы для получения базовой информации о членах Конгресса, идентификаторах законодателей, используемых различными веб-сайтами, и сопоставления мест с представляющими их политиками. Основная цель API — облегчить создание мэшапов с участием политиков и других доступных API.

Любой может использовать Sunlight Labs Congress API, для этого требуется лишь 15-секундная регистрация, чтобы мы могли отслеживать, сколько людей используют API, и иметь возможность связаться с вами в случае каких-либо изменений или новостей, связанных с API.