https://d226lax1qjow5r.cloudfront.net/blog/blogposts/handle-keypad-input-dtmf-with-java-dr/Handle-Keypad-Input-With-Java.png

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

最終更新日 May 3, 2021

所要時間:6 分

はじめに

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

前提条件

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

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

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.

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フォルダに作成します。このクラスの内部には getGreetingmainメソッドがあります。メソッドは必要ありません。 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の話をしていないときは、コーヒーを飲みながらコードをハックしている。