Webhook送信の内部動作です。
{キー} 形式のプレースホルダが置換される
設定画面 ⚙️ →「API連携」タブから設定します。
管理用の名前。自由に付けてください。
HTTPリクエストを送信するエンドポイントURL。
通常は POST。
HTTPリクエストヘッダー。プレースホルダも使用可能。JSONを送る場合は以下を設定。
送信データの本文。プレースホルダで案件データを埋め込める。
送信タイミング。詳細はトリガーを参照。
リクエストボディとヘッダーの両方で使える変数です。{} で囲んで記述します。
| プレースホルダ | 内容 | 備考 |
|---|---|---|
| {案件名} | 案件名 | {project_name} でも可 |
| {報酬} | 報酬(表示用文字列) | 例: ¥1,000 ※通貨記号・カンマ含む |
| {fee} | 報酬(数値) | 例: 1000 ※JSONの数値フィールド用 |
| {納期} | 納期 | {deadline} でも可 |
| {担当者} | 担当者名 | {assignee} でも可。未アサイン時は空文字 |
| {状態} | ステータス | {status} でも可 |
| {project_id} | 案件ID | 内部管理用の一意なID |
| {channel_id} | チャンネルID | 投稿先チャンネルのID |
{報酬} は「¥1,000」のように通貨記号・カンマを含む表示用の文字列です。JSONの数値フィールドに使うと構文エラーになります。数値が必要な場面では必ず {fee} を使ってください。"amount": {fee} → "amount": 1000 ✅"amount": {報酬} → "amount": ¥1,000 ❌ JSON構文エラー
送信が実行されるタイミングです。
プロジェクトを作成しチャットに投稿したタイミングで発火。この時点では担当者未定のため {担当者} は空文字になります。
ステータスを「完了」にしたタイミングで発火。
担当者を初回アサイン(承認)したタイミングで発火。
3つのトリガーを組み合わせて受け取り側を構築する際の考え方です。
同じ受け取り先に対して3つのトリガーを設定する場合、ボディにどのトリガーで送信されたかを示すフィールド(例: "trigger": "on_create")を含めてください。受け取り側はこの値を見て処理を分岐できます。トリガーごとにAnkenPostで連携を1つずつ作成し、ボディ内のtriggerフィールドの値だけを変えます。
案件作成時のデータをそのまま新しい行として追加します。この時点では {担当者} は空文字(未アサイン)です。
{project_id} をキーにして該当行を検索し、担当者やステータスを上書きします。
{project_id} をキーにして該当行を検索し、ステータスの更新や完了日時の記録を行います。
{project_id}(UUID形式の一意なID)を使って更新対象の行を検索します。ボディには必ず {project_id} を含めてください。
3つのトリガーで共通のフィールド構成を使い、trigger の値だけを変えるのが最もシンプルです。
セキュリティが必要な場合は "secret": "任意の文字列" フィールドを追加し、受け取り側で検証してください(詳しくはGAS連携の注意点を参照)。
利用前に把握しておくべき仕様上の制限です。
送信先がサーバーエラー(5xx)を返した場合やネットワーク障害時、自動で最大3回までリトライします(1秒→2秒→3秒の間隔)。
直近20件の送信履歴を設定画面のAPI連携タブで確認できます。送信日時・連携名・トリガー種別・成否・ステータスコードが記録されます。
自動トリガーによる送信が失敗した場合、アプリ画面にトースト通知が表示されます。
送信先が10秒以内に応答しない場合、失敗として扱われます。
Google Apps Script(GAS)のWebアプリをWebhookの受け口として使う場合に知っておくべき仕様です。
AIにこのページを渡して連携設定を作ってもらう際、以下の情報が正しい設定を得るための前提になります。
AnkenPostは301/302/303リダイレクト時にメソッドをGETに変更し、ボディを破棄します(HTTP仕様準拠)。GASのWebアプリはPOSTに対して302を返しますが、GASはリダイレクトの前(最初のPOST受信時点)でdoPost()を実行しデータを処理します。リダイレクト先はGASの処理結果(ContentService.createTextOutput()の戻り値)を返すだけです。そのため、AnkenPostが302後にGETでリダイレクト先にアクセスしても、GAS側の処理は既に完了しています。
AnkenPostのテスト送信やログに表示されるレスポンスは、リダイレクト先(GETリクエスト)の応答です。GASのdoPost()がContentService.createTextOutput("OK")を返している場合、AnkenPost側には 200 OK とボディ OK が表示されます。
GASのコードを変更しただけでは反映されません。「デプロイを管理」→ 既存デプロイの編集(鉛筆アイコン)→ バージョンを「新しいバージョン」に変更 → デプロイ、という手順が必要です。「新しいデプロイ」を選ぶとURLが変わるため、既存デプロイの更新を使ってください。
GASのWebアプリは、アクセスできるユーザーを「全員」に設定しないとAnkenPostからアクセスできません。「全員」に設定してもスプレッドシート自体は非公開のままです。公開されるのはdoPost()の入口(WebアプリのURL)だけです。
GASのWebアプリURLは「URLを知っていれば誰でもPOSTできる」状態です。機密性の高いデータを扱う場合は、リクエストボディにシークレットキーを含め、GASのdoPost()の冒頭でそのキーを検証して、不正なリクエストを弾くようにしてください。AnkenPost側ではボディテンプレートにシークレットキーのフィールドを追加するだけで対応できます。
GASのWebアプリ(doPost())では、カスタムHTTPヘッダーを取得できません。認証情報はヘッダーではなくリクエストボディに含めてください。AnkenPostのヘッダーに認証トークンを設定しても、GAS側では読み取れません。
案件の作成・アサイン・完了で異なる処理をしたい場合、ボディに "trigger": "on_create" のようなフィールドを含め、GAS側でtriggerの値に応じて処理を分岐させます。AnkenPostでは同じURLに対してトリガー別の連携を複数作成できます。
GASのdoPost()内でエラーが発生しても、AnkenPost側には200が返ることがあります(リダイレクト先がエラー内容をJSONで返すため)。GASの「実行数」メニューからログを確認するか、doPost()内でtry-catchしてエラー内容をContentService.createTextOutput()で返すようにすると、AnkenPostのテスト送信結果にエラー内容が表示されデバッグしやすくなります。
URLが正しいか、送信先がリクエストを受け付ける状態か確認してください。送信先側のアクセス権限の設定も要確認です。
よくある原因:
・数値フィールドに {報酬} を使っている → {fee} に変更
・カンマの付け忘れ、または末尾の余分なカンマ
・全角記号が混ざっている(: → :、" → " など)
GASなどリダイレクトを行うサービスでは、200はリダイレクト先の応答であり、受け取り側の処理が成功したことを必ずしも意味しません。レスポンスボディの内容を確認してください。エラーがJSON形式で返されている場合があります。また、GASではコード変更後に「新しいバージョン」で再デプロイしないと反映されません(詳しくはGAS連携の注意点を参照)。
「案件作成時」トリガーでは担当者が未定のため {担当者} は空文字です。担当者情報が必要なら「アサイン時」トリガーを使ってください。
本機能は、AnkenPostから任意のHTTPエンドポイントへリクエストを送信する「出口」を提供するものです。連携先の構築・設定・運用についてはユーザー側の責任となります。以下をご理解の上でご利用ください。