feat(telegram): add webhook support and ordered message queue
Introduce webhook mode for the Telegram channel and implement a session-based message reordering mechanism.
Key changes:
- Update `python-telegram-bot` dependency to include the `webhooks` extra.
- Add `TelegramConfig` fields for webhook configuration, with validation rules for public HTTPS URLs and Telegram's secret token.
- Implement `_enqueue_ordered_update` and `_drain_ordered_updates` in `TelegramChannel` to stage incoming messages and commands behind a short per-session reorder
window, ensuring sequential delivery based on message and update IDs.
- Configure `start_webhook` in `TelegramChannel.start()` when webhook mode is enabled.
- Add unit tests for webhook config validations, webhook startup, and message reordering.
- Document webhook configuration and reverse proxy details in `docs/chat-apps.md`.
This commit is contained in:
@@ -51,6 +51,43 @@ Connect nanobot to your favorite chat platform. Want to build your own? See the
|
||||
nanobot gateway
|
||||
```
|
||||
|
||||
**Webhook mode (optional)**
|
||||
|
||||
Telegram uses long polling by default. To receive updates through a webhook, expose
|
||||
a public HTTPS URL that forwards to nanobot's local listener and set `mode` to
|
||||
`webhook`:
|
||||
|
||||
```json
|
||||
{
|
||||
"channels": {
|
||||
"telegram": {
|
||||
"enabled": true,
|
||||
"token": "YOUR_BOT_TOKEN",
|
||||
"mode": "webhook",
|
||||
"webhookUrl": "https://example.com/telegram",
|
||||
"webhookListenHost": "127.0.0.1",
|
||||
"webhookListenPort": 8081,
|
||||
"webhookPath": "/telegram",
|
||||
"webhookSecretToken": "CHANGE_ME_RANDOM_SECRET",
|
||||
"webhookMaxConnections": 4,
|
||||
"allowFrom": ["YOUR_USER_ID"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
> `webhookSecretToken` is required in webhook mode. Do not expose the local
|
||||
> webhook listener directly to the public internet without a reverse proxy or
|
||||
> tunnel in front of it. TLS/Host policy is handled by your proxy; nanobot only
|
||||
> listens on `webhookListenHost:webhookListenPort` and validates Telegram's
|
||||
> webhook secret token. `webhookMaxConnections` defaults to `4`; nanobot
|
||||
> still serializes Telegram updates per conversation before forwarding them to
|
||||
> the agent.
|
||||
>
|
||||
> `webhookUrl` is the public HTTPS URL registered with Telegram.
|
||||
> `webhookPath` is the local path nanobot listens on. They often use the same
|
||||
> path, but may differ when a reverse proxy or tunnel rewrites the request path.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
||||
Reference in New Issue
Block a user