Вступление
В предыдущем уроке мы показали вам, как Принимать телефонный звонок с помощью Java и отвечать с помощью преобразования текста в речь. Мы также можем разрешить пользователям оставлять сообщение, а затем извлекать это записанное сообщение.
Предпосылки
Для работы с этим руководством вам понадобится учетная запись Nexmo . Зарегистрируйтесь сейчас, если у вас еще нет учетной записи.
Вы будете использовать Gradle для управления вашими зависимостями и запуска вашего приложения. Кроме того, вам нужно будет убедиться, что у вас установлена копия JDK. В этом руководстве я буду использовать JDK 8.
Наконец, вам понадобится установленный Nexmo CLI . Вы будете использовать его, чтобы приобрести номер телефона и настроить свою учетную запись Nexmo так, чтобы она указывала на ваше новое приложение.
Запись телефонного сообщения с помощью Java
В этом руководстве вы пройдете через следующие шаги:
- Использование Gradle для настройки нового Java-проекта.
- Использование фреймворка Spark для управления вызовом.
- Покупка номера и настройка вашей учетной записи Nexmo для использования этого номера в вашем приложении.
Использование Gradle для настройки нового Java-проекта
Вы будете использовать Gradle для управления вашими зависимостями, а также для создания и запуска вашего Java-приложения.
Команда gradle init-application
создаст все папки, которые вам понадобятся, а также пример класса, в котором вы будете писать свой код.
Из командной строки создайте новый Java-проект с помощью следующих команд:
mkdir record-a-message cd record-a-message gradle init --type=java-application
Использование платформы Spark для управления вызовом
Вы будете использовать платформу Spark для получения HTTP-вызова, выполняемого Nexmo, когда на ваш номер поступает вызов, и для получения запроса, который Nexmo отправляет после записи сообщения.
Добавление зависимостей
Добавьте следующее в блок dependencies
в вашем файле build.gradle
:
// Spark Framework compile 'com.sparkjava:spark-core:2.7.2' // Nexmo Java Client compile 'com.nexmo:client:4.0.1'
Ваш блок dependencies
должен выглядеть следующим образом:
dependencies { compile 'com.sparkjava:spark-core:2.7.2' compile 'com.nexmo:client:4.0.1' // Use JUnit test framework testCompile 'junit:junit:4.12' }
Gradle создаст класс App
в папке src/main/java
. Внутри этого класса находится получите приветствие
и метод main
. Вам не понадобится getGreeting
метод, так что не стесняйтесь удалять его.
Определите маршрут ответа
Сначала вы определите маршрут, который будет использоваться для ответа на вызов. При поступлении вызова Nexmo отправит запрос на заранее определенный URL-адрес webhook. Он ожидает получения Объекта управления вызовом Nexmo (CCO) , содержащего список действий для выполнения.
Когда на телефонный звонок будет дан ответ, ваше приложение проинструктирует Nexmo выполнить три действия:
- Действие
talk
для приветствия вызывающего абонента и указания ему, как оставить сообщение. - Действие
record
, которое даст команду Voice API начать запись. - A
talk
действие, чтобы поблагодарить их за оставленное сообщение.
Это результирующий NCCO, который будет создан вашим приложением:
[ { "text": "Please leave a message after the tone, then press #. We will get back to you as soon as we can.", "action": "talk" }, { "endOnSilence": 3, "endOnKey": "#", "beepStart": true, "eventUrl": [ "http://your-web-address/webhooks/recordings" ], "action": "record" }, { "text": "Thank you for your message. Goodbye", "action": "talk" } ]
Добавьте следующее в метод main
класса App
, убедившись, что разрешены все импортируемые:
/* * Route to answer and connect incoming calls with recording. */ Route answerRoute = (req, res) -> { String recordingUrl = String.format("%s://%s/webhooks/recordings", req.scheme(), req.host()); TalkAction intro = new TalkAction.Builder("Please leave a message after the tone, then press #. We will get back to you as soon as we can.") .build(); RecordAction record = new RecordAction.Builder() .eventUrl(recordingUrl) .endOnSilence(3) .endOnKey('#') .beepStart(true) .build(); TalkAction outro = new TalkAction.Builder("Thank you for your message. Goodbye").build(); res.type("application/json"); return new Ncco(intro, record, outro).toJson(); };
Действие record
имеет несколько различных свойств. Например, вы можете определить URL-адрес события, на который будет отправлен запрос по завершении записи, завершить запись нажатием определенной клавиши и воспроизвести звуковой сигнал в начале записи.
Определите маршрут записи
Действие record
имеет свойство, называемое URL события
, которое используется для связи по завершении записи. Ниже приведен пример возвращаемых параметров, отправленных на URL-адрес события:
{ "start_time": "2020-01-01T12:00:00Z", "recording_url": "https://api.nexmo.com/media/download?id=aaaaaaaa-bbbb-cccc-dddd-0123456789ab", "size": 12345, "recording_uuid": "aaaaaaaa-bbbb-cccc-dddd-0123456789ab", "end_time": "2020-01-01T12:01:00Z", "conversation_uuid": "bbbbbbbb-cccc-dddd-eeee-0123456789ab", "timestamp": "2020-01-01T14:00:00.000Z" }
Java-клиент Nexmo/| имеет класс с именем Record Event , который можно использовать для десериализации JSON, отправленного в
eventUrl . На данный момент вы собираетесь вывести
recording_url на консоль.
Добавьте следующее в метод main
класса App
, разрешив любой импорт:
/* * Route which prints out the recording URL it is given to stdout. */ Route recordingRoute = (req, res) -> { RecordEvent recordEvent = RecordEvent.fromJson(req.body()); System.out.println(recordEvent.getUrl()); res.status(204); return ""; };
Регистрируйте маршруты
До этого момента вы определили два маршрута:
- Первый маршрут ответит Nexmo с помощью NCCO, когда Nexmo ответит на входящий вызов.
- Второй маршрут зарегистрирует URL-адрес записи, когда Nexmo завершит запись сообщения.
Для того чтобы использовать эти маршруты, нам необходимо настроить Spark. Ваше приложение будет прослушивать порт 3000
, и маршруты будут настроены на /webhooks/answer
и /веб -крючки/записи
.
Добавьте следующее в main
метод класса App
:
Spark.port(3000); Spark.get("/webhooks/answer", answerRoute); Spark.post("/webhooks/recordings", recordingRoute);
Покупка номера
Вам понадобится номер Nexmo, чтобы принимать телефонные звонки. Если у вас нет номера, вы можете использовать КЛИЕНТ Nexmo для его покупки:
nexmo number:buy --country_code US
Обратите внимание на номер, который присваивается вам при покупке. Этот номер вам понадобится для привязки вашего приложения и для тестирования.
Раскрытие Вашего Приложения
Чтобы отправить HTTP-запрос вашему приложению, Nexmo необходимо знать URL-адрес, по которому запущено ваше приложение.
Вместо настройки локальной сети или размещения приложения во внешней службе вы можете использовать ngrok для безопасного доступа вашего приложения к Интернету.
Загрузите ngrok и выполните следующую команду:
ngrok http 3000
Обратите внимание на адрес пересылки, поскольку он вам понадобится при настройке вашей учетной записи. На следующем рисунке адрес пересылки равен http://99cad2de.ngrok.io
.
Настройте Свою Учетную Запись Nexmo
Если у вас нет приложения, вы можете использовать КЛИЕНТ Nexmo для его создания, используя свой адрес пересылки ngrok:
nexmo app:create "Record Message Demo" http://your-ngrok-forwarding-address/webhooks/answer http://your-ngrok-forwarding-address/webhooks/events --keyfile private.key
После выполнения этой команды вам будет показан идентификатор приложения. Например: notreal-1111-2222-3333- идентификатор приложения
. Вам понадобится этот идентификатор приложения, чтобы связать свой номер телефона с приложением.
Вы можете использовать интерфейс Nexmo CLI, чтобы связать свой номер телефона и приложение:
nexmo link:app your-nexmo-phone-number your-application-id
Эта команда инструктирует Nexmo создать новое приложение в вашей учетной записи. Приложение отправит запрос на первый URL-адрес, когда получит телефонный звонок. Приложение будет отправлять запросы на второй URL-адрес при изменении статуса вызова.
Протестируйте Свое Приложение
Запустите свое приложение с помощью команды gradle run
внутри вашего каталога record-a-message
.
Позвоните на свой номер Nexmo и протестируйте свое приложение. Вы услышите сообщение: “Пожалуйста, оставьте сообщение после звукового сигнала, затем нажмите #. Мы свяжемся с вами, как только сможем. ” Как только вы услышите звуковой сигнал, оставьте сообщение, а затем нажмите #
. Затем вы должны услышать “Спасибо за ваше сообщение. До свидания”. и URL-адрес записи будет отображаться на вашей консоли.
Вывод
В нескольких строках кода вы создали приложение, которое может принимать телефонный звонок, записывать сообщение, а затем отображать URL-адрес этой записи.
Ознакомьтесь с нашей документацией по Nexmo Developer , где вы можете узнать больше о потоке вызовов или Объекты управления вызовом Nexmo . Смотрите наши Примеры быстрого запуска Nexmo для Java для получения полных примеров кода в этом руководстве и многое другое.
Сообщение Запись телефонного сообщения с помощью Java появилось первым на Nexmo .
Оригинал: “https://dev.to/vonagedev/record-a-phone-message-with-java-56j3”