https://d226lax1qjow5r.cloudfront.net/blog/blogposts/record-a-phone-message-with-java-dr/ord-a-Phone-Message-with-Java.png

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

最終更新日 May 12, 2021

所要時間:6 分

はじめに

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

前提条件

Vonage API Account

To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.

This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.

使用するのは 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の話をしていないときは、コーヒーを飲みながらコードをハックしている。