refactor chat delivery to graphql + hatchet services
This commit is contained in:
58
telegram_backend/README.md
Normal file
58
telegram_backend/README.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# telegram_backend
|
||||
|
||||
Ingress/API адаптер Telegram Business.
|
||||
|
||||
## Задача сервиса
|
||||
|
||||
- принимать webhook Telegram и нормализовать payload в envelope;
|
||||
- ставить задачи в Hatchet (`process-telegram-inbound`, `process-telegram-outbound`);
|
||||
- предоставлять GraphQL API:
|
||||
- `enqueueTelegramOutbound` (для `backend`);
|
||||
- `sendTelegramMessage` (для `telegram_worker`).
|
||||
|
||||
Сервис **не** содержит CRM бизнес-логику и не использует Prisma.
|
||||
|
||||
## API
|
||||
|
||||
### `GET /health`
|
||||
Проверка живости сервиса.
|
||||
|
||||
### `POST /webhooks/telegram/business`
|
||||
Прием Telegram Business webhook.
|
||||
|
||||
При активном `TELEGRAM_WEBHOOK_SECRET` ожидается заголовок:
|
||||
|
||||
- `x-telegram-bot-api-secret-token: <TELEGRAM_WEBHOOK_SECRET>`
|
||||
|
||||
### `POST /graphql`
|
||||
|
||||
Мутации:
|
||||
|
||||
- `enqueueTelegramOutbound(input: TelegramOutboundTaskInput!): TaskEnqueueResult!`
|
||||
- `sendTelegramMessage(input: TelegramSendMessageInput!): TelegramSendResult!`
|
||||
|
||||
## Переменные окружения
|
||||
|
||||
- `PORT` (default: `8080`)
|
||||
- `MAX_BODY_SIZE_BYTES` (default: `1048576`)
|
||||
- `TELEGRAM_WEBHOOK_SECRET` (optional, но обязателен для production)
|
||||
- `TELEGRAM_BACKEND_GRAPHQL_SHARED_SECRET` (optional)
|
||||
- `TELEGRAM_BOT_TOKEN` (required для `sendTelegramMessage`)
|
||||
- `TELEGRAM_API_BASE` (default: `https://api.telegram.org`)
|
||||
- `HATCHET_CLIENT_TOKEN` (required)
|
||||
- `HATCHET_CLIENT_TLS_STRATEGY` (optional, например `none` для self-host без TLS)
|
||||
- `HATCHET_CLIENT_HOST_PORT` (optional, например `hatchet-engine:7070`)
|
||||
- `HATCHET_CLIENT_API_URL` (optional)
|
||||
|
||||
## Запуск
|
||||
|
||||
```bash
|
||||
npm ci
|
||||
npm run start
|
||||
```
|
||||
|
||||
## Надежность
|
||||
|
||||
- `200` на webhook возвращается только после успешного enqueue задачи в Hatchet.
|
||||
- При ошибке enqueue сервис возвращает `503`, чтобы Telegram повторил доставку.
|
||||
- Ретраи и оркестрация выполняются в Hatchet worker (`telegram_worker`).
|
||||
Reference in New Issue
Block a user