使い方
アプリで発行した URL に HTTP POST するだけです。このページでは payload の書き方と送信例を説明します。
以下の例の
$TODOKI_URL は、アプリの URL 一覧からコピーしたあなたの Webhook URL(https://hook.todoki.dev/hook/<id> 形式)に置き換えてください。URL 末尾の id が秘密鍵の役割を果たすため、URL は公開リポジトリ等に書かず、CI の secret として扱ってください。
最小の例
curl -X POST "$TODOKI_URL" \
-H 'content-type: application/json' \
-d '{"title":"デプロイ完了","body":"v1.2.3 を本番反映"}'
# => 202 {"ok":true}
JSON を組み立てるのも面倒なら、プレーンテキストを投げるだけでも通知になります(叩くだけモード):
curl -X POST "$TODOKI_URL" -H 'content-type: text/plain' -d 'ビルド終わったよ'
payload フィールド
JSON で送る場合、以下のフィールドが使えます。すべて省略可能です。
| フィールド | 意味 | 例 |
|---|---|---|
title | 通知タイトル | "ビルド失敗" |
body | 本文 | "main ブランチ" |
priority | 優先度。high(即時)/ normal / low | "high" |
click | 通知タップ時に開く URL | "https://example.com/build/123" |
適用の優先順位は「payload の明示フィールド > URL に設定したテンプレート > 既定値」です。
タップで URL を開く
curl -X POST "$TODOKI_URL" -H 'content-type: application/json' \
-d '{"title":"CI 失敗","body":"ログを開く","click":"https://example.com/ci/run/123"}'
緊急度を上げる
curl -X POST "$TODOKI_URL" -H 'content-type: application/json' \
-d '{"title":"アラート","body":"CPU 90%","priority":"high"}'
URL ごとのテンプレート
送信側のサービスが決まった形の JSON を送ってくる場合(例: {"repo":"...","msg":"..."})、URL 側にテンプレートを設定しておけば、送信側は生の JSON を送るだけで整形された通知になります。テンプレートはアプリの URL 設定から登録します。
# URL に設定したテンプレート: {"title":"{{repo}}","body":"{{msg}}"}
curl -X POST "$TODOKI_URL" -H 'content-type: application/json' \
-d '{"repo":"todoki/backend","msg":"build passed"}'
# => 通知: タイトル「todoki/backend」 本文「build passed」
{{a.b}} のようなドット記法でネストした値も参照できます。
CI からの利用例
GitHub Actions
# Webhook URL はリポジトリの Secrets に TODOKI_URL として登録しておく
- name: Notify
if: always()
run: |
curl -sf -X POST "${{ secrets.TODOKI_URL }}" \
-H 'content-type: application/json' \
-d "{\"title\":\"${{ github.repository }}\",\"body\":\"${{ job.status }}: ${{ github.workflow }}\"}"
シェルスクリプト(長時間処理の完了通知)
./long-running-job.sh; \
curl -X POST "$TODOKI_URL" -H 'content-type: text/plain' \
-d "job finished: exit=$?"
レスポンス
| 状況 | コード | body |
|---|---|---|
| 受け付けた | 202 | {"ok":true} |
| URL が再発行で失効済み | 410 | {"error":"url revoked"} |
| URL が存在しない | 404 | {"error":"url not found"} |
セキュリティ上の理由から、応答には配信の詳細(端末への到達結果やミュート状態など)を含めません。202 は「受け付けた」ことを意味します。
URL の管理
- 再発行 — URL が漏れた疑いがあるときは、アプリからワンタップで再発行。旧 URL は即座に失効(
410)します。 - ミュート — URL ごとに通知の ON/OFF を切り替えられます。送信側にはミュートを悟られません(
202のまま)。 - 複数 URL — 用途・サービスごとに URL を分けるのがおすすめです。ラベルを付けて管理できます。