https://a.storyblok.com/f/270183/262916/fc4bba71b4/ord-a-phone-message-with-java.png

Javaで電話メッセージを録音する

最終更新日 May 12, 2021

所要時間:6 分

はじめに

以前のチュートリアルでは、以下の方法を紹介しました。 Javaで電話を受けるで電話を受け、音声合成テキストを使って応答する方法を紹介しました。また、ユーザーがメッセージを残し、録音されたメッセージを取得することもできます。

前提条件

使用するのは Gradleを使うことになるでしょう。さらに、JDKのコピーがインストールされていることを確認する必要があります。このチュートリアルではJDK 8を使用します。

最後に Vonage CLIをインストールする必要があります。これを使用して電話番号を購入し、新しいアプリケーションを指すようにVonageアカウントを設定します。

Javaで電話メッセージを録音する

このチュートリアルでは、以下の手順を説明します:

  1. Gradleを使って新しいJavaプロジェクトをセットアップする。

  2. 使用方法 スパークフレームワークを使用する。

  3. 番号を購入し、その番号をアプリケーションで使用するようにVonageアカウントを設定します。

Gradleを使って新しいJavaプロジェクトをセットアップする

Gradleを使用して依存関係を管理し、Javaアプリケーションを作成して実行します。

この gradle init --type=java-applicationコマンドを実行すると、必要なすべてのフォルダと、コードを記述するサンプル・クラスが作成されます。

コマンドラインから、以下のコマンドで新しいJavaプロジェクトを作成する:

mkdir record-a-message cd record-a-message gradle init --type=java-application

スパークフレームワークを使用して呼び出しを制御する

Sparkフレームワークを使用して、あなたの番号がコールを受信したときにVonageによって行われるHTTPコールを受信し、メッセージが録音された後にVonageが送信するリクエストを受信します。

依存関係の追加

以下を dependenciesブロックに以下を追加する。 build.gradleファイルのブロックに以下を追加する:

// Spark Framework
implementation 'com.vonage:client:[6.1.0,7.0.0)'
//Vonage Client
implementation "com.sparkjava:spark-core:2.6.0"

あなたの dependenciesブロックはこのようになるはずだ:

dependencies {
    testImplementation 'junit:junit:4.12'

    implementation 'com.vonage:client:[6.1.0,7.0.0)'
    implementation "com.sparkjava:spark-core:2.6.0"
}

Gradleは Appクラスを src/main/javaフォルダに作成します。このクラスの内部には getGreetingmainメソッドがあります。メソッドは必要ありません。 getGreetingメソッドは必要ないので、自由に削除してください。

アンサー・ルートの定義

まず、通話に応答するために使用するルートを定義します。コールを受信すると、Vonageは事前に定義されたWebhook URLにリクエストを送信します。これは Vonage Call Control Object (NCCO)を受け取ることを期待します。

電話に出ると、アプリケーションはVonageに3つのアクションを実行するよう指示します:

  1. A talk発信者に挨拶し、メッセージを残す方法を指示するアクション。

  2. A 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アクションには eventUrlというプロパティを持っています。以下は、イベント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"
}

Vonageの Java クライアントには RecordEventに送信された 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 "";
};

ルートの登録

ここまでで、あなたは2つのルートを定義した:

  • 最初のルートは、Vonageが着信に応答すると、NCCOでVonageに応答する。

  • 2番目のルートは、Vonageがメッセージの録音を終了すると、録音URLを記録します。

これらのルートを使用するには、Sparkを設定する必要があります。アプリケーションはポート 3000でリッスンし、ルートは /webhooks/answerそして /webhooks/recordings.

mainクラスの Appクラスのメソッドに

Spark.port(3000);
Spark.get("/webhooks/answer", answerRoute);
Spark.post("/webhooks/recordings", recordingRoute);

背番号の購入

電話を受けるにはVonage番号が必要です。番号をお持ちでない場合は、Vonage CLIを使用して番号を購入することができます。

最初に Voice機能

vonage numbers:search --features=VOICE US

気に入った番号を選んだら、その番号を購入することができる:

vonage numbers:buy 1201XXXXXXX US

購入した番号を控えておいてください。この番号はアプリケーションのリンクやテストに必要です。

アプリケーションの公開

アプリケーションにHTTPリクエストを送信するために、Vonageはアプリケーションが実行されているURLを知る必要があります。

ローカルネットワークを設定したり、外部サービスでアプリケーションをホスティングする代わりに ngrokを使ってアプリケーションを安全にインターネットに公開することができます。

ngrokをダウンロードし、以下のコマンドを実行する:

ngrok http 3000

アカウントを設定する際に必要になりますので、転送先アドレスを控えておいてください。次の図では、転送先アドレスは http://99cad2de.ngrok.io.

Screenshot of ngrok running in terminal with forwarding address http://99cad2de.ngrok.ioScreenshot of ngrok running in terminal with forwarding address http://99cad2de.ngrok.io

Vonageアカウントの設定

アプリケーションをお持ちでない場合は、Vonage CLI を使用して ngrok 転送アドレスを使用してアプリケーションを作成できます:

vonage apps:create "Record Message Demo" --voice_answer_url=http://your-ngrok-forwarding-address/webhooks/answer --voice_event_url=http://your-ngrok-forwarding-address/webhooks/answer

で自分の公開鍵を渡すこともできます。 --public_keyfile.詳細は こちら

このコマンドを実行すると、アプリケーションIDが表示されます。例えば notreal-1111-2222-3333-appid.電話番号をアプリケーションにリンクさせるには、このアプリケーションIDが必要です。

Vonage CLIを使用して電話番号とアプリケーションをリンクできます:

vonage apps:link your-application-id --number=your-vonage-phone-number

このコマンドは、Vonage にお客様の Account に新しいアプリケーションを作成するよう指示します。アプリケーションは電話を受信すると、最初のURLにリクエストを送信します。通話ステータスが変更されると、アプリケーションは2番目のURLにリクエストを送信します。

アプリケーションのテスト

アプリケーションを gradle runアプリケーションを record-a-messageディレクトリの中で

Vonage番号に電話をかけ、アプリケーションをテストしてください。発信音の後にメッセージを残してください。ビープ音が聞こえたら、メッセージを残し、#を押してください。 #.メッセージありがとうございました。と表示され、コンソールに録音URLが表示されます。

結論

数行のコードで、電話を受け、メッセージを録音し、その録音のURLを表示できるアプリケーションを作成したことになる。

Vonage Developerのドキュメントをご覧ください。 コールフローまたは Vonageコールコントロールオブジェクト.当社の Java用Vonageクイックスタート例を参照してください。 このチュートリアルをご覧ください。

シェア:

https://a.storyblok.com/f/270183/150x150/a3d03a85fd/placeholder.svg
Steve Crowヴォネージの卒業生

スティーブは自称数学者で、悪口の王様。グレイハウンド、曲がりくねったパズル、ヨーロッパのボードゲームをこよなく愛する。 非数学系の人には数学を、非Java系の人にはJavaの話をしていないときは、コーヒーを飲みながらコードをハックしている。