ウェブフック
WebhookはAPIの拡張機能ですが、お客様のコードがAPIプラットフォームからデータをリクエストする代わりに、Vonageがお客様にデータを送信します。データはお客様のアプリケーションへのウェブリクエストとして届きます。Webhookは、Number Insight APIへの非同期リクエストなど、以前のAPI呼び出しの結果である場合もあります(このタイプのWebhookは「コールバック」とも呼ばれます)。Webhookは、着信やメッセージなどのイベントをアプリケーションに通知するためにも使用されます。
VonageサーバーはWebhook経由でアプリケーションにデータを送信できる必要があるため、HTTPリクエストを受信するWebサーバーをセットアップする必要があります。また、各Webhookにデータを送信できるように、Webサーバー上で各WebhookのURLを指定する必要があります。
Webhooksワークフロー
Webhookでは、Webhookを送信するURLが設定されていることが重要です。データが利用可能になると、VonageはHTTPリクエストとしてアプリケーションにWebhookを送信します。アプリケーションは、データを正常に受信したことを示すHTTP成功コードで応答する必要があります。
そのプロセスは次のようなものだ:
Webhooksは、着信やメッセージ、通話ステータスの変更などのイベントに対して、Vonageがお客様のアプリケーションに情報を送信する便利なメカニズムを提供します。Webhooksはまた、リクエストの後に利用可能になる配達受領書などのフォローアップ情報を送信するために使用することもできます。
どのAPIがウェブフックをサポートしていますか?
サポートされているVonage APIへのリクエストから得られる情報は、HTTPサーバ上のWebhookエンドポイントへのHTTPリクエストとして送信されます。ウェブフックエンドポイントを設定するには Vonageダッシュボード.
VonageはWebhookを使用して以下の情報を送信および取得します:
| API名 | ウェブフックの使用法 |
|---|---|
| SMS API | メッセージの配信ステータスを送信し、受信SMSを受信します。 |
| Voice API | を取得します。 呼び出し制御オブジェクト あるウェブフック・エンドポイントから通話を制御するために使用し、別のウェブフック・エンドポイントに通話状況に関する情報を送信します。ウェブフック Webhookリファレンス をご覧ください。 |
| Numbers Insight アドバンスド非同期API | 電話番号に関する完全な情報を受信する。 |
| Client SDK / Conversation API | リアルタイム通信(RTC)イベントは、RTCイベントウェブフックに送信されます。 |
| メッセージと Dispatch API | インバウンドメッセージとメッセージステータスの両方のWebhookをサポートしています。 |
| ベリファイAPI | 検証リクエストに関する最新情報を受信します。 |
ウェブフック・エンドポイントの設定
Webhookは、受信メッセージと配信レシートを配信するために使用されます。
着信メッセージ
受信メッセージに使用するウェブフックを設定するには あなたのナンバーズ セクションをクリックします。バーチャル番号の「edit」をクリックし、以下のように設定します。 コールバックURL.
を使用することもできます。 Vonage CLI をクリックして、個々の番号の着信メッセージのエンドポイントを設定します。
領収書
参照 領収書 のガイドを参照してください。
Number Insight Advanced APIでは、番号検索の結果を同期または非同期で送信できます。
を設定する。 callback 引数を Webhook URL に渡すと、非同期で検索結果を受け取ることができます。
参照 Numbersインサイト・アドバンスド・アシンク をご覧ください。
Voice APIリクエストの場合、Webhookはアプリケーションレベル、コール作成時、またはNCCOのアクションで設定できます。
アプリケーションレベルのウェブフック
VonageアプリケーションにリンクされているVonage Numbersは、VonageアプリケーションにリンクされているVonage Numbersを使用します。 answer_url でNCCOを取得し event_url を使用して、通話ステータス情報を送信します。その fallback_answer_url をオプションで設定できる。これは以下の場合に使用される。 answer_url がオフラインであるか、HTTPエラーコードを返しているとき。また、イベントが event_urlしかし event_url がオフラインであるか、HTTPステータス・コードを返している。
これらの設定は アプリケーションAPIにある。 ダッシュボード または Vonage CLI ツールを使用する。
Numbersレベルのウェブフック
購入した各番号にステータスウェブフックを設定することができます。これは、各番号に関するイベントを送信するために使用されます。
のNumbersセクションで設定できる。 ダッシュボードを経由する。 Vonage CLI または Numbersの更新 APIコール(具体的には voiceStatusCallback プロパティ)。
アウトバウンドコールの作成について
いつ 新規発信を設定する必要があります。 answer_url をNCCOを含むURLにコールします。Vonageのサーバーは、このエンドポイントからNCCOを取得し、その指示に従ってアウトバウンドコールを処理します。
回答URLペイロード
のペイロード。 answer_url である:
URLの例:
/webhooks/answer?to=447700900000&from=447700900001&conversation_uuid=CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab&uuid=aaaaaaaa-bbbb-cccc-dddd-0123456789cd
NCCOの内部
NCCOの内部で、以下のアクションタイプは、そのアクションが実行されるときに使用するためのWebhook URLを取ります:
- レコード.eventUrl - 通話または会話の録音に関する情報を受信するWebhookエンドポイントを設定します。
- 会話.イベントURL - 会話がこの会話アクションの状態を変更したときに、Vonageが非同期に呼び出すWebhookエンドポイントへのURLを設定します。
- connect.eventUrl - 会話がこの接続アクションの状態を変更したときに、Vonageが非同期に呼び出すWebhookエンドポイントへのURLを設定します。
- input.eventUrl - WebhookエンドポイントへのURLを設定する Vonageは、着信者によって押された数字を送信します。
- stream.streamUrl - コールまたは会話にストリーミングするオーディオファイルをホストするWebhookエンドポイントを指すURLの配列を設定する。
ウェブフックのタイムアウト
アンサー、イベント、またはフォールバックURLに一定時間到達できない場合、またはレスポンスタイムが一定限度を超えた場合、Vonageはリクエストを1回再試行します。プラットフォームのデフォルトの接続および読み取りタイムアウトは以下のとおりです:
| ウェブフック・タイプ | 接続タイムアウト | ソケットタイムアウト |
|---|---|---|
| 回答 | 1秒 | 5秒 |
| イベント | 1秒 | 10秒 |
| フォールバック | 1秒 | 5秒 |
これらのデフォルトは アプリケーションAPI または ダッシュボード をクリックします。 編集 ボタンをクリックし、「Capabilities / Voice」セクションまでスクロールします:

これらのタイムアウトに関する詳細は ウェブフック・タイムアウト セクションを参照してください。 概要 ドキュメンテーション
アン アプリケーション を介してRTCイベントを受信できる。 RTCウェブフック.
RTCイベント・ウェブフックのURLは、以下を実行する際に設定します。 アプリケーションを作成する お好きな言語を使ってください。
RTC機能を持つアプリケーションの作成に関する詳細は Applications API ドキュメント.
Verifyは認証リクエストの最新情報をイベントコールバックとサマリーコールバックで送信します。Silent Authentication または WhatsApp Codeless を認証チャンネルとして選択した場合、リクエストを成功させるにはコールバックを受信する必要があります。
コールバックの送信先URLは アプリケーション設定 をご覧ください。を参照してください。 APIリファレンス 例えばコールバック。
Messages and Dispatch API がサポートするウェブフックは、Message Status ウェブフックと Inbound Message ウェブフックの2つです。メッセージステータスは Message Status webhook で受信され、メッセージ自体は Inbound Message webhook で受信されます。これらの webhook の設定については、以下のトピックで詳しく説明しています。 Messages APIとDispatch APIのWebhookを設定する.
ウェブフックの受信
Vonage webhooksと対話する:
- Vonageアカウントを作成する。
- Vonageから送信または要求された情報を処理するスクリプトを記述します。あなたのサーバーは、Vonage からのインバウンドメッセージに対して成功ステータスコード (200 OK から 205 Reset Content までのステータスコード) で応答しなければなりません。を返さなければなりません。
2xxコードは、Vonageサーバーにコールバック配信を再試行させます。 - スクリプトをサーバーにデプロイして公開する(ローカルで開発する場合は ングロク).
- ウェブフック・エンドポイントを設定する を使用したいAPIに追加する。
- そのWebhookをトリガーするアクション(SMSの送信など)を取る。
その後、リクエストに関する情報がWebhookエンドポイントに送信されます。
署名付きウェブフックのデコード
Webhookの署名は デフォルト これらは、Messages API、Dispatch API、Verify API、Voice APIのためのものです。これらは、リクエストがVonageから来ており、そのペイロードが転送中に改ざんされていないことをアプリケーションが確認するための方法を提供します。リクエストを受信する際、受信するWebhookは、あなたの署名シークレットで署名されたJWTトークンを認可ヘッダに含めます。
注:以前に作成された Voice アプリケーションでは、Signed Webhooks はデフォルトでオフになっています。手動でオンにするには、ダッシュボードのアプリケーション設定に移動し、音声機能セクションの「高度な機能を表示」リンクをクリックし、「署名付きWebhook」をオンにします。 署名付きWebhookを使用する チェックする:

また、このチェックで新規アプリケーションをオフにすることもできます(推奨しません。)
署名されたWebhookを検証することで、以下のようなセキュリティ上の利点がある:
- リクエストがVonageから発信されたものであることを確認する機能
- 転送中にメッセージが改ざんされていないことの確認
- インターセプトとリプレーに対するディフェンス
署名付きWebhookの検証
署名されたウェブフックの検証には2つの部分がある:
- リクエストの検証
- ペイロードの検証(オプション)
リクエストの検証
Webhookは、JWTを Authorization ヘッダを使用する。リクエストに署名するためにどの署名秘密が使われたかを特定するために、 JWTクレームに含まれるAPIキーを使用する。リクエストに署名するために使われた秘密は、JWTヘッダーに関連付けられた署名秘密に対応する。 api_key JWTクレームに含まれる。署名の秘密は ダッシュボード.署名の安全性を確保するために、署名の秘密は32ビット以上にすることが推奨される。
注:について signature method ドロップダウンが Messages API ウェブフックの署名に使用されるメソッドに影響することはなく、常に SHA-256 が使用されます。
ペイロードが輸送中に改ざんされていないことを検証する。
リクエストの真正性をVerifyしたら、オプションで、ペイロードのSHA-256 ハッシュを payload_hash フィールドが見つかる。これらが一致しない場合、ペイロードは転送中に改ざんされたことになる。ペイロードをVerifyする必要があるのは、HTTPSではなくHTTPを使用している場合だけです。 MITM攻撃.
注: まれに内部エラーが発生した場合、コールバックサービスが未署名のコールバックを送 信する可能性がある。HTTP 5xx レスポンスを返すことで、再試行がトリガーされ、システムがエラーを解決して今後のコールバックに署名する時間が与えられます。
以下のコード例では、Webhook の署名を Verify する方法を示しています。HTTPS プロトコルを使用することを推奨します。クライアント側とサーバー側の両方でリクエストとレスポンスが暗号化されるからです。
| キー | 説明 |
|---|---|
VONAGE_API_KEY | Your Vonage API key (see it on your dashboard). |
VONAGE_SIGNATURE_SECRET | The secret used to sign the request corresponds to the signature secret associated with the |
Prerequisites
npm install @vonage/jwt expressWrite the code
Add the following to verify-signed-webhook.js:
const app = require('express')();
const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true,
}));
app
.route('/webhooks/inbound-message')
.post(handleInboundMessage);
const handleInboundMessage = (request, response) => {
const token = request.headers.authorization.split(' ')[1];
if (verifySignature(token, VONAGE_API_SIGNATURE_SECRET)) {
console.log('Valid signature');
} else {
console.log('Invalid signature');
}
response.send(200);
};
app.listen(process.env.PORT || 3000);
Run your code
Save this file to your machine and run it:
Prerequisites
composer require vonage/clientCreate a file named verify-signed-webhooks.php and add the following code:
Run your code
Save this file to your machine and run it:
Prerequisites
pip install vonage python-dotenv fastapi[standard]Write the code
Add the following to verify-signed-webhooks.py:
import os
from os.path import dirname, join
from dotenv import load_dotenv
# Load the environment
envpath = join(dirname(__file__), '../.env')
load_dotenv(envpath)
VONAGE_SIGNATURE_SECRET = os.getenv('VONAGE_SIGNATURE_SECRET')
from fastapi import FastAPI, Request
from vonage_jwt.verify_jwt import verify_signature
app = FastAPI()
@app.get('/inbound')
async def verify_signed_webhook(request: Request):
# Need to get the JWT after "Bearer " in the authorization header
auth_header = request.headers["authorization"].split()
token = auth_header[1].strip()
if verify_signature(token, VONAGE_SIGNATURE_SECRET):
print('Valid signature')
else:
print('Invalid signature')Run your code
Save this file to your machine and run it:
署名済みJWTのサンプル
// header
{
"alg": "HS256",
"typ": "JWT",
}
// payload
{
"iat": 1587494962,
"jti": "c5ba8f24-1a14-4c10-bfdf-3fbe8ce511b5",
"iss": "Vonage",
"payload_hash" : "d6c0e74b5857df20e3b7e51b30c0c2a40ec73a77879b6f074ddc7a2317dd031b",
"api_key": "a1b2c3d",
"application_id": "aaaaaaaa-bbbb-cccc-dddd-0123456789ab"
}
署名付きJWTヘッダー
署名付きJWTヘッダーの内容は以下の表に記述されている:
| ヘッダー | 価値 |
|---|---|
alg | HS256 |
typ | JWT |
署名付きJWTペイロード
署名付きJWTペイロードの内容は、先に示した署名付きJWTのサンプルに含まれる値を用いて、以下の表に記述されている:
| フィールド | 値の例 | 説明 |
|---|---|---|
iat | 1587494962 | JWTが発行された時刻。SECONDS単位のUnixタイムスタンプ。 |
jti | c5ba8f24-1a14-4c10-bfdf-3fbe8ce511b5 | JWTの一意なID。 |
iss | Vonage | JWTの発行者。これは常に'Vonage'となる。 |
payload_hash | d6c0e74b5857df20e3b7e51b30c0c2a40ec73a77879b6f074ddc7a2317dd031b | リクエストペイロードのSHA-256ハッシュ。リクエストペイロードと比較することで、リクエストペイロードが転送中に 改竄されていないことを確認できる。 |
api_key | a1b2c3d | 元のリクエストを行ったアカウントに関連付けられた API キー。 |
application_id | aaaaaaaa-bbbb-cccc-dddd-0123456789ab | (アプリケーションを使用した場合、オプション) オリジナルのリクエストを行ったアプリケーションのID。 |
ローカルでウェブフックをテストする
ローカルで実行されているアプリケーションでWebhookが正しく機能することをテストするには、Vonageとアプリケーションの間に安全なトンネルを作成する必要があります。次のようなセキュアトンネルアプリケーションでこれを行うことができます。 ングロク.を参照のこと。 Ngrokを使ったテスト トピックを参照されたい。
ファイアウォールの設定
インバウンドトラフィック(配信レシートを含む)を制限する場合は、ファイアウォールの承認IPアドレスリストにVonage IPアドレスを追加する必要があります。この方法の詳細については、ナレッジベースをご覧ください:
ウェブフックのデバッグのヒント
小さく始める - Webhookを受信したときに応答し、おそらくいくつかのデバッグ情報を表示するために、思いつく限り最小のスクリプトを公開する。これにより、URLがあなたが考えているものであることを確認し、アプリケーションの出力やログを見ることができます。
守備的なコード - 先に進んで使用する前に、データ値が存在し、期待したものを含んでいることを検査してください。あなたのセットアップによっては、予期せぬデータを受け取る可能性があるので、常に心に留めておいてください。
例を見てみよう - Vonageは、できるだけ多くの開発者をサポートするために、いくつかの技術スタックで実装された例を提供しています。Webhooksを使用したコード例については、以下を参照してください:
また、使用しているAPIのドキュメントのコード・スニペット・セクションをチェックすることもできる。
参照
- ウェブフックの種類とアプリケーションの機能についての詳細は 申請書類.