[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-telephony\u002Fcrm\u002Ftranscription":3,"docs-tabs-telephony\u002Fcrm\u002Ftranscription":6},{"content":4,"lastmod":5},"\n## Прикрепить транскрипцию\n\n`POST \u002Fv1\u002Fcalls\u002F:callId\u002Ftranscription`\n\nПрикрепляет текстовую транскрипцию диалога к завершённому звонку в Битрикс24. Звонок должен быть предварительно завершён через [`POST \u002Fv1\u002Fcalls\u002F:callId\u002Ffinish`](.\u002Ffinish.md).\n\n## Параметры\n\n| Параметр | В | Тип | Обяз. | Описание |\n|----------|---|-----|:-----:|---------|\n| `callId` | path | string | да | `callId` из ответа [`POST \u002Fv1\u002Fcalls\u002Fregister`](.\u002Fregister.md) |\n\n## Поля запроса (body)\n\n| Параметр | Тип | Обяз. | По умолч. | Описание |\n|----------|-----|:-----:|-----------|---------|\n| `messages` | array | да | — | Массив реплик диалога. Каждый элемент: `{side, startTime, stopTime, message}`. Не может быть пустым |\n| `messages[].side` | string | да | — | Сторона диалога: `\"User\"` — оператор, `\"Client\"` — клиент |\n| `messages[].startTime` | number | да | — | Время начала реплики в секундах от начала записи (≥ 0) |\n| `messages[].stopTime` | number | да | — | Время окончания реплики в секундах (> 0) |\n| `messages[].message` | string | да | — | Текст реплики (непустая строка) |\n| `cost` | number | нет | — | Стоимость распознавания |\n| `costCurrency` | string | нет | — | Валюта стоимости (например `\"RUB\"`) |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalls\u002FCALL_ID\u002Ftranscription \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"messages\": [\n      {\"side\": \"User\", \"startTime\": 0, \"stopTime\": 3, \"message\": \"Здравствуйте, чем могу помочь?\"},\n      {\"side\": \"Client\", \"startTime\": 4, \"stopTime\": 9, \"message\": \"Здравствуйте, хотел уточнить статус заказа\"}\n    ]\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalls\u002FCALL_ID\u002Ftranscription \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"messages\": [\n      {\"side\": \"User\", \"startTime\": 0, \"stopTime\": 3, \"message\": \"Здравствуйте, чем могу помочь?\"},\n      {\"side\": \"Client\", \"startTime\": 4, \"stopTime\": 9, \"message\": \"Здравствуйте, хотел уточнить статус заказа\"}\n    ]\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst callId = 'externalCall.00b1e735843c558431be668e3687a58b.1777974304'\n\nconst res = await fetch(`https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalls\u002F${callId}\u002Ftranscription`, {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    messages: [\n      { side: 'User', startTime: 0, stopTime: 3, message: 'Здравствуйте, чем могу помочь?' },\n      { side: 'Client', startTime: 4, stopTime: 9, message: 'Здравствуйте, хотел уточнить статус заказа' },\n    ],\n  }),\n})\n\nconst { success, data } = await res.json()\nconsole.log('ID транскрипции:', data.transcriptId)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst callId = 'externalCall.00b1e735843c558431be668e3687a58b.1777974304'\n\nconst res = await fetch(`https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalls\u002F${callId}\u002Ftranscription`, {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    messages: [\n      { side: 'User', startTime: 0, stopTime: 3, message: 'Здравствуйте, чем могу помочь?' },\n      { side: 'Client', startTime: 4, stopTime: 9, message: 'Здравствуйте, хотел уточнить статус заказа' },\n    ],\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `transcriptId` | number | Внутренний ID транскрипции на портале Битрикс24 |\n\n## Пример ответа\n\nHTTP 200 — транскрипция прикреплена:\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"transcriptId\": 3\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n400 — не передан массив реплик:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"MISSING_PARAMS\",\n    \"message\": \"Required: messages (non-empty array of {side, startTime, stopTime, message})\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `MISSING_PARAMS` | Не передан `messages` или массив пустой |\n| 400 | `INVALID_MESSAGE_SHAPE` | Некорректная структура элемента `messages[i]`: неверный `side`, тип или диапазон `startTime`\u002F`stopTime`, пустой `message`. В тексте ошибки — индекс некорректного элемента и нарушенное поле |\n| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |\n| 401 | `INVALID_API_KEY` | Неверный API-ключ |\n| 401 | `TOKEN_MISSING` | Ключ не имеет настроенных токенов Битрикс24 |\n| 401 | `KEY_INACTIVE` | API-ключ неактивен или отозван |\n| 403 | `SCOPE_DENIED` | Ключу не хватает скоупа `telephony` |\n| 422 | `BITRIX_ERROR` | Битрикс24 вернул ошибку (текст в `error.message`) |\n| 429 | `RATE_LIMITED` | Превышен лимит запросов |\n| 502 | `BITRIX_UNAVAILABLE` | Битрикс24 недоступен |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**На незавершённом звонке Битрикс24 вернёт ошибку.** Порядок операций: `register` → `finish` → `transcription`.\n\n**Вайбкод валидирует структуру `messages` локально.** Каждый элемент проверяется до отправки в Битрикс24. Ошибка `INVALID_MESSAGE_SHAPE` содержит индекс некорректного элемента и точное описание нарушенного ограничения — это позволяет исправить конкретный элемент без повторной отправки всего массива.\n\n**`transcriptId` используется только внутри портала.** Внешних эндпоинтов для чтения транскрипций по этому ID нет.\n\n## Смотрите также\n\n- [Завершить звонок](.\u002Ffinish.md) — обязательный шаг перед транскрипцией\n- [Зарегистрировать звонок](.\u002Fregister.md)\n- [Статистика звонков](\u002Fdocs\u002Ftelephony\u002Fanalytics\u002Fstatistics) — просмотр записей завершённых звонков\n","2026-06-24",{}]