Завершить звонок и зафиксировать его в статистике telephony.externalCall.finish

Если вы разрабатываете интеграции для Битрикс24 с помощью AI-инструментов (Codex, Claude Code, Cursor), подключите MCP-сервер, чтобы ассистент использовал официальную REST-документацию.

Scope: telephony

Кто может выполнять метод: любой пользователь

Метод telephony.externalCall.finish завершает внешний звонок, сохраняет его в статистике и в CRM-деле.

Метод работает только в контексте приложения

Параметры метода

Обязательные параметры отмечены *

Название
тип

Описание

CALL_ID*
string

Идентификатор звонка из метода telephony.externalCall.register

USER_ID*
integer

Идентификатор пользователя, который завершает звонок.

Пользователь также назначается ответственным за CRM-объекты, которые были автоматически созданы в рамках звонка. Для ранее существовавших CRM-объектов ответственный не изменяется.

Идентификатор можно получить методом user.get

USER_PHONE_INNER*
string

Внутренний номер пользователя.

Внутренний номер можно получить методом user.get

Необходимо указать хотя бы один из параметров: USER_ID или USER_PHONE_INNER

DURATION
integer

Длительность звонка в секундах.

По умолчанию — 0

COST
double

Стоимость звонка.

По умолчанию — 0

COST_CURRENCY
string

Валюта стоимости звонка.

Список валют можно получить методом crm.currency.list.

По умолчанию — пустая строка

STATUS_CODE
string

Код результата звонка.

Возможные значения:

  • 200 — успешный звонок
  • 304 — пропущенный звонок
  • 603 — отклонено
  • 603-S — вызов отменен
  • 403 — запрещено
  • 404 — неверный номер
  • 486 — занято
  • 484 — направление недоступно
  • 503 — направление недоступно
  • 480 — временно недоступен
  • 402 — недостаточно средств
  • 423 — заблокировано
  • OTHER — не определено

По умолчанию:

  • 200, если DURATION > 0
  • 304, если DURATION = 0

FAILED_REASON
string

Текст причины несостоявшегося звонка.

По умолчанию — пустая строка

RECORD_URL
string

URL записи звонка.

Параметр устарел и оставлен для обратной совместимости. Рекомендуется использовать telephony.externalCall.attachRecord

VOTE
integer

Оценка звонка.

Возможные значения:

  • 1, 2, 3, 4, 5

Если оценка отсутствует — 0 или null

ADD_TO_CHAT
integer

Добавлять сообщение о звонке в чат сотрудника.

Возможные значения:

  • 0 — не добавлять
  • 1 — добавлять

По умолчанию — 1

Примеры кода

Как использовать примеры в документации

curl -X POST \
        -H "Content-Type: application/json" \
        -H "Accept: application/json" \
        -d '{"CALL_ID":"externalCall.716f1cb73def9700a23842adf9c4c568.1773130779","USER_ID":1269,"DURATION":95,"STATUS_CODE":"200","VOTE":5,"ADD_TO_CHAT":0,"auth":"**put_access_token_here**"}' \
        https://**put_your_bitrix24_address**/rest/telephony.externalCall.finish
        
try
        {
            const response = await $b24.callMethod(
                'telephony.externalCall.finish',
                {
                    CALL_ID: 'externalCall.716f1cb73def9700a23842adf9c4c568.1773130779',
                    USER_ID: 1269,
                    DURATION: 95,
                    STATUS_CODE: '200',
                    VOTE: 5,
                    ADD_TO_CHAT: 0
                }
            );
            
            const result = response.getData().result;
            console.log('Call finished:', result);
            processResult(result);
        }
        catch( error )
        {
            console.error('Error:', error);
        }
        
try {
            $response = $b24Service
                ->core
                ->call(
                    'telephony.externalCall.finish',
                    [
                        'CALL_ID' => 'externalCall.716f1cb73def9700a23842adf9c4c568.1773130779',
                        'USER_ID' => 1269,
                        'DURATION' => 95,
                        'STATUS_CODE' => '200',
                        'VOTE' => 5,
                        'ADD_TO_CHAT' => 0
                    ]
                );
        
            $result = $response
                ->getResponseData()
                ->getResult();
        
            echo 'Success: ' . print_r($result, true);
            processData($result);
        
        } catch (Throwable $e) {
            error_log($e->getMessage());
            echo 'Error finishing call: ' . $e->getMessage();
        }
        
BX24.callMethod(
            "telephony.externalCall.finish",
            {
                CALL_ID: 'externalCall.716f1cb73def9700a23842adf9c4c568.1773130779',
                USER_ID: 1269,
                DURATION: 95,
                STATUS_CODE: '200',
                VOTE: 5,
                ADD_TO_CHAT: 0
            },
            function(result)
            {
                if (result.error())
                {
                    console.error(result.error(), result.error_description());
                }
                else
                {
                    console.log(result.data());
                }
            }
        );
        
require_once('crest.php');
        
        $result = CRest::call(
            'telephony.externalCall.finish',
            [
                'CALL_ID' => 'externalCall.716f1cb73def9700a23842adf9c4c568.1773130779',
                'USER_ID' => 1269,
                'DURATION' => 95,
                'STATUS_CODE' => '200',
                'VOTE' => 5,
                'ADD_TO_CHAT' => 0
            ]
        );
        
        echo '<PRE>';
        print_r($result);
        echo '</PRE>';
        

Обработка ответа

HTTP-статус: 200

{
            "result": {
                "CALL_ID": "externalCall.716f1cb73def9700a23842adf9c4c568.1773130779",
                "EXTERNAL_CALL_ID": null,
                "PORTAL_USER_ID": 1269,
                "PHONE_NUMBER": "79062195047",
                "PORTAL_NUMBER": "3",
                "INCOMING": "2",
                "CALL_DURATION": 95,
                "CALL_START_DATE": {},
                "CALL_STATUS": 1,
                "CALL_VOTE": 5,
                "COST": 0,
                "COST_CURRENCY": "",
                "CALL_FAILED_CODE": "200",
                "CALL_FAILED_REASON": "",
                "REST_APP_ID": "3",
                "REST_APP_NAME": "Документация по REST API",
                "CRM_ACTIVITY_ID": 7943,
                "COMMENT": null,
                "CRM_ENTITY_TYPE": "CONTACT",
                "CRM_ENTITY_ID": 797,
                "ID": 7
            },
            "time": {
                "start": 1773132478,
                "finish": 1773132480.301376,
                "duration": 2.3013761043548584,
                "processing": 2,
                "date_start": "2026-03-10T11:47:58+03:00",
                "date_finish": "2026-03-10T11:48:00+03:00",
                "operating_reset_at": 1773133078,
                "operating": 1.4118058681488037
            }
        }
        

Возвращаемые данные

Название
тип

Описание

result
object

Данные сохраненной записи звонка

ID
integer

Идентификатор записи в статистике

CALL_ID
string

Идентификатор звонка

EXTERNAL_CALL_ID
string

Внешний идентификатор звонка на стороне интеграции

PORTAL_USER_ID
integer

Идентификатор пользователя Битрикс24, от имени которого завершен звонок

PHONE_NUMBER
string

Номер абонента

PORTAL_NUMBER
string

Номер линии, через который проходил звонок

INCOMING
string

Тип звонка.

Возможные значения:

  • 1 — исходящий
  • 2 — входящий
  • 3 — входящий с перенаправлением
  • 4 — обратный звонок
  • 5 — информационный звонок

CALL_DURATION
integer

Длительность звонка в секундах

CALL_START_DATE
datetime

Дата и время начала звонка

CALL_STATUS
integer

Статус завершения.

Возможные значения:

  • 1 — успешный разговор
  • 0 — неуспешный/пропущенный

CALL_VOTE
integer

Оценка звонка

COST
double

Стоимость звонка

COST_CURRENCY
string

Валюта стоимости

CALL_FAILED_CODE
string

Код завершения звонка.

Возможные значения:

  • 200 — успешный звонок
  • 304 — пропущенный звонок
  • 603 — отклонено
  • 603-S — вызов отменен
  • 403 — запрещено
  • 404 — неверный номер
  • 486 — занято
  • 484 — направление недоступно
  • 503 — направление недоступно
  • 480 — временно недоступен
  • 402 — недостаточно средств
  • 423 — заблокировано
  • OTHER — не определено

CALL_FAILED_REASON
string

Текстовая причина завершения звонка

REST_APP_ID
integer

Идентификатор приложения

REST_APP_NAME
string

Название приложения

CRM_ACTIVITY_ID
integer

Идентификатор CRM-дела звонка

COMMENT
string

Комментарий к звонку

CRM_ENTITY_TYPE
string

Тип объекта CRM, связанного со звонком

CRM_ENTITY_ID
integer

Идентификатор объекта CRM, связанного со звонком

ERRORS
object

Дополнительные ошибки обработки (если возникли)

time
time

Информация о времени выполнения запроса

Обработка ошибок

HTTP-статус: 400, 403

{
            "error": "INVALID_ARGUMENT",
            "error_description": "CALL_ID must be a string"
        }
        

Название
тип

Описание

error
string

Строковый код ошибки. Может состоять из цифр, латинских букв и знака подчеркивания

error_description
error_description

Текстовое описание ошибки. Описание не предназначено для показа конечному пользователю в необработанном виде

Возможные коды ошибок

Код

Описание

Значение

WRONG_AUTH_TYPE

Current authorization type is denied for this method

Метод вызван вне контекста приложения

INVALID_ARGUMENT

CALL_ID must be a string

Параметр CALL_ID должен быть строкой

ERROR_CORE

USER_ID or USER_PHONE_INNER should be set

Не переданы USER_ID и USER_PHONE_INNER

ERROR_CORE

Call is not found (call should be registered prior to finishing

Звонок не найден, перед завершением его нужно зарегистрировать методом telephony.externalCall.register

ERROR_CORE

User is not found or is not active

Пользователь не найден или неактивен

ERROR_CORE

Unexpected database error

Ошибка сохранения статистики

Статусы и коды системных ошибок

HTTP-статус: 20x, 40x, 50x

Описанные ниже ошибки могут возникнуть при вызове любого метода

Статус

Код
Текст ошибки

Описание

500

INTERNAL_SERVER_ERROR
Internal server error

Возникла внутренняя ошибка сервера, обратитесь к администратору сервера или в техническую поддержку Битрикс24

500

ERROR_UNEXPECTED_ANSWER
Server returned an unexpected response

Возникла внутренняя ошибка сервера, обратитесь к администратору сервера или в техническую поддержку Битрикс24

503

QUERY_LIMIT_EXCEEDED
Too many requests

Превышен лимит на интенсивность запросов

429

OPERATION_TIME_LIMIT
Method is blocked due to operation time limit

Метод заблокирован из-за превышения лимита на ресурсоемкость запросов. Блокировка снимается автоматически через 10 минут

405

ERROR_BATCH_METHOD_NOT_ALLOWED
Method is not allowed for batch usage

Текущий метод не разрешен для вызова с помощью batch

400

ERROR_BATCH_LENGTH_EXCEEDED
Max batch length exceeded

Превышена максимальная длина параметров, переданных в метод batch

401

NO_AUTH_FOUND
Wrong authorization data

Неверный access-токен или код вебхука

400

INVALID_REQUEST
Https required

Для вызовов методов требуется использовать протокол HTTPS

503

OVERLOAD_LIMIT
REST API is blocked due to overload

REST API заблокирован из-за перегрузки. Это ручная индивидуальная блокировка, для снятия необходимо обращаться в техническую поддержку Битрикс24

403

ACCESS_DENIED
REST API is available only on commercial plans

REST API доступен только на коммерческих планах

403

INVALID_CREDENTIALS
Invalid request credentials

У пользователя, с чьим access-токеном или вебхуком был вызван метод, не хватает прав

404

ERROR_MANIFEST_IS_NOT_AVAILABLE
Manifest is not available

Манифест недоступен

403

insufficient_scope
The request requires higher privileges than provided by the webhook token

Запрос требует более высоких привилегий, чем предоставляет токен вебхука

401

expired_token
The access token provided has expired

Предоставленный access-токен доступа истек

403

user_access_error
The user does not have access to the application

Пользователь не имеет доступа к приложению. Это означает, что приложение установлено, но администратор портала разрешил доступ к этому приложению только конкретным пользователям

500

PORTAL_DELETED
Portal was deleted

Публичная часть сайта закрыта. Чтобы открыть публичную часть сайта на коробочной установке отключите опцию «Временное закрытие публичной части сайта». Путь к настройке: Рабочий стол > Настройки > Настройки продукта > Настройки модулей > Главный модуль > Временное закрытие публичной части сайта

Продолжите изучение