Для AI-агентов: markdown этой страницы — /docs-content/openlines/crm/messages.md индекс документации — /llms.txt
Отправить сообщение клиенту
POST /v1/openlines/crm/messages
Отправляет сообщение в чат открытой линии, привязанный к карточке CRM. Сообщение уходит клиенту в его мессенджер от имени указанного сотрудника или бота.
Важно: сообщение получает реальный клиент. Перед вызовом проверьте, что chatId относится к нужному диалогу.
Поля запроса (body)
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
ПолеcrmEntityType |
Типstring | Обяз.да | ОписаниеТип карточки CRM: lead, deal, company или contact. Регистр не важен |
ПолеcrmEntityId |
Типnumber | Обяз.да | ОписаниеID карточки CRM. Списки: GET /v1/leads, GET /v1/deals, GET /v1/companies, GET /v1/contacts |
ПолеuserId |
Типnumber | Обяз.да | ОписаниеID сотрудника или бота, от имени которого отправляется сообщение. Сотрудники: GET /v1/users, боты: поле data.bots[].id в ответе GET /v1/bots |
ПолеchatId |
Типnumber | Обяз.да | ОписаниеИдентификатор чата открытой линии этой карточки — положительное целое без префикса chat. Список: GET /v1/openlines/crm/chats с activeOnly=false |
Полеmessage |
Типstring | Обяз.да | ОписаниеТекст сообщения. Строка из одних пробелов не принимается |
Числовые поля принимают и строку из цифр.
Примеры
curl — личный ключ
curl -X POST https://vibecode.bitrix24.tech/v1/openlines/crm/messages \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"crmEntityType": "deal",
"crmEntityId": 42,
"userId": 7,
"chatId": 123,
"message": "Здравствуйте! Ваш заказ готов к выдаче."
}'
curl — OAuth-приложение
curl -X POST https://vibecode.bitrix24.tech/v1/openlines/crm/messages \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"crmEntityType": "deal",
"crmEntityId": 42,
"userId": 7,
"chatId": 123,
"message": "Здравствуйте! Ваш заказ готов к выдаче."
}'
JavaScript — личный ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/openlines/crm/messages', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
crmEntityType: 'deal',
crmEntityId: 42,
userId: 7,
chatId: 123,
message: 'Здравствуйте! Ваш заказ готов к выдаче.',
}),
})
const { success, data, error } = await res.json()
if (!success) throw new Error(`${error.code}: ${error.message}`)
console.log('ID сообщения:', data.messageId)
JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/openlines/crm/messages', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
crmEntityType: 'deal',
crmEntityId: 42,
userId: 7,
chatId: 123,
message: 'Здравствуйте! Ваш заказ готов к выдаче.',
}),
})
const { success, data } = await res.json()
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
Полеsuccess |
Типboolean | Описаниеtrue, когда сообщение отправлено |
Полеdata.chatId |
Типnumber | ОписаниеИдентификатор чата из запроса |
Полеdata.messageId |
Типnumber | ОписаниеID отправленного сообщения в чате |
Пример ответа
{
"success": true,
"data": {
"chatId": 123,
"messageId": 456
}
}
Пример ответа при ошибке
404 — чат не относится к указанной карточке CRM:
{
"success": false,
"error": {
"code": "ENTITY_NOT_FOUND",
"message": "CRM chat not found"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| HTTP400 | КодINVALID_PARAMS |
ОписаниеcrmEntityType не передан или вне списка, crmEntityId или userId не передан или не положительное целое, либо тело запроса не JSON-объект |
| HTTP400 | КодINVALID_JSON_BODY |
ОписаниеТело запроса не разбирается как JSON |
| HTTP400 | КодINVALID_CHAT_ID |
ОписаниеchatId не положительное целое, в том числе форма chat123 |
| HTTP400 | КодMISSING_REQUIRED_FIELDS |
ОписаниеНе передан chatId, или message не передан, не строка, пустой либо состоит из одних пробелов |
| HTTP404 | КодENTITY_NOT_FOUND |
ОписаниеСообщение CRM chat not found: у карточки CRM нет чата с таким chatId, включая завершённые. Проверка идёт до отправки, сообщение не отправлено |
| HTTP404 | КодENTITY_NOT_FOUND |
ОписаниеСообщение Record not found: Битрикс24 не нашёл чат при отправке |
| HTTP403 | КодBITRIX_ACCESS_DENIED |
ОписаниеУ сотрудника, от имени которого идёт вызов, нет прав на карточку CRM или на отправку сообщения |
| HTTP422 | КодBITRIX_ERROR |
ОписаниеБитрикс24 отказал в отправке, его код приходит в error.b24Code |
| HTTP502 | КодOPENLINE_OPERATOR_FAILED |
ОписаниеБитрикс24 не вернул ID сообщения. Сообщение при этом могло быть отправлено |
| HTTP502 | КодOPENLINE_OPERATOR_FAILED |
ОписаниеСписок чатов карточки пришёл в неожиданной форме. Проверка идёт до отправки, сообщение не отправлено |
| HTTP403 | КодSCOPE_DENIED |
ОписаниеУ ключа нет скоупа imopenlines |
| HTTP403 | КодWRITE_BLOCKED_READONLY_KEY |
ОписаниеКлюч работает только на чтение |
| HTTP401 | КодMISSING_API_KEY |
ОписаниеНе передан заголовок X-Api-Key |
| HTTP401 | КодINVALID_API_KEY |
ОписаниеКлюч не опознан |
| HTTP401 | КодTOKEN_MISSING |
ОписаниеУ личного ключа нет доступа к порталу Битрикс24, у ключа приложения не передан токен сессии в Authorization |
| HTTP429 | КодRATE_LIMITED |
ОписаниеПревышен лимит 120 запросов в минуту на портал. Лимит делится между репликами платформы, поэтому код может прийти раньше 120-го запроса. Действующее значение для ключа — в заголовке x-ratelimit-limit, остаток — в x-ratelimit-remaining |
| HTTP429 | КодRATE_LIMITED |
ОписаниеБитрикс24 отклонил вызов по лимиту частоты запросов к порталу. В ответе приходит заголовок Retry-After |
| HTTP502 | КодBITRIX_UNAVAILABLE |
ОписаниеБитрикс24 недоступен или соединение с ним оборвалось до полного ответа |
| HTTP503 | КодBITRIX_TIMEOUT |
ОписаниеБитрикс24 принял вызов, но не ответил за отведённое время. Сообщение при этом могло быть отправлено |
Полный список общих ошибок API — Ошибки.
Известные особенности
- Чат проверяется до отправки. Перед отправкой Вайбкод сверяет
chatIdсо всеми чатами карточки, включая завершённые диалоги. - Повтор после сбоя. После
502 OPENLINE_OPERATOR_FAILEDили503 BITRIX_TIMEOUTсообщение могло дойти до клиента. Повторный вызов отправит его ещё раз, поэтому перед повтором проверьте переписку диалога.