https://a.storyblok.com/f/270183/221415/f7cf3e59fa/handle-keypad-input-with-java.png

Javaでキーパッド入力(DTMF)を扱う

最終更新日 May 3, 2021

所要時間:6 分

はじめに

前回のチュートリアルでは、以下のようなアプリケーションを作成する方法を紹介した。 Javaで電話を受ける.このチュートリアルでは、Vonage Voice API を使用して、電話を受信してユーザー入力に応答できるアプリケーションを作成します。 Vonage Voice API を使用します。.

前提条件

このチュートリアルを行うには、Vonageアカウントが必要です。アカウントをお持ちでない場合は、今すぐサインアップしてください。

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

Javaでユーザー入力を処理する

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

  1. 使用方法 グラドルを使って新しいJavaプロジェクトをセットアップする。

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

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

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

使用するのは Gradleを使用して、依存関係を管理し、Javaアプリケーションを作成して実行します。コマンドラインから、以下のコマンドで新しいJavaプロジェクトを作成します:

mkdir handle-user-input cd handle-user-input gradle init --type java-application

この 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を使用して番号を検索し、購入することができます。まず、購入可能な番号を選びます:

vonage numbers:search US

そして、用意されているNumbersのいずれかを購入する:

vonage numbers:buy 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

Vonageアカウントの設定

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

vonage apps:create "Receive Call Demo" http://your-ngrok-forwarding-address/webhooks/answer http://your-ngrok-forwarding-address/webhooks/events --keyfile private.key

このコマンドを実行すると、アプリケーション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アプリケーションを handle-user-inputディレクトリの中で

Vonage番号に電話をかけ、アプリケーションをテストしてください。電話のキーパッドで数字を押すと、"You pressed 6, Goodbye "というメッセージが聞こえます。

結論

数行のコードで、電話を受け、ユーザー入力をキャプチャし、その入力で応答できるアプリケーションを作成しました。ユーザーの入力を使って通話を制御する他の方法を試してみてください。

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

シェア:

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

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