#Завершить звонок
POST /v1/calls/:callId/finish
Завершает зарегистрированный звонок: фиксирует длительность и итоговый статус, создаёт дело в связанной CRM-сущности. Вызывайте после окончания разговора, до прикрепления транскрипции.
#Параметры
| Параметр | В | Тип | Обяз. | Описание |
|---|---|---|---|---|
callId |
path | string | да | CALL_ID из ответа `POST /v1/calls/register` |
#Поля запроса (body)
| Параметр | Тип | Обяз. | По умолч. | Описание |
|---|---|---|---|---|
userId |
number | да | — | ID пользователя Битрикс24, завершившего звонок. Список пользователей |
duration |
number | да | — | Длительность звонка в секундах |
statusCode |
string | нет | "200" при duration > 0, иначе "304" |
Код завершения: "200" успешно, "304" пропущен, "403" запрещено, "486" занято, "603" отклонён, "603-S" отменён клиентом, "402" нет средств, "404" неверный номер, "423" заблокирован, "480" временно недоступен, "484" / "503" недоступное направление, "OTHER" |
add_to_chat |
boolean | нет | — | Добавить событие о звонке в чат сотрудника |
#Примеры
#curl — личный ключ
curl -X POST https://vibecode.bitrix24.tech/v1/calls/CALL_ID/finish \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userId": 1,
"duration": 120,
"statusCode": "200"
}'
#curl — OAuth-приложение
curl -X POST https://vibecode.bitrix24.tech/v1/calls/CALL_ID/finish \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"userId": 1,
"duration": 120,
"statusCode": "200"
}'
#JavaScript — личный ключ
const callId = 'externalCall.00b1e735843c558431be668e3687a58b.1777974304'
const res = await fetch(`https://vibecode.bitrix24.tech/v1/calls/${callId}/finish`, {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
userId: 1,
duration: 120,
statusCode: '200',
}),
})
const { success, data } = await res.json()
console.log('Дело:', data.CRM_ACTIVITY_ID)
#JavaScript — OAuth-приложение
const callId = 'externalCall.00b1e735843c558431be668e3687a58b.1777974304'
const res = await fetch(`https://vibecode.bitrix24.tech/v1/calls/${callId}/finish`, {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
userId: 1,
duration: 120,
statusCode: '200',
}),
})
const { success, data } = await res.json()
#Поля ответа
| Поле | Тип | Описание |
|---|---|---|
CALL_ID |
string | Идентификатор звонка |
EXTERNAL_CALL_ID |
string | null | Внешний идентификатор, переданный при регистрации |
PORTAL_USER_ID |
number | ID пользователя Битрикс24 |
PHONE_NUMBER |
string | Номер телефона |
PORTAL_NUMBER |
string | Номер линии на портале |
INCOMING |
string | Тип звонка: "1" — исходящий, "2" — входящий, "3" — входящий с перенаправлением, "4" — обратный звонок, "5" — информационный |
CALL_DURATION |
number | Длительность в секундах |
CALL_START_DATE |
object | Дата начала звонка. Возвращается как пустой объект {} — см. особенности |
CALL_STATUS |
number | Статус завершения |
CALL_VOTE |
number | Оценка звонка |
COST |
number | Стоимость звонка |
COST_CURRENCY |
string | Валюта стоимости |
CALL_FAILED_CODE |
string | Переданный statusCode |
CALL_FAILED_REASON |
string | Текстовое описание причины завершения |
REST_APP_ID |
number | null | ID приложения |
REST_APP_NAME |
string | false | Имя приложения |
CRM_ACTIVITY_ID |
number | false | ID созданного дела. false, если сущность не привязана |
COMMENT |
string | null | Комментарий к звонку |
ID |
number | Внутренний ID записи о звонке |
ERRORS |
object | null | Ошибки, не прервавшие завершение (например ACTIVITY_CREATION) |
CRM_ENTITY_TYPE |
string | Тип привязанной CRM-сущности (только при наличии привязки) |
CRM_ENTITY_ID |
number | ID привязанной CRM-сущности (только при наличии привязки) |
#Пример ответа
HTTP 200 — звонок завершён, дело создано:
{
"success": true,
"data": {
"CALL_ID": "externalCall.00b1e735843c558431be668e3687a58b.1777974304",
"EXTERNAL_CALL_ID": null,
"PORTAL_USER_ID": 1,
"PHONE_NUMBER": "+79161234567",
"PORTAL_NUMBER": "REST_APP:",
"INCOMING": "2",
"CALL_DURATION": 120,
"CALL_START_DATE": {},
"CALL_STATUS": 1,
"CALL_VOTE": 0,
"COST": 0,
"COST_CURRENCY": "",
"CALL_FAILED_CODE": "200",
"CALL_FAILED_REASON": "",
"REST_APP_ID": null,
"REST_APP_NAME": false,
"CRM_ACTIVITY_ID": 7995,
"COMMENT": null,
"CRM_ENTITY_TYPE": "LEAD",
"CRM_ENTITY_ID": 1001069,
"ID": 61
}
}
#Пример ответа при ошибке
400 — не переданы обязательные параметры:
{
"success": false,
"error": {
"code": "MISSING_PARAMS",
"message": "Required: userId (number), duration (number, seconds)"
}
}
#Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 400 | MISSING_PARAMS |
Не передан userId или duration |
| 401 | MISSING_API_KEY |
Не передан заголовок X-Api-Key |
| 401 | INVALID_API_KEY |
Неверный API-ключ |
| 401 | TOKEN_MISSING |
Ключ не имеет настроенных токенов Битрикс24 |
| 401 | KEY_INACTIVE |
API-ключ неактивен или отозван |
| 403 | SCOPE_DENIED |
Ключу не хватает скоупа telephony |
| 422 | BITRIX_ERROR |
Битрикс24 вернул ошибку (текст в error.message) |
| 429 | RATE_LIMITED |
Превышен лимит запросов |
| 502 | BITRIX_UNAVAILABLE |
Битрикс24 недоступен |
Полный список общих ошибок API — Ошибки.
#Известные особенности
CALL_START_DATE всегда возвращается как пустой объект {}. Реальную дату начала звонка смотрите в статистике.
CRM_ACTIVITY_ID: false при отсутствии привязки. В поле ERRORS.ACTIVITY_CREATION возвращается текстовое описание причины. Звонок при этом считается завершённым.
Значение statusCode влияет на метку в CRM. Явная передача позволяет зафиксировать причину завершения независимо от длительности.
#Смотрите также
- Зарегистрировать звонок
- Прикрепить транскрипцию
- Показать карточку
- Статистика звонков — дата начала и другие поля
- Лиды — CRM-сущность, создаваемая при регистрации
- Контакты — CRM-сущность, к которой может быть привязан звонок
- Сделки — звонок попадает в таймлайн связанной сделки