
シェア:
スティーブは自称数学者で、悪口の王様。グレイハウンド、曲がりくねったパズル、ヨーロッパのボードゲームをこよなく愛する。 非数学系の人には数学を、非Java系の人にはJavaの話をしていないときは、コーヒーを飲みながらコードをハックしている。
Javaで電話メッセージを録音する
所要時間:6 分
はじめに
以前のチュートリアルでは、以下の方法を紹介しました。 Javaで電話を受けるで電話を受け、音声合成テキストを使って応答する方法を紹介しました。また、ユーザーがメッセージを残し、録音されたメッセージを取得することもできます。
前提条件
使用するのは Gradleを使うことになるでしょう。さらに、JDKのコピーがインストールされていることを確認する必要があります。このチュートリアルではJDK 8を使用します。
最後に Vonage CLIをインストールする必要があります。これを使用して電話番号を購入し、新しいアプリケーションを指すようにVonageアカウントを設定します。
Javaで電話メッセージを録音する
このチュートリアルでは、以下の手順を説明します:
Gradleを使って新しいJavaプロジェクトをセットアップする。
使用方法 スパークフレームワークを使用する。
番号を購入し、その番号をアプリケーションで使用するようにVonageアカウントを設定します。
Gradleを使って新しいJavaプロジェクトをセットアップする
Gradleを使用して依存関係を管理し、Javaアプリケーションを作成して実行します。
この gradle init --type=java-applicationコマンドを実行すると、必要なすべてのフォルダと、コードを記述するサンプル・クラスが作成されます。
コマンドラインから、以下のコマンドで新しいJavaプロジェクトを作成する:
スパークフレームワークを使用して呼び出しを制御する
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フォルダに作成します。このクラスの内部には getGreetingと mainメソッドがあります。メソッドは必要ありません。 getGreetingメソッドは必要ないので、自由に削除してください。
アンサー・ルートの定義
まず、通話に応答するために使用するルートを定義します。コールを受信すると、Vonageは事前に定義されたWebhook URLにリクエストを送信します。これは Vonage Call Control Object (NCCO)を受け取ることを期待します。
電話に出ると、アプリケーションはVonageに3つのアクションを実行するよう指示します:
A
talk発信者に挨拶し、メッセージを残す方法を指示するアクション。A
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アクションには 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機能
気に入った番号を選んだら、その番号を購入することができる:
購入した番号を控えておいてください。この番号はアプリケーションのリンクやテストに必要です。
アプリケーションの公開
アプリケーションにHTTPリクエストを送信するために、Vonageはアプリケーションが実行されているURLを知る必要があります。
ローカルネットワークを設定したり、外部サービスでアプリケーションをホスティングする代わりに ngrokを使ってアプリケーションを安全にインターネットに公開することができます。
ngrokをダウンロードし、以下のコマンドを実行する:
アカウントを設定する際に必要になりますので、転送先アドレスを控えておいてください。次の図では、転送先アドレスは http://99cad2de.ngrok.io.
Screenshot of ngrok running in terminal with forwarding address http://99cad2de.ngrok.io
Vonageアカウントの設定
アプリケーションをお持ちでない場合は、Vonage CLI を使用して ngrok 転送アドレスを使用してアプリケーションを作成できます:
で自分の公開鍵を渡すこともできます。 --public_keyfile.詳細は こちら
このコマンドを実行すると、アプリケーションIDが表示されます。例えば notreal-1111-2222-3333-appid.電話番号をアプリケーションにリンクさせるには、このアプリケーションIDが必要です。
Vonage CLIを使用して電話番号とアプリケーションをリンクできます:
このコマンドは、Vonage にお客様の Account に新しいアプリケーションを作成するよう指示します。アプリケーションは電話を受信すると、最初のURLにリクエストを送信します。通話ステータスが変更されると、アプリケーションは2番目のURLにリクエストを送信します。
アプリケーションのテスト
アプリケーションを gradle runアプリケーションを record-a-messageディレクトリの中で
Vonage番号に電話をかけ、アプリケーションをテストしてください。発信音の後にメッセージを残してください。ビープ音が聞こえたら、メッセージを残し、#を押してください。 #.メッセージありがとうございました。と表示され、コンソールに録音URLが表示されます。
結論
数行のコードで、電話を受け、メッセージを録音し、その録音のURLを表示できるアプリケーションを作成したことになる。
Vonage Developerのドキュメントをご覧ください。 コールフローまたは Vonageコールコントロールオブジェクト.当社の Java用Vonageクイックスタート例を参照してください。 このチュートリアルをご覧ください。