События прогресса звонков — это действительно полезный инструмент, если вам нужно отслеживать состояние телефонных звонков, совершаемых приложением с использованием 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