booking-notify について
booking-notifyは、Cal.comの予約を追跡するためのスキルです。定期的なTelegram通知と、任意のPushoverリアルタイム通知を組み合わせます。
主な機能
- 01Telegramへの定期HTML通知
- 02Pushoverによるリアルタイム通知
- 03予約の新規・キャンセル・変更検出
- 04状態保存とAPIエラー時のサーキットブレーカー
活用シーン
- 01新規・キャンセル・変更された予約の確認
- 02開始が近い予約のリマインダー
- 03Pushoverで緊急予約通知を受信
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ terrylica/ cc-skills --skill booking-notifyインストール後、Claude Code で/booking-notifyを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/evolution-log.mdnotification-templates.mdpushover-setup.mdsync-config.mdwebhook-relay.md詳細
予約通知(デュアルチャネル)
2つのチャネルによる予約通知を自動化します。
| チャネル | 配信方法 | 形式 | 用途 |
|---|---|---|---|
| Telegram | スケジュール実行 | HTML | インタラクティブなコマンド、日次ダイジェスト、検索 |
| Pushover | リアルタイム | プレーンテキスト | カスタムサウンド(dune)付きの緊急アラート |
自己進化するスキル:このスキルは使用を通じて改善されます。手順が間違っている場合、パラメーターがずれている場合、または回避策が必要だった場合は、先送りせず、このファイルをすぐに修正してください。実際に再現可能な問題がある場合にのみ更新してください。
必須の事前確認
ステップ 1:同期スクリプトが存在することを確認
ls -la "$HOME/.claude/plugins/marketplaces/cc-skills/plugins/calcom-commander/scripts/sync.ts" 2>/dev/null || echo "SCRIPT_NOT_FOUND"
ステップ 2:環境を確認(必須)
echo "CALCOM_OP_UUID: ${CALCOM_OP_UUID:-NOT_SET}"
echo "TELEGRAM_BOT_TOKEN: ${TELEGRAM_BOT_TOKEN:+SET}"
echo "TELEGRAM_CHAT_ID: ${TELEGRAM_CHAT_ID:-NOT_SET}"
echo "HAIKU_MODEL: ${HAIKU_MODEL:-NOT_SET}"
すべて SET である必要があります。 NOT_SET の項目がある場合は、最初にセットアップコマンドを実行してください。
ステップ 3:Pushover を確認(任意)
echo "PUSHOVER_APP_TOKEN: ${PUSHOVER_APP_TOKEN:+SET}"
echo "PUSHOVER_USER_KEY: ${PUSHOVER_USER_KEY:+SET}"
echo "PUSHOVER_SOUND: ${PUSHOVER_SOUND:-dune}"
echo "WEBHOOK_RELAY_URL: ${WEBHOOK_RELAY_URL:-NOT_SET}"
NOT_SET の場合:Pushover は任意です。Telegram のみでの運用も可能です。有効にするには、pushover-setup.md を参照してください。
ステップ 4:Cal.com CLI バイナリを確認
ls -la "$HOME/.claude/plugins/marketplaces/cc-skills/plugins/calcom-commander/scripts/calcom-cli/calcom" 2>/dev/null || echo "BINARY_NOT_FOUND"
BINARY_NOT_FOUND の場合:ビルドしてください。
cd "$HOME/.claude/plugins/marketplaces/cc-skills/plugins/calcom-commander/scripts/calcom-cli" && bun install && bun run build
通知チャネル
Telegram(スケジュール同期)
launchd による 6 時間ごとのポーリングです。以下の通知を HTML 形式で送信します。
| カテゴリー | 例 |
|---|---|
| 新規予約 | 新しい面接が予定された、新しい相談が予約された |
| キャンセル | 参加者が予約をキャンセルした、ホストがキャンセルした |
| 近日予定 | 1 時間後に予約開始、本日の予定 |
| 再スケジュール | 予約が新しい時間に変更された、日付が変更された |
Pushover(リアルタイム Webhook)
Cloud Run の Webhook リレーを介して即時通知します。
| イベント | 優先度 | サウンド | 確認が必要ですか? |
|---|---|---|---|
| 新規予約 | 2(緊急) | dune | はい |
| 再スケジュール | 2(緊急) | dune | はい |
| キャンセル | 0(通常) | dune | いいえ |
Webhook リレー
Webhook リレーは、Cal.com の Webhook と Pushover を接続する軽量な Cloud Run サービスです。デプロイについては、webhook-relay.md を参照してください。
手動実行
cd ~/gh/<org>/<automation-repo> && bun run "$HOME/.claude/plugins/marketplaces/cc-skills/plugins/calcom-commander/scripts/sync.ts"
同期の動作
- Cal.com API から予約を取得します(過去 6 時間の範囲)。
- 既知の最新状態と比較します(ファイルベース)。
- 新規予約、キャンセル、再スケジュールを検出します。
- 変更ごとに Telegram 通知(HTML)を送信します。
- 認証情報が設定されている場合は、Pushover 通知(プレーンテキスト)を送信します。
- 次回の同期サイクルに備えて状態ファイルを更新します。
- API エラー時の連鎖的な障害を防ぐため、サーキットブレーカーを使用します。
環境設定(特定環境に依存しない配線)
スクリプトは標準の環境変数を読み取ります。launchd デーモンの場合は ~/gh/<org>/<automation-repo>/.env.launchd に設定し(起動スクリプトによって読み込まれます)、対話形式で使用する場合はシェルでエクスポートしてください。
# Required (Telegram)
export CALCOM_OP_UUID='<1password-uuid>'
export TELEGRAM_BOT_TOKEN='<bot-token>'
export TELEGRAM_CHAT_ID='<chat-id>'
# Optional (Pushover dual-channel)
export PUSHOVER_APP_TOKEN='<pushover-app-token>'
export PUSHOVER_USER_KEY='<pushover-user-key>'
export PUSHOVER_SOUND='dune'
export WEBHOOK_RELAY_URL='https://calcom-pushover-webhook-XXXXX.us-central1.run.app/'
参考資料
- notification-templates.md — デュアルチャネルのメッセージテンプレート
- pushover-setup.md — Pushover 認証情報のセットアップガイド
- webhook-relay.md — Webhook リレーのデプロイと管理
- sync-config.md — 同期間隔と状態管理
変更後のチェックリスト
- YAML フロントマターが有効(description にコロンがない)
- トリガーキーワードが最新である
- パスパターンでハードコードされたパスではなく $HOME を使用している
- Pushover のグレースフルデグラデーションを確認済み(Pushover の認証情報がなくても動作する)
実行後の振り返り
このスキルの実行後、タスクを終える前に振り返ります。
- 現在地を確認します。 — 編集する前に、この SKILL.md の正規パスを特定します。
- 何が失敗しましたか? — 原因となった指示を修正します。
- 予想以上にうまくいったことは何ですか? — 推奨プラクティスにします。
- 何にずれがありましたか? — 現状と合わなくなったスクリプト、参照、依存関係を修正します。
- 記録します。 — 発生のきっかけ、修正内容、根拠を含む進化ログのエントリーを追加します。
先延ばしにしないでください。次回の実行では、ここに残した内容が引き継がれます。