Задача: Добавление внешнего источника сообщений (собственный чат на сайте) в сервис Telegram-демона #1
Labels
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: Public/TgRouting#1
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Задача: Добавление внешнего источника сообщений (собственный чат на сайте) в сервис Telegram-демона
1. Цель
Расширить текущий сервис приёма/отправки сообщений (TelegramBot + RabbitMQ) так, чтобы он принимал входящие сообщения не только из Telegram, но и из веб-чата на сайте. Также нужно подготовить демонстрационную страницу и библиотеку для фронтенда, позволяющую легко интегрировать чат.
2. Бэкенд
Новый источник сообщений
Создать сущность
WebChat(аналогичноExternalBot) в базе через Prisma.id,name,secretKey,createdAt,updatedAt.Для каждого
WebChatподнимать очереди:InMessageWebChat{name}OutMessageWebChat{name}SessionQueueWebChat{name}Логика работы очередей аналогична Telegram-ботам:
InMessage— принимает сообщения от сайта → отправляет их вhandleIncomingMessage.OutMessage— из демона наружу (ответы в веб-чат через WebSocket / SSE).SessionQueue— управление блокировкой/разблокировкой сессий.Обработка сообщений
Дополнить
main()так, чтобы при запуске:WebChatиз базы.processUpdate→handleIncomingMessage(ctx).В
ctxдля веб-чата пробрасывать:update— объект сообщения с сайта (JSON).ext— объектWebChat.bot— заглушка (без_request).prisma,allBots.Отправка ответов в веб-чат
channel.consume(OutMessageWebChat…)и передавать сообщения в веб-клиент через WebSocket (или SSE).{ userId, text, buttons?, files? }.3. Фронтенд (демонстрационная страница)
Демо-страница
Простая SPA (React или Vue) с полем ввода, историей чата и WebSocket-подключением.
UI: блок сообщений (слева — от бота, справа — от пользователя).
Сообщения сохраняются в localStorage (при обновлении страницы история подтягивается).
При отправке сообщения:
{ userId, text }.InMessageWebChat.При получении ответа:
localStorage.Библиотека для интеграции
Вынести чат в npm-пакет или модуль (например,
@vidi/webchat-client).Возможности:
<WebChat clientKey="..." />).Предусмотреть события (
onMessage,onConnect,onDisconnect).Уникальный userId
На фронте:
localStorage.Дополнительно:
userId + ipHash(sha256(IP + secretKey)).userIdи хэша IP → защита от подмены.4. Требования по безопасности
Все запросы из фронта должны содержать
secretKeyчата (как заголовок или параметр WebSocket).Проверка на сервере:
secretKey.userId + ipHash.Логику подмены обрабатывать: при несоответствии создавать новую сессию.
5. Результат
@kinsalex - оценил задачу на 2 дня.

@mleontev - оценил задачу на 2дня.
Срок на задачу 2 дня.
@oleghasanov999 для тебя выделено на реализацию этой задачи 24 рабочих часа.