Заметки
Как связать открытую линию и сделку
Как связать чат открытой линии со сделкой через CRM-дело: crm.activity.add, provider, session ID и кликабельность записи в таймлайне.
Связь открытой линии со сделкой держится не только на тексте записи в таймлайне. Важно сохранить provider-данные: сессию, чат и CRM-привязку. Иначе активность может появиться в карточке, но не открыть реальный диалог.
Задача
Нужно, чтобы переписка из открытой линии была видна в таймлайне сделки и открывалась как нормальный диалог, а не как безжизненная запись.
Обычно связь появляется автоматически, если открытая линия настроена на работу с CRM. Но при собственном коннекторе, переносе диалога или ручной интеграции приходится создавать CRM-активность самому.
Главная цель — не просто добавить текст в таймлайн, а сохранить техническую связь с сессией открытой линии. Тогда запись будет кликабельной и пользователь сможет перейти к переписке.
CRM-активность как точка связи
Таймлайн CRM строится вокруг дел и активностей. Для открытой линии важны owner сделки, provider и параметры сессии.
Минимальная запись в таймлайне без provider-данных может выглядеть красиво, но не открывать чат. Поэтому вместе с владельцем сделки нужно передавать идентификаторы сессии и чата.
BX24.callMethod(
'crm.activity.add',
{
fields: {
OWNER_TYPE_ID: 2,
OWNER_ID: 123,
TYPE_ID: 4,
SUBJECT: 'Диалог открытой линии',
COMPLETED: 'Y',
PROVIDER_ID: 'IMOPENLINES_SESSION',
PROVIDER_TYPE_ID: 'IMOPENLINES_SESSION',
PROVIDER_PARAMS: {
SESSION_ID: 456,
CHAT_ID: 789,
},
BINDINGS: [
{ OWNER_TYPE_ID: 2, OWNER_ID: 123 }
],
},
},
function (result) {
console.log(result.error() || result.data());
}
); OWNER_TYPE_ID и OWNER_ID указывают, к какой CRM-сущности относится активность. Для сделки обычно используется тип сделки и ID конкретной сделки. PROVIDER_ID и параметры provider-а нужны, чтобы интерфейс понял, что это не обычное дело, а диалог открытой линии.
Session ID и кликабельность
Запись в таймлайне открывается нормально только тогда, когда по ней можно восстановить диалог открытой линии.
Если известен только текст сообщения, этого недостаточно. Нужны данные сессии или чата, по которым Битрикс сможет открыть переписку.
BX24.callMethod(
'imopenlines.dialog.get',
{
SESSION_ID: 456,
},
function (result) {
console.log(result.error() || result.data());
}
); Если сессия уже закрыта, запись всё равно может оставаться в таймлайне. Но для перехода к истории нужны корректные provider-данные. Поэтому при интеграции лучше сохранять SESSION_ID и CHAT_ID сразу при создании или обработке диалога.
Привязки к CRM
Одна активность может быть связана не только со сделкой, но и с контактом или компанией.
Если диалог относится к сделке, связанной с компанией и контактом, полезно добавить дополнительные bindings. Тогда переписку проще найти из разных карточек CRM.
При этом не стоит дублировать активности без необходимости. Лучше одна корректная активность с несколькими привязками, чем несколько похожих записей, которые потом расходятся по данным.