
シェア:
スティーブは自称数学者で、悪口の王様。グレイハウンド、曲がりくねったパズル、ヨーロッパのボードゲームをこよなく愛する。 非数学系の人には数学を、非Java系の人にはJavaの話をしていないときは、コーヒーを飲みながらコードをハックしている。
Javaで音声プロキシ経由で電話を転送する
所要時間:6 分
はじめに
電話をかけることは、私たちにとって必要なことだ。しかし、電話番号を公開するたびに、あなたはそれを見知らぬ人にさらすことになる。 見知らぬ人.セキュリティと利便性のバランスは微妙なラインだ。もし、相手に別の電話番号を教えることで、自分の電話番号を隠せるとしたらどうだろう?
Voiceプロキシは、お互いの電話番号を仲介電話番号の後ろに隠すことで、発信者間の個人情報を保護する技術です。
このチュートリアルでは、音声プロキシを作成することで、発信者と着信者の電話番号の両方を保護する方法を学びます。相手があなたのVonage番号に電話をかけると、その電話はあなたの個人用の電話にルーティングされます。電話をかけてきた人はあなたのVonage番号だけを知っていればよく、おまけに相手の電話番号を知ることもありません。
前提条件
を使用します。 Gradleを使うことになるでしょう。さらに、JDKのコピーがインストールされていることを確認する必要があります。このチュートリアルではJDK 11を使いますが、JDK 8以上であれば何でも動くはずです。
最後に Vonage CLIをインストールする必要があります。これを使用して電話番号を購入し、新しいアプリケーションを指すようにVonageアカウントを設定します。
Javaで音声プロキシ経由で電話を転送する
このチュートリアルでは、以下の手順を説明します:
Gradleを使って新しいJavaプロジェクトをセットアップする。
使用方法 スパークフレームワークを使用する。
番号を購入し、その番号をアプリケーションで使用するようにVonageアカウントを設定します。
Gradleを使って新しいJavaプロジェクトをセットアップする
Gradleを使用して依存関係を管理し、Javaアプリケーションを作成して実行します。
この gradle init --type=java-applicationコマンドを実行すると、必要なすべてのフォルダと、コードを記述するサンプル・クラスが作成されます。
コマンドラインから、Gradleからのデフォルトのプロンプトのいずれかを受け入れながら、以下のコマンドで新しいJavaプロジェクトを作成する:
Gradleは Appクラスを src/main/java/forward/phone/callフォルダに作成します。
このクラスの内部には getGreetingと mainメソッドがあります。この getGreetingメソッドは必要ないので、自由に削除してください。
あなたの Appクラスはこのようになるはずだ:
/*
* This Java source file was generated by the Gradle 'init' task.
*/
package forward.phone.call;
public class App {
public static void main(String[] args) {
// Future Code Goes Here
}
} スパークフレームワークを使用して呼び出しを制御する
Sparkフレームワークを使用して、あなたの電話番号に電話がかかってきたときにVonageが発信するHTTPコールを受信する。
依存関係の追加
以下を dependenciesブロックに以下を追加する。 build.gradleファイルのブロックに以下を追加する:
// Spark Framework
implementation 'com.sparkjava:spark-core:2.8.0'
// Vonage Java Client
implementation 'com.nexmo:client:4.2.1'あなたの dependenciesブロックはこのようになるはずだ:
dependencies {
implementation 'com.sparkjava:spark-core:2.8.0'
implementation 'com.nexmo:client:4.2.1'
// Use JUnit test framework
testImplementation 'junit:junit:4.12'
} アンサー・ルートの定義
コールを受信すると、Vonageは事前に定義されたWebhook URLにリクエストを送信します。これは Vonage Call Control Object (NCCO)実行するアクションのリストを含む
アクションを使用します。 connectアクションを使用して、Vonageへの着信を電話に転送します。アクションは connectアクションは電話を電話番号などのエンドポイントに接続するために使われます。
これが、アプリケーションが作成するNCCOである:
[
{
"endpoint": [
{
"number": "16165551234",
"type": "phone"
}
],
"from": "16165559876",
"action": "connect"
}
]を使用します。 ConnectActionと PhoneEndpointクラスを使用します。
これには、通話を接続したい電話番号と、通話を発信したいVonage番号の2つの変数が必要です。
まず、以下の定数を Appクラスに追加します。この定数で置き換える電話番号は、国番号で始まり、先頭に +:
private static final String YOUR_SECOND_NUMBER = "16165551234";Vonageは toパラメータをWebhookに送信します。パラメータとして追加することで、この同じ番号を使ってあなたに電話をかけることができます。 fromパラメータとして追加します。
次のコードを mainクラスの Appクラスのメソッドに以下のコードを追加して、インポートを解決します:
/*
* Route to answer incoming calls with an NCCO response.
*/
Route answerRoute = (req, res) -> {
String vonageNumber = req.queryParams("to");
ConnectAction connect = ConnectAction.builder()
.endpoint(PhoneEndpoint.builder(YOUR_SECOND_NUMBER).build())
.from(vonageNumber)
.build();
res.type("application/json");
return new Ncco(connect).toJson();
};
回答ルートの登録
アンサールートを使用するには、Sparkを設定する必要があります。アプリケーションはポート 3000でリッスンし、ルートは /webhooks/answer.
の mainクラスの Appクラスのメソッドに
Spark.port(3000);
Spark.get("/webhooks/answer", answerRoute); 背番号の購入
電話を受けるにはVonage番号が必要です。番号をお持ちでない場合は、Vonage CLIを使用して購入することができます。
まず、音声通話が可能な電話番号を検索します(この例では、国番号にUSを使用しています):
生成されたリストから数字を選び、次のコマンドに挿入する:
あなたに割り当てられた番号を控えておいてください。この番号は、アプリケーションとテストのリンクに必要です。
アプリケーションの公開
アプリケーションにHTTPリクエストを送信するために、Vonageはアプリケーションが実行されているURLを知る必要があります。
ローカルネットワークを設定したり、外部サービスでアプリケーションをホスティングする代わりに ngrokを使ってアプリケーションを安全にインターネットに公開できます。
ngrokをダウンロードし、以下のコマンドを実行する:
アカウントを設定する際に必要になりますので、転送先アドレスを控えておいてください。次の図では、転送先アドレスは http://99cad2de.ngrok.io.

Vonageアカウントの設定
アプリケーションをお持ちでない場合は、Vonage CLI を使用して ngrok 転送アドレスを使用してアプリケーションを作成できます:
このコマンドを実行すると、アプリケーションIDが表示されます。例えば notreal-1111-2222-3333-appid.電話番号をアプリケーションにリンクさせるには、このアプリケーションIDが必要です。
Vonage CLIを使用して電話番号とアプリケーションをリンクできます:
アプリケーションのテスト
アプリケーションを gradle runアプリケーションを forward-phone-callディレクトリの中で
友人、同僚、または2台目の電話を持ち、Vonage番号に電話をかけます。もう一方の電話が鳴り始めるはずです。電話に出ると、お互いに直接電話したのと同じように接続されます。
結論
数行のコードで、Vonage番号からの電話を個人の電話に転送できるアプリケーションを作成したことになる。
Vonage Developerのドキュメントをご覧ください。 コールフローまたは Vonageコールコントロールオブジェクト.また インバウンドコールの接続コード・スニペットも参照してください。