トピックのサブスクライバとして Webhook を使用する
トピックにメッセージが公開されたときに、アプリケーションの subscriberTrigger エンドポイントとして webhook を使用します。イベントが公開されるたびに、Momento は設定されているすべての webhook とトピックに登録されているその他の購読者に POST リクエストを送信します。
なぜWebhookを使うのか?
Momento SDKを使用してトピックを購読する場合、アプリケーションコードとMomentoサービスの間に永続的な接続が設定されます。これは、標準的なサブスクリプションをステートフルなものにします。つまり、サブスクライバは常にオンでなければならず、メッセージを発行または受信するために利用可能でなければなりません。ブラウザやコンテナのようなサブスクライバは、この環境では信じられないほどうまく動作するが、Lambda関数やGoogle Cloud Runサービスのようなステートレスなコンピュートには運がなかったことになります。
Webhookを使えば、どんなタイプのコンピュートでもイベントを受信するようにサブスクライブできます。Webhookはアクティブな接続を維持しないので、エンドポイントの後ろにサーバーレス関数を置くことができます!
サブスクライバーとしてWebhookを使用することは、データベースのような耐久性のあるストレージへのメッセージの永続化、リージョン間でのデータの複製、さらにはチャットに翻訳やモデレーションの ような仲介サービスを追加するような非同期イベントに最適です。
トピックはステートフル・サブスクリプションとウェブフックの両方を持つことができるます。これにより、いつでも、どこからでも、好きなものを接続することができます!
ウェブフックイベント
イベントがトピックに公開されると、Momentoはイベントペイロードに加えて、イベントに関するメタデータを含むリクエストを生成します。セキュリティを強化するために、このリクエストには追加のヘッダが含まれます。
イベント例
以下は、チャットルームで送信されるメッセージを表すペイロードのサンプルです。これはテンプレートであり、具体的な値は実装によって異なることに注意してください。
{
"cache": "chat",
"topic": "room-281",
"event_timestamp": 1704296470564,
"publish_timestamp": 1704296470565,
"topic_sequence_number": 1,
"token_id": "mo-the-squirrel",
"text": "Here I am!!"
}
イベント構成
ウェブフック・イベントのプロパティを、それらが提供する機能とともに以下に示します。
cache
トピックが属するキャッシュの名前。これは、Momento トピックの名前空間として使用されます。すべてのトピックは、アカウントの有効なキャッシュに公開する必要があります。
topic
Webhook をトリガーしたトピックの名前。トピック名は動的であり、Momento アカウントのリソースではないことを忘れないでください。メッセージを任意の文字列に発行できるので、ワークフローのトピック名として変数を使用するなど、メッセージに驚くほどの柔軟性が加わります。
event_timestamp
イベントが公開されたUnix Epochからのミリ秒単位のタイムスタンプ。
publish_timestamp
Webhook が発行された Unix Epoch からのミリ秒単位のタイムスタンプ。この値から event_timestamp
の値を引くことで、メッセージ配信のサーバー側の待ち時間を知ることができます。上の例では、配信遅延は1ミリ秒でした。
topic_sequence_number
トピックのメッセージ番号。メッセージが公開されると topic_sequence_number
がインクリメントされます。これは順番を決定するために使うことができます。Momentoはイベント配信の順番を保証しません。
token_id
tokenの一意な識別子。Momento の AuthClient
を使ってトークンを作成する際に、Momento Topics に公開されるすべてのイベントに渡される識別子を指定できます。詳細はこちら。
text
トピックに公開されたイベントの内容。このプロパティの内容は発行者によって提供され、Momentoによって生成されるものではありません。
Headers
各リクエストには、Momentoが提供する2つの特定のヘッダーが含まれ、インテグレーターは送信者の真正性を確認できます。
Momento-Signature
リクエストペイロードの署名で、Webhookをセットアップするときに指定したシークレットで署名され、リクエストの完全性と発信元を検証するために使用されます。受信リクエストの検証については、webhook セキュリティページ をチェックしてください。
User-Agent
リクエストの送信元を識別するために Momento が送信する静的ヘッダで、Momento/1.0 (Webhooks; +https://docs.momentohq.com/topics/webhooks)
という形式を持ちます。
Event delivery
Momentoはイベントをあなたのウェブフックに1回配信しようとします。イベントがエンドポイントで受信されなかった場合、パブリッシャーは再度メッセージを送信する必要があります。
自動再送信されない配信の失敗は、以下のいずれかの理由による可能性があります:
- 2XX以外のレスポンス(400、403、500など)。
- 5秒たっても反応がない。
- エンドポイントへの接続エラー。
- レートの制限を超えている(デフォルトの制限を参照)。
API calls for Webhooks
私たちのSDKを使用してプログラムでwebhookを設定することに興味がありますか?webhooksのAPIリファレンスページをご覧ください。