Добавить новость

3 человека пострадали при хлопке газа на стройрынке «Славянский мир» в Москве

Вскрыли сейф с помощью отверток: квартиру певицы и актрисы Юлии Паршуты обокрали в Москве

Спикер Госдумы Володин поздравил россиян с Рождеством

Politico: «черным лебедем» 2025 года может стать альянс Трампа и Си Цзиньпина





Новости сегодня

Новости от TheMoneytizer

Python (FastAPI) интеграция Telegram и Webim через Custom Channel


1. Цель и общее описание

Необходимо создать сервис, который будет:

  1. Принимать входящие сообщения от Telegram-бота (через Webhook).
  2. Перенаправлять эти сообщения в Webim посредством механизма Custom Channel.
  3. Принимать ответы от оператора в Webim (через callback) и пересылать их обратно пользователям в Telegram.
  4. Использовать базу данных PostgreSQL:
    • Для хранения настроек (конфигураций, токенов, параметров интеграции).
    • Для хранения связки между Telegram-пользователями и Webim-посетителями (visitor_id ↔ chat_id).
При этом сами тексты сообщений (входящие и исходящие) не сохраняются в БД. Хранится только необходимая техническая информация: настройки интеграции и соответствие идентификаторов пользователей в обеих системах.



2. Требования к архитектуре и окружению

  1. Язык реализации: Python
  2. Web-фреймворк: FastAPI
  3. СУБД: PostgreSQL
  4. Взаимодействие с Telegram:
    • Через Telegram Bot API и Webhook (setWebhook).
    • Токен бота хранится в БД (таблица настроек) или в .env — на усмотрение исполнителя, но желательно хранить в БД, если это соответствует требованиям безопасности в инфраструктуре заказчика.
  5. Взаимодействие с Webim:
    • Через REST API (Custom Channel). https://webim.ru/kb/dev/api/custom-channel.html
    • Callback-URL для получения исходящих сообщений от оператора.
    • access_token Webim также хранится в БД (в таблице настроек), либо в .env.
  6. Безопасность:
    • Все внешние вызовы должны выполняться по HTTPS.
  7. Логирование:
    • Использовать стандартный модуль logging (или аналог) для записи ключевых событий (получение сообщения, отправка, ошибки).
    • Логи можно хранить локально или в любом внешнем сервисе (по согласованию).

3. Функциональные требования

3.1. Обработка входящих сообщений от Telegram

  1. Endpoint: POST /telegram-webhook

    • Принимает JSON (update) от Telegram.
    • Извлекает из него:
      • Идентификатор пользователя (chat_id).
      • Текст сообщения (при наличии).
    • Определяет (через обращение к БД) наличие связки chat_id ↔ visitor_id:
      • Если такой записи нет — создаёт новую:
        1. Генерирует/запрашивает новый visitor_id (может быть, например, str(chat_id) или использовать GUID).
        2. Сохраняет пару visitor_id, chat_id в таблице (см. пункт 4.2).
      • Если запись уже существует, использует соответствующий visitor_id.
    • Отправляет сообщение в Webim по Custom Channel:
      • Передаёт visitor_id, текст сообщения и любую дополнительную метаинформацию (например, username).
    • Сообщения в БД не сохраняются.
  2. Регистрация Webhook:

    • Предоставить инструкцию по выполнению setWebhook для Telegram (пример CURL или Python-скрипт).

3.2. Обработка исходящих сообщений от Webim

  1. Endpoint: POST /webim-callback
    • Webim вызывает этот адрес при отправке ответа оператором.
    • По visitor_id ищет в БД связку visitor_id ↔ chat_id.
      • Если связка найдена, получает chat_id.
      • Если нет — логирует ошибку (такое может произойти, если пользователь устарел, или в случае расхождения данных).
    • Отправляет сообщение пользователю в Telegram (метод sendMessage).
    • В БД текст сообщения не сохраняется.

3.3. Хранение настроек в PostgreSQL

  • Хранить токены, URL-адреса и прочие конфигурационные данные в таблице settings.
  • При запуске приложения (FastAPI) читать настройки и использовать в процессе интеграции. Время от времени их можно кэшировать в оперативной памяти, чтобы не грузить БД частыми запросами.

3.4. Хранение связки “visitor_id ↔ chat_id” в PostgreSQL

  1. Назначение: чтобы точно знать, какому Telegram-пользователю (chat_id) соответствует конкретный visitor_id из Webim.
  2. Предложенная таблица (например, chat_mapping):

    !Тут на усмотрение разработчика!
    • При первом сообщении от нового Telegram-пользователя сервис создаёт запись (если её ещё нет).
    • При callback из Webim с visitor_id сервис ищет запись в chat_mapping.
  3. Важно: если предполагается, что один и тот же Telegram-пользователь может иметь несколько различных сессий (и, соответственно, несколько visitor_id), нужно уточнить бизнес-логику. Наиболее распространённый случай: один chat_id ↔ один visitor_id.

4. Технические детали реализации

4.1. Структура проекта (пример на усмотрения разработчика)

project/
├── app/
│   ├── main.py            # Точка входа FastAPI-приложения
│   ├── config.py          # Функции чтения настроек из БД или .env
│   ├── db.py              # Подключение к PostgreSQL (SQLAlchemy или psycopg2)
│   ├── routers/
│   │   ├── telegram.py    # Маршрут /telegram-webhook
│   │   └── webim.py       # Маршрут /webim-callback
│   ├── schemas.py         # Pydantic-схемы (валидация входящих данных)
│   └── utils.py           # Утилиты (отправка сообщений в Webim/Telegram)
├── requirements.txt       # Зависимости (FastAPI, uvicorn, psycopg2 и т.д.)
├── README.md              # Инструкция по развёртыванию и настройке
├── .env                   # Переменные окружения (не хранить в Git)
└── ...

4.2. Взаимодействие с Webim

  • Отправка входящих сообщений:
    • Из telegram.py после получения chat_id и текста вызывается метод utils.send_to_webim(...).
    • В аргументах передаются:
      • visitor_id (из таблицы chat_mapping или вновь созданный).
      • Текст сообщения.
    • Авторизация по access_token Webim (из таблицы settings или переменной окружения).
  • Приём сообщений (callback):
    • В webim.py обрабатывается JSON с полями visitor_id, message, т. д.
    • Находит в БД chat_id.
    • Отправляет ответ в Telegram методами Bot API.

4.3. Взаимодействие с Telegram

  • Отправка сообщений:
    • Метод sendMessage Telegram Bot API.
    • В качестве chat_id используется значение из chat_mapping.
    • Токен бота читается из settings или переменной окружения.
  • Приём сообщений (Webhook):
    • Endpoint POST /telegram-webhook.
    • Извлекает chat_id, текст и затем направляет сообщение в Webim.

4.4. Логирование

  • Записывать в логи каждое входящее и исходящее сообщение (только факт получения/отправки, без сохранения полного текста в БД).
  • При ошибках (например, Telegram вернул 4xx/5xx или Webim не ответил) логировать детальную информацию об ошибке.

5. Выходные материалы

  1. Исходный код в репозитории (Git) со структурой, описанной выше.
  2. Файлы миграции или SQL-скрипты:
    • Для создания таблицы settings.
    • Для создания таблицы chat_mapping.
  3. Инструкция в формате README.md (или аналог):
    • Установка зависимостей (requirements.txt).
    • Настройка переменных окружения (или заполнение таблицы settings).
    • Запуск приложения (например, uvicorn app.main:app --host 0.0.0.0 --port 8000).
    • Настройка Webhook в Telegram (setWebhook).
    • Настройка Webim (callback URL).
    • Пример полного цикла: пользователь → Telegram → Webim → оператор → Webim callback → Telegram.
  4. Тестовая сессия:
    • Проверка, что при новом chat_id сервис корректно создаёт новую запись в chat_mapping.
    • Проверка ответа оператора в Webim и доставки этого ответа в Telegram.
    • Убедиться, что сообщения не сохраняются в БД.

6. Критерии приёмки

  1. Функциональность:
    • Сообщения из Telegram доходят в Webim, ответы оператора — в Telegram.
    • Связка visitor_id ↔ chat_id создаётся и поддерживается корректно в БД.
    • Настройки (токены и пр.) считываются из PostgreSQL или .env, согласно требованиям.
  2. Стабильность:
    • Приложение обрабатывает множественные запросы без критических сбоев.
    • Логи содержат информацию об ошибках, при сетевых сбоях сервис не падает.
  3. Качество кода:
    • Соблюдение PEP8 или аналогичных стандартов.
    • Логичная структуризация (роуты, утилиты, модели/схемы).
  4. Документация:
    • Наличие полного руководства по запуску/настройке 1-3 станицы.
    • Примеры API-запросов и сценария тестирования.
  5. Сроки и соответствие ТЗ:
    • Все перечисленные задачи выполнены.
    • Предоставлен рабочий прототип, готовый к развёртыванию (при условии корректного наполнения таблицы settings и настройки Webim/Telegram).

Читайте на 123ru.net


Новости 24/7 DirectAdvert - доход для вашего сайта



Частные объявления в Вашем городе, в Вашем регионе и в России



Smi24.net — ежеминутные новости с ежедневным архивом. Только у нас — все главные новости дня без политической цензуры. "123 Новости" — абсолютно все точки зрения, трезвая аналитика, цивилизованные споры и обсуждения без взаимных обвинений и оскорблений. Помните, что не у всех точка зрения совпадает с Вашей. Уважайте мнение других, даже если Вы отстаиваете свой взгляд и свою позицию. Smi24.net — облегчённая версия старейшего обозревателя новостей 123ru.net. Мы не навязываем Вам своё видение, мы даём Вам срез событий дня без цензуры и без купюр. Новости, какие они есть —онлайн с поминутным архивом по всем городам и регионам России, Украины, Белоруссии и Абхазии. Smi24.net — живые новости в живом эфире! Быстрый поиск от Smi24.net — это не только возможность первым узнать, но и преимущество сообщить срочные новости мгновенно на любом языке мира и быть услышанным тут же. В любую минуту Вы можете добавить свою новость - здесь.




Новости от наших партнёров в Вашем городе

Ria.city

Названа дата возрождения СССР

В Электростали прошли соревнования по лыжным гонкам «Памяти друзей»

США ошиблись, настроив Россию против себя, пишет журнал National Interest

Члены диаспоры затравили учителей, которые отобрали армянский флаг у детей, пишет КП

Музыкальные новости

«От тюрьмы спас Панарин»: водка, мафия и байки американцев о России

Московское «Динамо» обыграло «Сочи» в матче КХЛ

Baza: Стивен Сигал готов выступить на корпоративе в Москве за 200 тыс евро

Baza: выступление Стивена Сигала в Москве стоит 200 тысяч евро

Новости России

Мошенники обманули пенсионерку из Москвы с помощью кодового слова "лопух"

Северсталь – Авангард где смотреть матч, во сколько прямая трансляция, время начала игры Фонбет Чемпионат КХЛ 8 января

Минздрав признали виновным в подложной регистрации одного из антибиотиков

Вильфанд: в Поволжье, на Урале и в Сибири сохранится теплая погода до 14 января

Экология в России и мире

Зачем правами человека наделяют природные объекты

Ясновидящая Кажетта назвала Зодиакальных везунчиков 2025 года

Обращение лидера Всеармянского движения Аршака Карапетяна. ВИДЕО

Наводим красоту: секреты макияжа от профессионалов

Спорт в России и мире

Российским теннисистам будет сложно остаться в топ‑10 рейтингов WTA и ATP, считает Чесноков

Самсонова одержала победу в первом круге турнира WTA в Аделаиде

Овечкин назвал Даниила Медведева лучшим спортсменом 2024 года

ФОТО ⟩ Лесная прогулка Аннетт Контавейт в компании друзей приняла неожиданный поворот: «Еще недавно у всех было отличное настроение»

Moscow.media

От обычного парня в популярного блогера-миллионника.

Nvidia представила семейство настольных видеокарт GeForce RTX 50, флагман оценён в $1999

АвтоВАЗ не смог запустить продажи электромобиля ценой 4 млн рублей

Как долго должен длиться половой акт после 30?











Топ новостей на этот час

Rss.plus






МВД РФ: после предложений перевести деньги на безопасный счет надо класть трубку

Москва отремонтирует дома в стиле модерн

США ошиблись, настроив Россию против себя, пишет журнал National Interest

Прощание с Джимми Картером: гроб выставлен в Капитолии до 9 января