Рубрики
Без рубрики

Запись телефонного сообщения с помощью Java

Вступление В предыдущем уроке мы показали вам, как принимать телефонные звонки с помощью Java a… С тегами java, nexmo, телефон, запись.

Вступление

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

Предпосылки

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

Вы будете использовать Gradle для управления вашими зависимостями и запуска вашего приложения. Кроме того, вам нужно будет убедиться, что у вас установлена копия JDK. В этом руководстве я буду использовать JDK 8.

Наконец, вам понадобится установленный Nexmo CLI . Вы будете использовать его, чтобы приобрести номер телефона и настроить свою учетную запись Nexmo так, чтобы она указывала на ваше новое приложение.

Запись телефонного сообщения с помощью Java

В этом руководстве вы пройдете через следующие шаги:

  1. Использование Gradle для настройки нового Java-проекта.
  2. Использование фреймворка Spark для управления вызовом.
  3. Покупка номера и настройка вашей учетной записи 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 выполнить три действия:

  1. Действие talk для приветствия вызывающего абонента и указания ему, как оставить сообщение.
  2. Действие record , которое даст команду Voice API начать запись.
  3. 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”