Webhookとは、何かが起きた瞬間にあるアプリが別のアプリへ送るメッセージです。しくみ、検証方法、sona.toが送る内容を解説します。
Webhookとは、何かが起きた瞬間にあるアプリが別のアプリへ送るメッセージで、受け取る側が何度も問い合わせる必要がなくなります。最初のアプリにアドレスを伝えておくと、イベントが起きるたびにその詳細がすぐにそこへ送られます。このガイドでは、Webhookのしくみ、Webhookが本物かを確かめる方法、sona.toが送る内容を説明します。Webhooksのページにも概要があります。
Webhookとは?
多くのアプリは、2つの方法でデータをやり取りします。APIでは、こちらのシステムが「投稿はもう公開された?」と尋ね、答えがまだなら後でもう一度尋ねます。Webhookでは、アプリのほうから知らせます。投稿が公開されると、あなたが選んだアドレスへ、投稿の詳細を付けてリクエストを送ります。
つまりWebhookは、あなたが管理するURLに送られるHTTPリクエストで、たいていはJSONの本文を持つPOSTです。そのURLは自社のサーバーでも、n8n、Zapier、Make、Slackなど、リクエストが届くとワークフローを始めるサービスが発行するWebhookのアドレスでもかまいません。
WebhookとAPIの違い
APIは尋ねたり変更したりするためのものです。投稿を一覧にする、投稿を作成する、数値を取得する、といった操作です。Webhookは知らせを受けるためのものです。多くの連携は両方を使います。投稿の作成にはAPIを、公開されたか失敗したかを知るにはWebhookを使います。APIに何度も尋ねるとリクエストが無駄になり、それでも知るのが遅れますが、Webhookはイベントが起きるとすぐに届きます。
Webhookを検証する方法
Webhookのアドレスを知っている人なら誰でも偽のリクエストを送れるので、きちんと作られたWebhookには署名があります。送信側は本文と共有シークレットから、たいていはHMAC SHA-256で署名を計算し、ヘッダーに入れます。受信側は同じシークレットで同じ署名を計算し、定数時間比較で2つを比べます。一致しなければ、リクエストは無視します。
署名するデータにタイムスタンプを含めると、リプレイ攻撃も防げます。一度傍受されたリクエストは、タイムスタンプが古すぎるので後から送り直せません。
sona.toのWebhook
sona.toは4つのイベントでWebhookを送ります。投稿の公開、投稿の失敗、サイト監査の完了、サイト監査の失敗です。Webhookごとに受け取るイベントを選べるので、チャットへの通知は失敗だけを受け取り、レポート用のシートはすべてを受け取る、といった使い分けができます。ペイロードのフィールド名はsona.toのAPIと同じです。
設定方法。ダッシュボードのAPIページでアドレスを貼り付け、イベントにチェックを入れて保存します。署名用のシークレットはその時に一度だけ表示されるので、その場でコピーしてください。
署名。どの配信にも、タイムスタンプと、タイムスタンプと本文のHMAC SHA-256をあなたのシークレットで計算した値を含むヘッダーが付きます。タイムスタンプが数分以上前のリクエストは拒否してください。
再試行。アドレスが停止中かエラーを返した場合、配信は60秒後、5分後、30分後に再試行されます。すべての試行は、ステータスコードと所要時間と一緒に記録されます。失敗が続くアドレスは無効になり、直った後で再び有効にできます。
安全性。アドレスはhttpsを使い、公開サーバーを指している必要があります。プライベートネットワーク上のアドレスは保存時と配信時の両方で拒否され、リダイレクトはたどりません。
n8n、Zapier、MakeでのWebhook
n8n、Zapier、Make向けのsona.toアプリには、同じ4つのイベント用のトリガーが用意されているので、自分でアドレスを貼り付ける必要はありません。トリガーを追加すれば、アプリがWebhookを設定します。n8n、Zapier、MakeでのSNS自動化をご覧ください。
署名チェックの例を含む詳細は、APIドキュメントにあります。
よくある質問
WebhookはAPIと同じですか?
違います。APIは尋ねた時に答えます。Webhookは何かが起きた時にメッセージを送ってきます。
sona.toのWebhookは無料ですか?
Webhookは、APIと同じく全プランに含まれています。
サーバーが止まっていたらどうなりますか?
sona.toは約30分の間に3回再試行します。配信の失敗が続くと、あなたが再び有効にするまでWebhookは無効になります。
試してみませんか?
無料で始められます。クレジットカードは不要です。