Мониторинг звонков с помощью Node.js, Express и событий прогресса звонков Twilio

Автор: | 02.08.2026

События прогресса звонков — это действительно полезный инструмент, если вам нужно отслеживать состояние телефонных звонков, совершаемых приложением с использованием Twilio Voice API. Предположим, вы создаете панель управления для обработки огромного потока звонков, которые ваше приложение для радио по телефону в стиле хеви-метал совершает слушателям. Указав URL обратного вызова статуса в вашем веб-приложении, вы можете отслеживать состояние голосового звонка от момента его инициации до завершения, получая запросы в реальном времени при каждом изменении статуса звонка.

В этой статье мы рассмотрим основы настройки веб-приложения на Node.js с использованием фреймворка Express для получения HTTP-запросов от Twilio при каждом изменении статуса телефонного звонка.

**Начало работы**

Для корректной работы вам понадобится установить Node.js и npm. На момент написания этой статьи у меня установлены новейшие версии Node v4.0 и npm v2.14.2. Node 4.0 позволяет использовать некоторые новые функции ES6 напрямую без необходимости транслировать код с помощью Babel. Также вам нужно создать учетную запись Twilio и приобрести телефонный номер с возможностями голосовой связи.

Теперь давайте инициализируем приложение. Перейдите в каталог, где вы хотите начать этот проект, и выполните команду:

Это создаст файл `package.json`, который будет содержать всю информацию о нашем проекте. Вы можете пропустить все подсказки, если не хотите настраивать эту информацию. После этого мы можем приступить к установке зависимостей, необходимых для нашего приложения на Node.

Установим модуль Twilio (3.x) для Node:

Когда мы совершаем звонки, нам нужно указать URL, на который Twilio будет отправлять HTTP-запросы при возникновении событий прогресса. Мы создадим серверное приложение с использованием веб-фреймворка Express для Node:

Чтобы обрабатывать запросы, которые мы получаем от Twilio, нам нужно установить промежуточное ПО BodyParser для Express:

**Получение событий прогресса звонков с помощью Express**

Теперь мы готовы приступить к написанию кода. Чтобы получать обновления от Twilio о статусе наших телефонных звонков, нам нужно настроить сервер Express для обработки этих запросов.

Когда статус одного из наших звонков обновляется, мы получаем запрос, похожий на этот, с такими POST-параметрами:

Давайте начнем с базового приложения Express для обработки этого запроса и вывода результатов в консоль. Откройте ваш любимый текстовый редактор, создайте файл `index.js` и попробуйте следующий код:

Прежде чем мы сможем протестировать возможность логирования статуса звонка, нам сначала нужно совершить звонок. Давайте добавим еще один маршрут в наш сервер, который будет генерировать TwiML, чтобы указать нашему звонку, как действовать дальше. Пусть он просто произнесет «События прогресса звонков — это круто» роботизированным голосом. Откройте файл `index.js` снова и добавьте еще один маршрут, на этот раз используя библиотеку Twilio для Node:

Мы почти готовы увидеть события прогресса звонков в действии, но сначала нужно задать URL обратного вызова статуса в настройках вашего номера Twilio. Перейдите в панель управления вашей учетной записью и найдите настройки для телефонного номера, который вы хотите использовать.

Используя ваш новый URL ngrok для доступа к серверу Express, убедитесь, что вы указали URL запроса голоса на ваш маршрут «/voice», а URL обратного вызова статуса — на маршрут «/events». Теперь Twilio будет отправлять HTTP-запрос на «/voice» каждый раз, когда вы получаете телефонный звонок, и отправлять запрос на «/events» при завершении голосового звонка.

Теперь запустите ваш сервер:

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

**Совершение исходящих звонков**

Это было здорово, но эта функция существует уже некоторое время. Что действительно круто в новых событиях прогресса звонков, так это то, что теперь мы можем указывать, какие события мы хотим отслеживать при совершении голосового звонка с помощью REST API. Вместо того чтобы знать только о завершении звонка, мы можем узнать, когда он звонит или когда кто-то отвечает на звонок.

Давайте продемонстрируем это, быстро собрав скрипт на Node для совершения исходящих звонков с использованием Twilio REST API, который будет использовать наше приложение Express для мониторинга их статуса. Создайте новый файл `makeCall.js` и попробуйте этот код:

Это весь код, который нам нужен для совершения телефонных звонков, но нам все еще нужно пройти аутентификацию в Twilio. Перейдите в панель управления вашей учетной записью Twilio и возьмите ваш Account SID и Auth Token. Сохраните их в переменных окружения следующим образом:

Нет необходимости добавлять их в код, потому что при инициализации объекта REST-клиента модуль Twilio для Node проверяет, существуют ли эти переменные окружения. Не забудьте заменить значения в этом коде перед его запуском. Замените аргументы `url` теми же, которые вы использовали на панели управления Twilio. Вернитесь в терминал и выполните команду:

Теперь, когда ваш сервер `index.js` снова запущен, попробуйте открыть еще одно окно терминала и выполнить наш код для совершения звонка себе:

Посмотрите, как ваш сервер получает статус звонка по мере его изменения:

**Дальнейшие шаги**

Теперь вы готовы начать отслеживать статус звонков, которые вы совершаете с помощью Twilio REST API. Получив запрос с состоянием звонка, вы можете делать с этой информацией все, что захотите. С некоторыми изменениями код, который мы написали в этой статье, может служить бэкендом для панели управления, отслеживающей голосовые звонки в реальном времени. Вот несколько следующих шагов:

— Создайте панель управления с помощью ReactJS для отображения состояния ваших телефонных звонков.

— Используйте информацию из события прогресса звонка для изменения состояния этого звонка.

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

— Email: sagnew@twilio.com

— Twitter: @Sagnewshreds

— Github: Sagnew

— Twitch (стриминг живого кода): Sagnewshreds