
シェア:
スティーブは自称数学者で、悪口の王様。グレイハウンド、曲がりくねったパズル、ヨーロッパのボードゲームをこよなく愛する。 非数学系の人には数学を、非Java系の人にはJavaの話をしていないときは、コーヒーを飲みながらコードをハックしている。
Javaでキーパッド入力(DTMF)を扱う
所要時間:6 分
はじめに
前回のチュートリアルでは、以下のようなアプリケーションを作成する方法を紹介した。 Javaで電話を受ける.このチュートリアルでは、Vonage Voice API を使用して、電話を受信してユーザー入力に応答できるアプリケーションを作成します。 Vonage Voice API を使用します。.
前提条件
このチュートリアルを行うには、Vonageアカウントが必要です。アカウントをお持ちでない場合は、今すぐサインアップしてください。
使用するのは Gradleを使うことになるでしょう。さらに、JDKのコピーがインストールされていることを確認する必要があります。このチュートリアルではJDK 8を使用します。
Javaでユーザー入力を処理する
このチュートリアルでは、以下の手順を説明します:
使用方法 グラドルを使って新しいJavaプロジェクトをセットアップする。
使用方法 スパークフレームワークを使用する。
番号を購入し、その番号をアプリケーションで使用するようにVonageアカウントを設定します。
Gradleを使って新しいJavaプロジェクトをセットアップする
使用するのは Gradleを使用して、依存関係を管理し、Javaアプリケーションを作成して実行します。コマンドラインから、以下のコマンドで新しいJavaプロジェクトを作成します:
この gradle init --type java-applicationコマンドを実行すると、必要なすべてのフォルダと、コードを書くためのサンプル・クラスが作成されます。
スパークフレームワークを使用して呼び出しを制御する
を使用します。 Sparkフレームワークを使用して、Vonage があなたの番号に電話がかかってきたときに使用する HTTP 呼び出しと、入力があったときに Vonage が送信するリクエストを傍受します。
依存関係の追加
以下を dependenciesブロックの build.gradleファイルに追加する:
compile 'com.sparkjava:spark-core:2.7.2'
compile 'com.nexmo:client:4.0.1'あなたの dependenciesブロックはこのようになるはずだ:
dependencies {
// This dependency is found on compile classpath of this component and consumers.
compile 'com.google.guava:guava:23.0'
compile 'com.sparkjava:spark-core:2.7.2'
compile 'com.nexmo:client:4.0.1'
// Use JUnit test framework
testCompile 'junit:junit:4.12'
} アンサールートの設定
グラドルは Appクラスを src/main/javaフォルダに作成します。このクラスの内部には getGreetingと mainメソッドがあります。メソッドは必要ありません。 getGreetingメソッドは必要ないので、自由に削除してください。
メソッドの内容を mainメソッドの内容を置き換える:
/*
* Route to answer incoming calls.
*/
Route answerRoute = (req, res) -> {
TalkAction intro = new TalkAction
.Builder("Hello. Please press any key to continue.")
.build();
InputAction input = new InputAction.Builder()
.eventUrl(String.format("%s://%s/webhooks/dtmf", req.scheme(), req.host()))
.maxDigits(1)
.build();
res.type("application/json");
return new Ncco(intro, input).toJson();
};
/*
* Route to print out call event info.
*/
Route eventRoute = (req, res) -> {
System.out.println(req.body());
return "";
};
Spark.port(3000);
Spark.get("/webhooks/answer", answerRoute);
Spark.post("/webhooks/events", eventRoute);
このコードは http://localhost:3000/webhooks/answerにルートを設定する。 Nexmoコールコントロールオブジェクト(NCCO):
[
{
"text": "Hello please press any key to continue.",
"action": "talk"
},
{
"maxDigits": 1,
"action": "input",
"eventUrl": [
"http://localhost:3000/webhooks/dtmf"
]
}
]トークアクションは、Vonageにその textプロパティを発呼側に返すように指示する。inputアクションは、発信者が入力した1桁の数字をキャプチャし、この情報を含むPOSTリクエストを eventUrlにPOSTリクエストを送信する。
また、ルートは http://localhost:3000/webhooks/eventsにもルートが設定されます。
DTMFルートの設定
発信者がデバイスの数字を押すと、DTMF(Dual-Tone Multi-Frequency)信号が生成されます。VonageはこのDTMF信号を使用して、どのキーが押されたかを判断する。これが発生すると、VonageはPOSTリクエストを eventUrlで定義されている InputNcco.
以下は、JSONボディを含むPOSTリクエストの例である:
{
"dtmf": "5",
"timed_out": false,
"uuid": "some-uuid",
"conversation_uuid": "some-conversation",
"timestamp": "2018-08-14T19:59:02.528Z"
}Javaでこの情報を読み取るには、JSONプロパティをJavaプロパティにマッピングするクラスが必要です。Nexmo Javaクライアント・ライブラリには InputEventクラスが含まれています。
での mainクラスの Appクラスのメソッドで eventRoute:
/*
* Route which returns NCCO saying which DTMF code was received.
*/
Route inputRoute = (req, res) -> {
InputEvent event = InputEvent.fromJson(req.body());
TalkAction response = new TalkAction
.Builder(String.format("You pressed %s, Goodbye.", event.getDtmf()))
.build();
res.type("application/json");
return new Ncco(response).toJson();
};
次に、ルートを登録します。 mainメソッドの最後に
Spark.post("/webhooks/dtmf", inputRoute);このルートは次のように応答する。 NCCO:
[
{
"text": "You pressed 6, Goodbye.",
"action": "talk"
}
]ここで6は dtmfに送られたjsonのプロパティである。 /webhooks/dtmf.
背番号の購入
電話を受けるにはVonage番号が必要です。番号をお持ちでない場合は Vonage CLIを使用して番号を検索し、購入することができます。まず、購入可能な番号を選びます:
そして、用意されているNumbersのいずれかを購入する:
購入時に割り当てられる番号を控えておいてください。この番号はアプリケーションのリンクやテストに必要です。
アプリケーションの公開
アプリケーションにHTTPリクエストを送信するために、Vonageはアプリケーションが実行されているURLを知る必要があります。
ローカルネットワークを設定したり、外部サービスでアプリケーションをホスティングする代わりに ngrokを使ってアプリケーションを安全にインターネットに公開することができます。
ダウンロード ngrokをダウンロードし、以下のコマンドを実行する:
アカウントを設定する際に必要になりますので、転送先アドレスを控えておいてください。次の図では、転送先アドレスは http://99cad2de.ngrok.io.
screenshot of ngrok
Vonageアカウントの設定
アプリケーションをお持ちでない場合は Vonage CLIを使用して作成できます。 ngrok転送アドレスを使って作成できます:
このコマンドを実行すると、アプリケーションIDが表示されます。例えば notreal-1111-2222-3333-appid.電話番号をアプリケーションにリンクさせるには、このアプリケーションIDが必要です。
を使用することができます。 Vonage CLIを使用して電話番号とアプリケーションをリンクできます:
このコマンドは、Vonage にお客様の Account に新しいアプリケーションを作成するよう指示します。アプリケーションは電話を受信すると、最初のURLにリクエストを送信します。通話ステータスが変更されると、アプリケーションは2番目のURLにリクエストを送信します。
アプリケーションのテスト
アプリケーションを gradle runアプリケーションを handle-user-inputディレクトリの中で
Vonage番号に電話をかけ、アプリケーションをテストしてください。電話のキーパッドで数字を押すと、"You pressed 6, Goodbye "というメッセージが聞こえます。
結論
数行のコードで、電話を受け、ユーザー入力をキャプチャし、その入力で応答できるアプリケーションを作成しました。ユーザーの入力を使って通話を制御する他の方法を試してみてください。
のドキュメントをご覧ください。 Nexmoデベロッパーのドキュメントをご覧ください。 コールフローまたは Nexmoコールコントロールオブジェクト.詳しくは Java用Nexmoクイックスタート例を参照してください。 このチュートリアルをご覧ください。