Цель интеграции
Односторонняя связь Telegram-бота с CRM: обеспечить гарантированную доставку заявок с полным контекстом анкеты и исключением дублей.
Основные требования
- Надёжность и дроп-безопасность:
- Использовать механизм очереди с автоматическими повторными попытками (ретраи).
- Политика повторных попыток: через 1 мин, 5 мин, 15 мин, 60 мин (8 попыток).
- Защита от дублей:
- Поиск контакта в CRM сначала по номеру телефона (обязательно), при отсутствии - по идентификатору в Telegram (telegram_user_id).
- Контроль идемпотентности: на основе поля submission_id хранить ссылку на созданную сделку. При повторной отправке - не создавать дубликат, а догружать недостающие шаги.
Обязательный функционал интеграции
- Авторизация (OAuth2):
- Поддержка токенов доступа и обновления.
- Хранение токенов в базе данных и/или защищённых секретах.
- Автоматическое обновление токена при устаревании.
- Работа с контактами:
- Создание нового либо обновление существующего.
- Фиксировать имя, номер телефона (формат E.164), идентификатор и ник в Telegram.
- Создание сделки:
- Если у контакта есть активная сделка - дополнить её созданной заметкой "Повторная заявка".
- Если активных сделок нет - создать новую с корректными: воронка, статус, ответственный сотрудник, кастомные поля.
- Связывание: контакт обязателен для сделки (создать связь, если отсутствует).
- Заметки (notes):
- Создать заметку с типом "Анкета Telegram".
- Заметка должна содержать полный слепок переданных данных (анкета, UTM-метки).
- Задачи (tasks):
- Создать задачу "Связаться" для ответственного менеджера с дедлайном, рассчитанным по стандартному соглашению об уровне обслуживания (SLA).
- Привязать задачу к соответствующей сделке и контакту.
Данные, передаваемые из бота (lead payload)
Событие срабатывает после прохождения пользователем квиза и валидации номера телефона (нажатие кнопки "Отправить заявку"). Пейлоад содержит:
- уникальный идентификатор отправки (submission_id)
- дата и время создания (created_at)
- идентификатор/юзернейм Telegram (telegram_user_id / username)
- номер телефона в международном формате E.164 (phone)
- имя пользователя (name)
- ответы квиза (тип визуала, площадь, сезонность, срок, бюджет, локация, дополнительные опции, комментарий)
- UTM-метки заявки.
Обработка ошибок и логирование
- 401/403 - Ошибка авторизации - выполнить процедуру обновления токена и повторить запрос.
- 429 - Превышение лимита (требуется пауза); 5xx и тайм-ауты - помещать в начало планировщика на повтор согласно политике ретрая (см. п. Надёжность).
- 4xx - Ошибки валидации зарпоса - немедленный алерт администратору, т.к. это свидетельство технической ошибки интеграции.
- Логирование: сохранять полный URL точки доступа (endpoint), полученный HTTP-код, краткое описание ошибки (обязательно с маскировкой персональных данных), объект запроса/ответа (без ПДн).
- Алерты: неудачные повторы и ошибки валидации доводятся до DevOps / разработчика через настроенные каналы (Telegram/email/Slack).
Критерии приёмки (Acceptance Criteria)
- При получении заявки от пользователя создаётся или обновляется контакт в CRM.
- Для контакта создаётся или дополняется сделка.
- Контакты привязаны к сделке.
- У сделки появляется заметка и задача на менеджера.
- Повторное нажатие той же заявки (с одинаковым submission_id) не создаёт новых сущностей - находится и обновляется запись-дубль без создания дублирующих задач/заметок.
- Аварий надёжности: при сбое старой задачи (темпоральной недоступности или плановом обслуживании) очередная заявка из очереди в конечном счёте доставляется после повторных попыток (максимум установка лимита 8).
- Токены OAuth2 автоматически обновляются по истечению.