Голосовые звонки с преобразованием текста в речь на PHP

Источник: Vonage API Developer•

Голосовые звонки с преобразованием текста в речь на PHP

Создайте приложение на PHP, которое обрабатывает входящие и исходящие голосовые вызовы с преобразованием текста в речь с помощью Vonage Voice API, Slim Framework и динамических NCCO.

Введение

Создание приложений с поддержкой голосовой связи раньше требовало работы с аппаратными шлюзами и низкоуровневыми протоколами телефонии. Сегодня Vonage Voice API берет всю эту сложность на себя всего в нескольких строках кода.

В этом учебном пособии вы создадите небольшое приложение на PHP, которое обрабатывает как входящие, так и исходящие телефонные звонки с помощью Vonage Voice API. Вы начнете с возврата сообщения преобразования текста в речь (TTS) любому, кто позвонит на ваш номер Vonage, а затем расширите приложение для программного запуска исходящих вызовов. Наконец, вы сделаете озвученное сообщение динамическим, получая случайную шутку из публичного API.

Tl;dr: Посмотрите пример кода в репозитории Vonage Community на GitHub.

Предварительные требования

Прежде чем начать, убедитесь, что у вас есть следующее:

  • Установлен PHP версии 8.3 или выше. Выполните php -v, чтобы проверить версию.

Установлен PHP версии 8.3 или выше. Выполните php -v, чтобы проверить версию.

  • Composer для управления зависимостями

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

  • Node.js и npm для установки Vonage CLI

Node.js и npm для установки Vonage CLI

  • ngrok (или аналогичный инструмент создания туннелей) для предоставления доступа к вашему локальному серверу из интернета

(или аналогичный инструмент создания туннелей) для предоставления доступа к вашему локальному серверу из интернета

Настройка Vonage CLI

Vonage CLI позволяет управлять вашей учетной записью, создавать приложения и покупать номера прямо из терминала. Установите его глобально с помощью npm:

После установки аутентифицируйте CLI с помощью вашего ключа API и секретного ключа, которые вы найдете в панели управления Vonage API:

Создание приложения Vonage

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

Теперь вы создали приложение Vonage. Запишите возвращенный идентификатор приложения (Application ID); он скоро вам понадобится. CLI также сохраняет файл private.key в вашем текущем каталоге; храните его в безопасности, так как мы будем использовать его вместе с идентификатором приложения для аутентификации в Voice API на последующих этапах.

Затем вам нужно приобрести виртуальный номер с поддержкой голосовой связи для привязки к вашему приложению. Найдите доступный номер в вашей стране (при необходимости замените US на ваш двухбуквенный код страны). Номера должны быть в формате E.164: укажите код страны и опустите любые ведущие нули (например, британский номер 07700900001 становится 447700900001):

Выберите номер из полученного списка, а затем купите его, выполнив:

Наконец, привяжите номер к вашему приложению:

Вы можете проверить, правильно ли номер привязан к вашему приложению, выполнив:

Настройка рабочего пространства

В каталоге вашего проекта выполните composer init для начала. Примите все значения по умолчанию и пропустите интерактивное определение зависимостей; мы сделаем это на следующем шаге.

В этом учебном пособии используется Slim Framework для обработки входящих вебхуков от Vonage. Затем установите Slim вместе с его реализацией PSR-7 и библиотекой phpdotenv для управления переменными окружения:

Убедитесь, что файл private.key, полученный при создании приложения, находится в этом каталоге на том же уровне, что и composer.json.

Создайте файл .env в корне проекта для хранения ваших учетных данных:

Добавьте .env и private.key в файл .gitignore, чтобы учетные данные никогда не попадали в систему контроля версий:

Теперь запустите локальный сервер разработки PHP:

Ваше приложение теперь прослушивает порт 8000.

Затем вам нужно предоставить вашему приложению доступ к интернету, чтобы Vonage мог обращаться к вашим вебхукам. Давайте используем для этого ngrok:

Запишите ваш новый URL-адрес ngrok; он понадобится вам для обновления приложения Vonage на следующем шаге.

Перейдите в панель управления Vonage и найдите свое приложение «vonage-calls» на вкладке Applications. Нажмите кнопку Edit, включите переключатель Voice в разделе Capabilities, а затем заполните URL-адреса вебхуков, как показано ниже:

Сохраните изменения, и все готово!

Создание вашего NCCO

Голосовые вызовы Vonage управляются с помощью объектов управления вызовами JSON, называемых NCCO. NCCO — это массив действий в формате JSON, который указывает Vonage, что делать при начале вызова. Некоторые из доступных действий включают:

  • connect — подключить вызов к другому номеру

connect — подключить вызов к другому номеру

  • record — записать вызов

record — записать вызов

  • conversation — создать конференц-связь

conversation — создать конференц-связь

  • talk — сгенерировать сообщение с преобразованием текста в речь

talk — сгенерировать сообщение с преобразованием текста в речь

Полный список смотрите в справочнике по NCCO.

Вот NCCO, с которого вы начнете; простое сообщение с преобразованием текста в речь:

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

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

Создание вебхука ответов

Создайте файл public/index.php. Приведенный ниже код инициализирует приложение Slim, загружает ваши переменные окружения, регистрирует обработчик вебхука ответов и возвращает NCCO в виде ответа JSON всякий раз, когда Vonage делает GET-запрос к /webhooks/answer.

Он также регистрирует вебхук событий по адресу /webhooks/event, на который Vonage отправляет обновления о статусе вызова (например, вызов идет, отвечено и завершен) в течение всего жизненного цикла вызова. На данный момент обработчик просто подтверждает получение ответом 204 No Content; в продакшн-приложении вы бы логировали эти события или реагировали на них.

Когда Vonage делает GET-запрос к вашему URL-адресу ответа, обработчик возвращает NCCO в формате JSON. До тех пор, пока ответ представляет собой валидный JSON в правильном формате, Vonage знает, как обработать вызов.

Пришло время протестировать его! Сохраните файл, а затем позвоните на купленный вами виртуальный номер, чтобы услышать сообщение с преобразованием текста в речь.

Совершение исходящего вызова

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

Для совершения исходящего вызова нам понадобится SDK Vonage для PHP:

Теперь добавьте следующие инструкции use в верхнюю часть public/index.php после существующих:

Затем добавьте маршрут перед $app->run():

Чтобы инициировать исходящий вызов, перейдите по следующему URL-адресу в вашем браузере, заменив DESTINATION_NUMBER на номер, на который вы хотите позвонить, в формате E.164 (например, 14155550100 для американского номера):

Добавление динамических NCCO

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

Для выполнения HTTP-запросов установите Guzzle:

Добавьте инструкцию use для Guzzle в начале файла index.php:

Теперь обновите обработчик /webhooks/answer для получения шутки и использования ее в качестве произносимого текста:

— это активно поддерживаемый бесплатный API. Параметр type=twopart возвращает шутки с полями завязки и кульминации, а параметр safe-mode отфильтровывает контент для взрослых. Обработчик объединяет их в одну строку, чтобы действие talk могло зачитать ее вслух.

Теперь в любое время, когда Vonage запрашивает ваш URL-адрес ответа (Answer URL), будь то для входящего или инициированного вами исходящего вызова, система будет получать новую шутку о программировании и зачитывать ее. Проверьте это, позвонив на свой номер Vonage или обратившись к эндпоинту /makeCall.

Что дальше?

Вы создали систему голосовых вызовов с преобразованием текста в речь, которая обрабатывает как входящие, так и исходящие вызовы и предоставляет динамический контент.

Отсюда вы можете:

  • Создать систему голосовых оповещений: циклически перебирать список контактов, совершать массовые обзвоны и просить получателей нажать клавишу для подтверждения получения

Создать систему голосовых оповещений: циклически перебирать список контактов, совершать массовые обзвоны и просить получателей нажать клавишу для подтверждения получения

  • Настроить сообщение в зависимости от того, кто звонит, времени суток или данных из вашей собственной базы данных

Настроить сообщение в зависимости от того, кто звонит, времени суток или данных из вашей собственной базы данных

  • Добавить запись звонка с помощью действия записи NCCO и руководства по записи Voice API

Добавить запись звонка с помощью действия записи NCCO и руководства по записи Voice API

  • Изучить полный справочник NCCO, чтобы добавлять IVR-меню, конференц-связь и многое другое

Изучить полный справочник NCCO, чтобы добавлять IVR-меню, конференц-связь и многое другое

О чём эта статья

Ещё в разделе «Телеком и сети»

Все →

Ещё от Vonage API Platform