API連携リファレンス

AnkenPostのWebhook送信機能の仕様リファレンスです。
このページの内容をAIチャットにコピーすれば、連携設定を作ってもらえます。

※ 本機能はHTTPリクエストの送信口を提供する汎用機能です。連携先の設定・運用はユーザーの責任で行ってください。

送信仕様

Webhook送信の内部動作です。

  • 送信元 アプリのメインプロセス(デスクトップアプリ本体)から直接送信。CORS制約なし
  • プロトコル HTTP / HTTPS
  • タイムアウト 10秒
  • リトライ サーバーエラー(5xx)やネットワーク障害時に最大3回(1秒→2秒→3秒間隔)
  • リダイレクト 301/302/303/307/308を自動追従(最大5回)
  • 送信ログ 直近20件を保存。設定画面のAPI連携タブで確認可能
  • エラー通知 自動トリガーによる送信失敗時にトースト通知を表示
  • テンプレート展開 リクエストボディとヘッダーの両方で {キー} 形式のプレースホルダが置換される
  • 戻り値 ステータスコード・レスポンスボディ(テスト送信時に表示)

設定項目

設定画面 ⚙️ →「API連携」タブから設定します。

1

連携名

管理用の名前。自由に付けてください。

2

送信先URL

HTTPリクエストを送信するエンドポイントURL。

3

HTTPメソッド

通常は POST

4

ヘッダー(任意)

HTTPリクエストヘッダー。プレースホルダも使用可能。JSONを送る場合は以下を設定。

Content-Type: application/json
5

リクエストボディ

送信データの本文。プレースホルダで案件データを埋め込める。

{ "project_name": "{案件名}", "fee": {fee}, "deadline": "{納期}", "assignee": "{担当者}", "status": "{状態}" }
6

トリガー

送信タイミング。詳細はトリガーを参照。

💡 テスト送信: 保存前に「テスト」ボタンで実際にリクエストを送信できます。ステータスコードとレスポンスがその場で確認できるので、必ずテストしてから保存してください。

プレースホルダ一覧

リクエストボディとヘッダーの両方で使える変数です。{} で囲んで記述します。

プレースホルダ 内容 備考
{案件名} 案件名 {project_name} でも可
{報酬} 報酬(表示用文字列) 例: ¥1,000 ※通貨記号・カンマ含む
{fee} 報酬(数値) 例: 1000 ※JSONの数値フィールド用
{納期} 納期 {deadline} でも可
{担当者} 担当者名 {assignee} でも可。未アサイン時は空文字
{状態} ステータス {status} でも可
{project_id} 案件ID 内部管理用の一意なID
{channel_id} チャンネルID 投稿先チャンネルのID
⚠️ {報酬} と {fee} の使い分け: {報酬} は「¥1,000」のように通貨記号・カンマを含む表示用の文字列です。JSONの数値フィールドに使うと構文エラーになります。数値が必要な場面では必ず {fee} を使ってください。

"amount": {fee}"amount": 1000
"amount": {報酬}"amount": ¥1,000 ❌ JSON構文エラー

トリガー

送信が実行されるタイミングです。

1

案件作成時(on_create)

プロジェクトを作成しチャットに投稿したタイミングで発火。この時点では担当者未定のため {担当者} は空文字になります。

2

案件完了時(on_complete)

ステータスを「完了」にしたタイミングで発火。

3

アサイン時(on_assign)

担当者を初回アサイン(承認)したタイミングで発火。

💡 複数連携: 異なるトリガーで複数の連携を作成できます。同じURLに対して「作成時」と「完了時」で別のボディを送ることも可能です。

推奨設計パターン

3つのトリガーを組み合わせて受け取り側を構築する際の考え方です。

ボディにトリガー種別を含める

同じ受け取り先に対して3つのトリガーを設定する場合、ボディにどのトリガーで送信されたかを示すフィールド(例: "trigger": "on_create")を含めてください。受け取り側はこの値を見て処理を分岐できます。トリガーごとにAnkenPostで連携を1つずつ作成し、ボディ内のtriggerフィールドの値だけを変えます。

処理の分岐パターン

作成

on_create → 新規行の追加

案件作成時のデータをそのまま新しい行として追加します。この時点では {担当者} は空文字(未アサイン)です。

更新

on_assign → 既存行の更新(担当者)

{project_id} をキーにして該当行を検索し、担当者やステータスを上書きします。

完了

on_complete → 既存行の更新(完了)

{project_id} をキーにして該当行を検索し、ステータスの更新や完了日時の記録を行います。

⚠️ project_id が行の特定キーになります: on_assign / on_complete では、on_create 時に記録した {project_id}(UUID形式の一意なID)を使って更新対象の行を検索します。ボディには必ず {project_id} を含めてください。

推奨するボディ構造

3つのトリガーで共通のフィールド構成を使い、trigger の値だけを変えるのが最もシンプルです。

{ "trigger": "on_create", "project_id": "{project_id}", "project_name": "{案件名}", "fee": {fee}, "deadline": "{納期}", "assignee": "{担当者}", "status": "{状態}" }

セキュリティが必要な場合は "secret": "任意の文字列" フィールドを追加し、受け取り側で検証してください(詳しくはGAS連携の注意点を参照)。

制限事項

利用前に把握しておくべき仕様上の制限です。

自動リトライ

送信先がサーバーエラー(5xx)を返した場合やネットワーク障害時、自動で最大3回までリトライします(1秒→2秒→3秒の間隔)。

送信ログ

直近20件の送信履歴を設定画面のAPI連携タブで確認できます。送信日時・連携名・トリガー種別・成否・ステータスコードが記録されます。

エラー通知

自動トリガーによる送信が失敗した場合、アプリ画面にトースト通知が表示されます。

!

タイムアウト10秒

送信先が10秒以内に応答しない場合、失敗として扱われます。

GAS連携の注意点

Google Apps Script(GAS)のWebアプリをWebhookの受け口として使う場合に知っておくべき仕様です。
AIにこのページを渡して連携設定を作ってもらう際、以下の情報が正しい設定を得るための前提になります。

AnkenPost側の仕様(AIへの補足情報)

1

リダイレクト追従の挙動

AnkenPostは301/302/303リダイレクト時にメソッドをGETに変更し、ボディを破棄します(HTTP仕様準拠)。GASのWebアプリはPOSTに対して302を返しますが、GASはリダイレクトの前(最初のPOST受信時点)でdoPost()を実行しデータを処理します。リダイレクト先はGASの処理結果(ContentService.createTextOutput()の戻り値)を返すだけです。そのため、AnkenPostが302後にGETでリダイレクト先にアクセスしても、GAS側の処理は既に完了しています。

2

レスポンスの見え方

AnkenPostのテスト送信やログに表示されるレスポンスは、リダイレクト先(GETリクエスト)の応答です。GASのdoPost()ContentService.createTextOutput("OK")を返している場合、AnkenPost側には 200 OK とボディ OK が表示されます。

GAS側で詰まりやすいポイント

!

デプロイのバージョン

GASのコードを変更しただけでは反映されません。「デプロイを管理」→ 既存デプロイの編集(鉛筆アイコン)→ バージョンを「新しいバージョン」に変更 → デプロイ、という手順が必要です。「新しいデプロイ」を選ぶとURLが変わるため、既存デプロイの更新を使ってください。

!

アクセス権限は「全員」

GASのWebアプリは、アクセスできるユーザーを「全員」に設定しないとAnkenPostからアクセスできません。「全員」に設定してもスプレッドシート自体は非公開のままです。公開されるのはdoPost()の入口(WebアプリのURL)だけです。

!

セキュリティ(シークレットキー)

GASのWebアプリURLは「URLを知っていれば誰でもPOSTできる」状態です。機密性の高いデータを扱う場合は、リクエストボディにシークレットキーを含め、GASのdoPost()の冒頭でそのキーを検証して、不正なリクエストを弾くようにしてください。AnkenPost側ではボディテンプレートにシークレットキーのフィールドを追加するだけで対応できます。

!

GASのヘッダー制限

GASのWebアプリ(doPost())では、カスタムHTTPヘッダーを取得できません。認証情報はヘッダーではなくリクエストボディに含めてください。AnkenPostのヘッダーに認証トークンを設定しても、GAS側では読み取れません。

!

複数トリガーの運用

案件の作成・アサイン・完了で異なる処理をしたい場合、ボディに "trigger": "on_create" のようなフィールドを含め、GAS側でtriggerの値に応じて処理を分岐させます。AnkenPostでは同じURLに対してトリガー別の連携を複数作成できます。

!

doPost()のエラーが見えにくい

GASのdoPost()内でエラーが発生しても、AnkenPost側には200が返ることがあります(リダイレクト先がエラー内容をJSONで返すため)。GASの「実行数」メニューからログを確認するか、doPost()内でtry-catchしてエラー内容をContentService.createTextOutput()で返すようにすると、AnkenPostのテスト送信結果にエラー内容が表示されデバッグしやすくなります。

トラブルシューティング

?

テスト送信が失敗する

URLが正しいか、送信先がリクエストを受け付ける状態か確認してください。送信先側のアクセス権限の設定も要確認です。

?

JSON構文エラー

よくある原因:

・数値フィールドに {報酬} を使っている → {fee} に変更
・カンマの付け忘れ、または末尾の余分なカンマ
・全角記号が混ざっている(:"" など)

?

200が返るが連携先に反映されない

GASなどリダイレクトを行うサービスでは、200はリダイレクト先の応答であり、受け取り側の処理が成功したことを必ずしも意味しません。レスポンスボディの内容を確認してください。エラーがJSON形式で返されている場合があります。また、GASではコード変更後に「新しいバージョン」で再デプロイしないと反映されません(詳しくはGAS連携の注意点を参照)。

?

担当者が空になる

「案件作成時」トリガーでは担当者が未定のため {担当者} は空文字です。担当者情報が必要なら「アサイン時」トリガーを使ってください。

💡 LLMの活用: このページの内容をコピーしてAIチャットに貼り付ければ、AnkenPostの仕様を踏まえた上で連携先の設定やJSONボディの生成を手伝ってもらえます。エラーが出た場合もエラー内容と一緒に渡せば修正案を出してくれます。
↑ ページの先頭に戻る
← 使い方ガイドに戻る

免責事項

本機能は、AnkenPostから任意のHTTPエンドポイントへリクエストを送信する「出口」を提供するものです。連携先の構築・設定・運用についてはユーザー側の責任となります。以下をご理解の上でご利用ください。

  • 機能の範囲 AnkenPostはHTTPリクエストの送信のみを行います。連携先でのデータ処理・保存・表示はすべて連携先の責任です。
  • データ送信 送信されたデータの内容・送信先の正当性はユーザーの責任で管理してください。誤った送信先への送信や意図しないデータ漏洩について、AnkenPostは責任を負いません。
  • 送信の信頼性 自動リトライ(最大3回)を行いますが、送信の成功を完全に保証するものではありません。重要なデータの連携には、送信先側でも受信確認の仕組みを用意することを推奨します。
  • 連携先のトラブル 連携先サービスの障害・仕様変更・API制限・認証エラー等に起因するトラブルについて、AnkenPostは一切関与しません。
  • セキュリティ Webhook設定(URL・ヘッダー・ボディテンプレート)はアプリの設定ファイルにローカル保存されます。認証トークンやシークレットキーを含める場合、その管理はユーザーの責任です。
  • サポート範囲 AnkenPostのサポートはアプリ本体の不具合に限定されます。連携先の設定方法・JSONの書き方・送信先サービスの使い方に関するお問い合わせには対応できません。
⚠️ 自己責任でご利用ください。 本機能はJSONやHTTPの基礎知識をお持ちの方、またはAIチャットを活用して設定を作成できる方を対象としています。設定ミスによる意図しない動作・データ損失・外部サービスへの影響について、AnkenPostは責任を負いかねます。