Files
BitrixDealsBot/docs/adr/005-bitrix-deal-read-model.md
T

6.2 KiB

ADR-005: получение списка и карточки сделки из Битрикс24

Статус: Принято
Дата: 2026-07-23

Контекст

Приложение не копирует CRM-данные в локальную базу. Сведения о сделках, контактах, компаниях, стадиях и истории запрашиваются через REST API непосредственно в момент действия пользователя. PostgreSQL хранит только данные, необходимые для идентификации пользователя и выполнения авторизованных запросов.

Реализация работает с сущностью сделки и методами crm.deal.*. Команды /leads и /lead используются как пользовательские псевдонимы /deals и /deal.

Решение

Для получения и изменения данных применяются следующие методы REST API Битрикс24.

Метод Назначение Ключевые параметры
crm.deal.list Список и пагинация filter, select, order, start
crm.deal.get Карточка и контроль состояния id
crm.deal.update Ответственный и стадия id, fields, REGISTER_HISTORY_EVENT
crm.status.list Стадии воронки и источники ENTITY_ID, STATUS_ID
crm.contact.get ФИО и телефон контакта id
crm.company.get Название и телефон компании id
crm.stagehistory.list История переходов entityTypeId=2, OWNER_ID
crm.activity.todo.add Отложенный звонок ownerTypeId=2, deadline, responsibleId

Таблица ADR-005/1. Используемые методы REST API Битрикс24

Формирование списка

Названия стадий не зашиты в интерфейсе. Метод crm.status.list получает актуальную конфигурацию воронки, после чего первая стадия трактуется как псевдофильтр new. Карта стадий кэшируется в памяти на 300 секунд отдельно для портала, пользователя и категории. Дополнительно добавляется фильтр «Все», не передающий STAGE_ID в Битрикс24.

Размер страницы Telegram равен пяти сделкам, тогда как Битрикс24 может возвращать другое количество элементов за запрос. DealService собирает REST-страницы по полю next до тех пор, пока не сможет выделить диапазон [page * limit; page * limit + limit). Значение total используется для расчёта общего числа страниц. Список сделок запрашивается методом crm.deal.list с параметрами фильтрации.

Список сделок в интерфейсе Telegram

Рисунок ADR-005/1. Список сделок в интерфейсе Telegram

Формирование карточки

Получение карточки сделки продолжает сценарий работы со списком.

Диаграмма последовательности просмотра списка и карточки сделки

Рисунок ADR-005/2. Диаграмма последовательности просмотра списка и карточки сделки

Карточка загружается методом crm.deal.get, затем обогащается данными связанных сущностей. Для контакта составляется ФИО и выбирается первый телефон; при отсутствии телефона контакта проверяется компания. Идентификаторы источника и стадии преобразуются в человекочитаемые названия. В итоговое сообщение включаются сумма, валюта, ответственный, дата создания и комментарий.

Все динамические строки перед включением в HTML-ответ Telegram проходят html.escape. Длина карточки ограничена 3900 символами, что оставляет запас до ограничения Telegram и предотвращает ошибку отправки из-за длинного комментария. Кнопка назначения отображается только для новой сделки, если текущий пользователь ещё не является ответственным.

Карточка сделки в интерфейсе Telegram

Рисунок ADR-005/3. Карточка сделки в интерфейсе Telegram

Последствия

Битрикс24 остаётся источником актуальных CRM-данных, а локальная база не требует синхронизации сделок и связанных сущностей. В качестве дальнейшего развития предусмотрен переход с устаревающих методов crm.deal.* на универсальные методы crm.item.*.