Telegram Webhookによるボット操作機能を追加(課題の追加・完了・一覧・スヌーズ対応)
This commit is contained in:
@@ -226,8 +226,65 @@ REST API認証用のAPIキーを管理するモデル。
|
||||
| 重要度「中」 | **30分**ごとに通知 |
|
||||
| 重要度「小」 | **60分**ごとに通知 |
|
||||
| 停止条件 | 課題の完了ボタンを押すまで継続 |
|
||||
| Inline keyboard | 督促通知にボタンを付与: ✅完了 / ⏰15分後 / 💬今やってる |
|
||||
|
||||
#### 4.4.3 通知チャンネル
|
||||
#### 4.4.3 Telegram Bot 双方向操作
|
||||
|
||||
Telegram Bot への直接メッセージで課題の登録・確認・完了が可能。
|
||||
|
||||
**エンドポイント**: `POST /api/telegram/webhook`
|
||||
|
||||
**コマンド一覧**:
|
||||
|
||||
| コマンド | 形式 | 説明 |
|
||||
|----------|------|------|
|
||||
| `/add` | `/add <タイトル> <日付> [時刻] [#科目] [!優先度]` | 課題を追加(登録後60秒以内は取り消しボタン付き) |
|
||||
| `/list` | `/list` | 未完了課題を期限昇順で最大5件表示(全件数も表示) |
|
||||
| `/done` | `/done <ID>` | 課題を完了にする(IDは/listの#番号) |
|
||||
| `/help` | `/help` | コマンド一覧と使い方を表示 |
|
||||
|
||||
**日付パターン**:
|
||||
|
||||
| 入力 | 解釈 |
|
||||
|------|------|
|
||||
| `今日` / `明日` / `明後日` | 当日・翌日・翌々日 |
|
||||
| `月` `火` `水` `木` `金` `土` `日` | 次回その曜日(当日なら当日) |
|
||||
| `1/15` / `1月15日` | 今年のその日(過去なら翌年) |
|
||||
|
||||
時刻形式: `23:59` / `17時` / `17時30分`(省略時: `23:59`)
|
||||
|
||||
**督促通知 inline keyboard ボタン動作**:
|
||||
|
||||
| ボタン | 動作 |
|
||||
|--------|------|
|
||||
| ✅ 完了 | 課題を完了済みにし、キーボードを削除 |
|
||||
| ⏰ 15分後 | 次回督促を15分後に延期 |
|
||||
| 💬 今やってる | 次回督促を1時間後に延期 |
|
||||
|
||||
**認証**: `X-Telegram-Bot-Api-Secret-Token` ヘッダーを `telegram_webhook_secret` と定数時間比較で検証する(必須・スキップ不可)。`telegram_bot_token` と `telegram_webhook_secret` の両方が設定されている場合のみ `POST /api/telegram/webhook` ルートが登録される。Telegramの個人チャットでは `chat.id` がユーザーIDと等しく秘匿性のない数値であるため、secretを必須化しないとchat_idを知る/推測する第三者が他人になりすましてコマンドを実行できてしまう。
|
||||
|
||||
**セットアップ手順** (初回のみ):
|
||||
|
||||
1. **Bot作成**: Telegramで [@BotFather](https://t.me/BotFather) に `/newbot` を送り、Bot Token (`123456:ABC-...`) を取得します。
|
||||
|
||||
2. **config.ini に設定**:
|
||||
```ini
|
||||
[notification]
|
||||
telegram_bot_token = 123456:ABC-...
|
||||
telegram_webhook_secret = 任意のランダム文字列
|
||||
```
|
||||
|
||||
3. **Webhook登録** (サーバー起動後、一度だけ実行):
|
||||
```
|
||||
https://api.telegram.org/bot<TOKEN>/setWebhook?url=https://your-domain/api/telegram/webhook&secret_token=<SECRET>
|
||||
```
|
||||
`<TOKEN>` と `<SECRET>` は上記 config.ini の値と一致させてください。
|
||||
|
||||
4. **ユーザー側のChat ID登録**: ユーザーはBotに任意のメッセージを送り、アプリの **プロフィール画面 → 通知設定** で自分のChat IDを入力して有効化します。Chat IDの確認方法: [@userinfobot](https://t.me/userinfobot) に `/start` を送ると表示されます。
|
||||
|
||||
> **必須**: `telegram_bot_token` を設定する場合は `telegram_webhook_secret` も必ず設定してください。未設定のまま `telegram_bot_token` だけを設定して起動しようとすると、安全のため起動に失敗します(Webhookルート自体も登録されません)。
|
||||
|
||||
#### 4.4.4 通知チャンネル
|
||||
|
||||
| チャンネル | 設定方法 |
|
||||
|------------|----------|
|
||||
@@ -329,6 +386,7 @@ type = image
|
||||
| `security` | `rate_limit_window` | 期間(秒) | `60` |
|
||||
| `security` | `trusted_proxies` | 信頼するプロキシ | - |
|
||||
| `notification` | `telegram_bot_token` | Telegram Bot Token | - |
|
||||
| `notification` | `telegram_webhook_secret` | Webhookシークレットトークン | - |
|
||||
| `captcha` | `enabled` | CAPTCHA有効化 | `false` |
|
||||
| `captcha` | `type` | CAPTCHAタイプ (`image` or `turnstile`) | `image` |
|
||||
| `captcha` | `turnstile_site_key` | Cloudflare Turnstile サイトキー | - |
|
||||
@@ -355,6 +413,7 @@ type = image
|
||||
| `HTTPS` | HTTPSモード (`true`/`false`) |
|
||||
| `TRUSTED_PROXIES` | 信頼するプロキシ |
|
||||
| `TELEGRAM_BOT_TOKEN` | Telegram Bot Token |
|
||||
| `TELEGRAM_WEBHOOK_SECRET` | Webhookシークレットトークン |
|
||||
| `CAPTCHA_ENABLED` | CAPTCHA有効化 (`true`/`false`) |
|
||||
| `CAPTCHA_TYPE` | CAPTCHAタイプ (`image`/`turnstile`) |
|
||||
| `TURNSTILE_SITE_KEY` | Cloudflare Turnstile サイトキー |
|
||||
|
||||
Reference in New Issue
Block a user