https://a.storyblok.com/f/270183/1368x665/619e571c79/26apr_dev-blog_forward-a-call-via-voice-proxy_r1-01.png

PHPとVonageで音声プロキシを構築する

最終更新日 April 22, 2026

所要時間:2 分

はじめに

このVonageコール転送チュートリアルでは、音声通話を別の番号から発信されているようにプロキシする方法を紹介します。

通話相手の本当の電話番号を他の通話相手から隠したいと思うのは、ビジネス上やむを得ない理由がたくさんあるからである。

典型的な例は、オンラインタクシーサービスです。予約体験をできる限りスムーズにするために、顧客とドライバーが互いにコミュニケーションできるようにしたい。しかし、(顧客のプライバシーを守るために)ドライバーには顧客の本当の番号を知られたくないし、顧客にもドライバーの番号を知られたくない。

幸いなことに、この方法は Vonage Voice APIを使ってわずかなステップで実装できます!

TLDR;完全な ソースコードはGitHubで入手できる。

前提条件

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.

依存関係のインストール

コードを格納するディレクトリを作成し、Composerを使って新しいプロジェクトを生成する:

composer init

returnを押すことで、すべての対話式質問をスキップすることができます。次のステップでこのプロジェクトに必要なものをすべて追加します。

Composerは設定ファイルを生成する。 composer.jsonと依存フォルダを生成する、 vendor.

VonageのVoice APIを使用してインバウンドコールを処理するには、次のものを提供する必要があります。 ウェブフックを提供する必要があります。

この例では スリム-を使用します。それでは次に、Slim フレームワークと PSR-7 互換インターフェースリクエスト/レスポンスクラスと vlucas/phpdotenv環境変数を処理するための

composer require slim/slim
composer require slim/psr7
composer require vlucas/phpdotenv

すべての依存関係が整理されたので、コードを書くことに移ろう。

Webhookエンドポイントの定義

作業ディレクトリに public/index.php ファイルを作成する:

<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;


require __DIR__ . '/../vendor/autoload.php';


$app = AppFactory::create();


$app->addBodyParsingMiddleware();
$app->addRoutingMiddleware();
$app->addErrorMiddleware(true, true, true);


// Forward a call via proxy
$app->get('/webhooks/answer', function (Request $request, Response $response) {
   // Code to process the inbound call
});


$app->post('/webhooks/events', function (Request $request, Response $response, array $args) {
   // Code that executes when an event is received
   error_log('event received: ' . $request->getBody());
   return $response->withStatus(204);
});


$app->run();

このコードでは、新しい Slim アプリケーションを作成し、2 つのルートを定義します。これらのルートは、以下のウェブフックエンドポイントに対応しています:

  • /webhooks/answer:Vonageは、バーチャル番号で着信コールを受けると GETバーチャル番号で着信コールを受けると、Vonageはこのエンドポイントにリクエストします。

  • /webhooks/events:Vonage は、重要なイベント (呼の呼び出し音、応答、完了など) が発生するたびに POST重要なイベント(呼の呼び出し音、応答、完了など)が発生するたびに、Vonageはこのエンドポイントにリクエストを送信し、アプリケーションで通話のステータスを更新します。

詳細は Webhookリファレンスを参照してください。

インバウンドコールの処理

インバウンドコールを受信すると、VonageのAPIは以下のリクエストを行います。 GETリクエストを /webhooks/answer エンドポイントにリクエストを行い、そのレスポンスにコールの処理方法が含まれていることを期待します。

これらの命令は、JSON形式の呼制御オブジェクト(NCCO)として提供される。NCCOは、通話が取るべきさまざまな「アクション」を定義する。 inputユーザーが電話のキーパッドで押す可能性のある数字を収集する。 stream通話にオーディオを再生する。アクションの完全なリストは NCCOリファレンス.

プロキシロジックを考える前に、まずVonage番号で着信コールを受信できることを確認しよう。

アプリケーションのテスト talkアクションを使ってアプリケーションをテストしてください。あなたの /webhooks/answer を定義して返します:

$app->get('/webhooks/answer', function (Request $request, Response $response) {
    $ncco = [
        [
            'action' => 'talk',
            'text' => 'Thank you for calling. Everything appears to be working properly'
        ]  
    ];

    $response->getBody()->write(json_encode($ncco));
    return $response->withHeader('Content-Type', 'application/json');
});

ウェブフックにアクセスできるようにする

Vonage APIがお客様のWebhookエンドポイントにリクエストを行うには、インターネット経由でアクセスできる必要があります。

ローカルの開発環境を公共のインターネットに公開するための優れたツールは ngrok.我々の チュートリアルをインストールして使う方法を説明します。

以下のコマンドでngrokを起動する:

ngrok http 8080

ngrokがあなたのために作成した公開URLをメモしておいてください。

https://123example.ngrok-free.app -> http://localhost:8080

無料プランの場合、ngrokは再起動するたびに新しいURLを生成するので、Voice APIアプリケーションの設定を更新する必要があります。そのため、このチュートリアルの期間中は ngrok を起動したままにしておいてください。

次に、Vonage側で設定してみよう!

Vonage番号の購入

バーチャル電話番号を購入するには APIダッシュボードにアクセスし、以下の手順に従ってください。

Steps on how to purchase a phone number from the dashboard, from selecting the number and confirming the selection.Purchase a phone number

  1. あなたの APIダッシュボード

  2. BUILD & MANAGE > Numbers > Buy Numbersを開きます。

  3. 必要な属性を選択し、検索をクリックします。

  4. ご希望の番号の横にある購入ボタンをクリックし、購入を確定する。

  5. バーチャルナンバーを購入したことを確認するには、左側のナビゲーションメニューの「BUILD & MANAGE」から「Numbers」、「Your Numbers」の順にクリックします。

Voice対応Vonageアプリケーションの作成

Voice対応のVonage Applicationsを作成する必要があります。ここでいうアプリケーションとは、今コードを書いたアプリケーションのことではありません。代わりに、Voice APIを使用するために必要なコンフィギュレーションとセキュリティ情報のためのコンテナです。

  • アプリケーションを作成するには アプリケーションの作成ページでアプリケーションの名前を定義します。

  • Webhooksを使用するAPIを使用する場合は、秘密鍵が必要です。Generate public and private key "をクリックすると、自動的にダウンロードが始まります。この鍵は紛失すると再ダウンロードできません。この鍵は紛失しても再ダウンロードできません。 private_<あなたのアプリID>.key.この鍵はAPIコールの認証に使用できます。 注意:アプリケーションを保存するまで、キーは機能しません。

  • 必要な機能(Voice、Messages、RTCなど)を選択し、必要なWebhook(イベントURL、応答URL、受信メッセージURLなど)を提供します。これらはチュートリアルで説明します。

  • 保存してデプロイするには、"Generate new application "をクリックして設定を確定します。これでアプリケーションはVonage APIで使用する準備が整いました。

をクリックする前に 新規アプリケーションの作成をクリックする前に Voice 機能を有効にし、上記の手順で使用した ngrok リンクを使用して、以下のように応答 URL とイベント URL を定義していることを確認してください。

User interface for managing application capabilities, showing voice enabled, answer and event URLs set, and region selected.Correct configuration for a voice-enabled Vonage ApplicationAnswer URL には HTTP GET を、Event URL には HTTP POST を使用していることに注意してください。

セットアップが完了したら、次に進みます。 新しいアプリケーションを作成します。

Screenshot of the Vonage Dashboard when creating a new Vonage Application with sections for name, API key, authentication, privacy, and capabilities options.Screenshot of Create Application

アプリケーションをVonage番号にリンクする

Vonageアプリケーションが作成されると、前のステップで購入したバーチャルナンバーを含め、利用可能なバーチャルナンバーが画面の下に表示されます。

このチュートリアルで使用する番号を選択し、次のボタンをクリックします。 リンクボタンをクリックして、バーチャル番号とVonageアプリケーションをリンクさせます。

Screenshot of the Vonage Dashboard showing available phone numbers to link to the application we createdScreenshot of the Vonage Dashboard showing available phone numbers to link to the application we createdその結果、バーチャル番号に電話をかけると、Vonageは次のように指定したURLでコールフローの指示を探します。 応答URLにイベントウェブフックを送信します。 イベントURLにイベントウェブフックを送信します。

次に、これまでやってきたことがすべてうまく機能しているかチェックしよう。

Vonageバーチャル番号に電話をかける

あるターミナルウィンドウで ngrok を 8080 番ポートで実行し、別のターミナルウィンドウで同じポートで PHP アプリケーションを起動します:

cd public
php -S localhost:8080

Vonage番号に電話をかけます。すべてがうまくいっていれば、NCCOで定義したメッセージが聞こえ、通話が終了します。

Voiceプロキシロジックの実装

発信者番号を隠すために、インバウンドコールをターゲットの受信者の番号に接続し、Vonageのバーチャル番号を使ってインバウンドコールの発信者の本当の番号を隠します。

ファイルに index.phpファイルに、2つの文字列定数を作成して FROM_NUMBERTO_NUMBER.以下のコード・スニペットは、これらの値を環境から取り出します。

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . '/../');
$dotenv->load();

define('FROM_NUMBER', $_ENV['FROM_NUMBER']);
define('TO_NUMBER', $_ENV['TO_NUMBER']);

次に、作業ディレクトリのルートに .envファイルを作成し、これら2つの定数の値を代入する。どちらの数値も国コードを含み、先頭のゼロは省略する。例えば、イギリスの国番号は 44.ですから、私の携帯電話番号が. 07700900004である場合、正しいフォーマットは 447700900004.

// Your Vonage virtual number

FROM_NUMBER=4474example01

// A landline or mobile number you can use for testing. This should differ from the number you will use to make the initial call.

TO_NUMBER=4478example02

最後に、NCCOを更新して connectアクションを含むようにNCCOを更新しましょう。あなたの index.phpファイルの /webhooks/answerエンドポイントを次のように更新する:

// Forward a call via proxy
$app->get('/webhooks/answer', function (Request $request, Response $response) {
    $ncco = [
        [
            'action' => 'connect',
            'from' => FROM_NUMBER,
            'endpoint' => [
                [
                    'type' => 'phone',
                    'number' => TO_NUMBER,
                ]
            ]
        ]
        
    ];

    $response->getBody()->write(json_encode($ncco));
    return $response->withHeader('Content-Type', 'application/json');
});

音声プロキシのテスト

ターミナルウィンドウで ngrokが実行されていることを確認し、 別のターミナルウィンドウで PHP アプリケーションを再起動します:

cd public
php -S localhost:8080

Vonageのバーチャル番号に電話をかけます。電話に出ると、すぐに2つ目の番号が鳴るはずです。その電話は、あなたが電話をかけるのに使った番号ではなく、あなたのVonage番号から発信されているはずです。

これで終わりだ!これで、発信者の本当の番号を隠すシンプルなVoice Proxyが実装されたことになる。

さらに読む

Voice APIについてもっと知りたい方は、以下のリソースをご覧ください:

結論

このチュートリアルでは、PHP と Vonage Voice API を使って音声プロキシを構築し、発信者 ID をマスキングしながら通話を転送する。ここから、通話録音、ダイナミックルーティング、データベースバックの番号マッピングなどでこのソリューションを拡張することができます。

ご質問がある場合、またはあなたが作っているものを共有したい場合は、こちらをクリックしてください。

最新の開発者向けニュース、ヒント、イベント情報をお届けします。

シェア:

https://a.storyblok.com/f/270183/372x373/36054b72d0/julia-biro.png
Julia Biroデベロッパー・アドボケイト

Juliaは、チュートリアル、ガイド、実用的なリソースを作成することで、仲間の開発者に力を与えることに尽力しています。アウトリーチと教育のバックグラウンドを持つ彼女は、テクノロジーをより身近なものにし、開発者の経験全体を向上させることを目指しています。地域のコミュニティイベントでもよく見かける。