Записи звонков и встреч можно отправлять на расшифровку прямо из 1С. Транскрипта принимает аудиофайл по API, обрабатывает его в фоне и возвращает текст. В 1С остаётся сохранить номер задачи и связать готовую расшифровку с документом, клиентом или звонком.
В этой инструкции подключим API, отправим WAV-файл и получим текст обратно. Полные примеры кода можно скачать и добавить в свою обработку.
Что понадобится
- 1С:Предприятие с поддержкой типов
ПотокВПамяти,ЗаписьДанныхиHTTPСоединение. - Аккаунт Транскрипты с платным тарифом и API-ключом с правами создания и чтения расшифровок.
- Аудиофайл, доступный процессу 1С. Для первого запуска подойдёт короткий WAV-файл.
- Доступ к API по HTTPS из среды, где выполняется код.
В примере используется прямая загрузка файла до 100 МиБ. Для более крупных записей есть загрузка по частям — она описана в общем руководстве по API.
Шаг 1. Создайте API-ключ

Откройте личный кабинет Транскрипты, перейдите в «Настройки» → «API» и нажмите «Создать ключ». Дайте ключу понятное название, например «1С: расшифровка звонков».

Сохраните ключ: полное значение показывается один раз. Там же откройте документацию и скопируйте адрес API. Для переменной APIХост в примере потребуется только имя хоста, без https:// и без пути. Соединение будет использовать HTTPS и порт 443.
Рабочий ключ храните в защищённых настройках на сервере. Значение в коде ниже — место для подстановки при первом тесте.
Шаг 2. Добавьте код отправки в 1С
Создайте обработку для первого запуска или добавьте процедуру в свой серверный общий модуль. Для толстого клиента код можно разместить в модуле обработки. Вызовите ОтправитьЗаписьНаРасшифровку() из обработчика кнопки или своей серверной процедуры.
В начале примера замените три значения:
| Переменная | Что указать |
|---|---|
| APIХост | Хост из документации API в кабинете. |
| APIКлюч | Ключ созданной интеграции. |
| ПутьКФайлу | Путь к WAV-файлу, доступному процессу 1С. |
Если код выполняется на сервере 1С, файл должен быть доступен серверу. Файл на диске компьютера пользователя не становится доступным серверному процессу автоматически.
Скачать код отправки файла (.bsl)
Процедура ОтправитьЗаписьНаРасшифровку() Экспорт
// Запускайте в серверном модуле или в толстом клиенте 1С.
// Хост (без https://) возьмите из документации API в кабинете.
APIХост = "ХОСТ_ИЗ_ДОКУМЕНТАЦИИ";
APIКлюч = "ВАШ_API_КЛЮЧ";
ПутьКФайлу = "C:\Records\meeting.wav";
// Сохраните этот ID вместе с записью для повторов того же запроса.
external_id = Строка(Новый УникальныйИдентификатор());
Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
CRLF = Символы.ВК + Символы.ПС;
Поток = Новый ПотокВПамяти;
ЗаписьДанных = Новый ЗаписьДанных(
Поток, КодировкаТекста.UTF8, ,
Символы.ПС, CRLF, Ложь);
// Часть 1: файл. Для MP3 поменяйте имя и MIME-тип.
ЗаписьДанных.ЗаписатьСтроку("--" + Boundary);
ЗаписьДанных.ЗаписатьСтроку(
"Content-Disposition: form-data; name=""file""; filename=""meeting.wav""");
ЗаписьДанных.ЗаписатьСтроку("Content-Type: audio/wav");
ЗаписьДанных.ЗаписатьСтроку("");
ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ПутьКФайлу);
ЗаписьДанных.Записать(ДвоичныеДанныеФайла);
ЗаписьДанных.ЗаписатьСтроку("");
// Часть 2: язык.
ЗаписьДанных.ЗаписатьСтроку("--" + Boundary);
ЗаписьДанных.ЗаписатьСтроку(
"Content-Disposition: form-data; name=""language""");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку("auto");
// Часть 3: связь с записью в вашей системе.
ЗаписьДанных.ЗаписатьСтроку("--" + Boundary);
ЗаписьДанных.ЗаписатьСтроку(
"Content-Disposition: form-data; name=""metadata""");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку(
"{""external_id"":""" + external_id + """}");
ЗаписьДанных.ЗаписатьСтроку("--" + Boundary + "--");
ЗаписьДанных.Закрыть();
ТелоЗапроса = Поток.ЗакрытьИПолучитьДвоичныеДанные();
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
HTTPСоединение = Новый HTTPСоединение(
APIХост, 443, , , , 60, ЗащищенноеСоединение);
HTTPЗапрос = Новый HTTPЗапрос("/v1/transcriptions");
HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(ТелоЗапроса);
HTTPЗапрос.Заголовки.Вставить("Authorization", "Bearer " + APIКлюч);
HTTPЗапрос.Заголовки.Вставить("Idempotency-Key", external_id);
HTTPЗапрос.Заголовки.Вставить(
"Content-Type", "multipart/form-data; boundary=" + Boundary);
Попытка
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Сообщить("HTTP " + Строка(HTTPОтвет.КодСостояния));
Сообщить(HTTPОтвет.ПолучитьТелоКакСтроку("UTF-8"));
Исключение
Сообщить("Ошибка отправки: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Процедура отправляет POST /v1/transcriptions. Сам файл идёт в поле file, language=auto включает автоматическое определение языка, а metadata.external_id связывает расшифровку с записью вашей системы.
Если передаёте MP3, замените в заголовках части имя meeting.wav на meeting.mp3, а audio/wav на audio/mpeg. Двоичные данные файла передаются напрямую.
Шаг 3. Сохраните номер задачи
После запуска процедура выведет HTTP-код и JSON-ответ. HTTP 202 означает, что запись принята в обработку. Например:
{
"id": "123",
"status": "queued",
"duration_seconds": 60,
"request_id": "req_..."
}
Сохраните поле id рядом с документом или звонком в 1С. По этому номеру вы будете проверять готовность и получать результат.
Для автоматического сохранения добавьте следующий блок внутрь процедуры отправки после получения HTTPОтвет:
Если HTTPОтвет.КодСостояния = 202 Тогда
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(HTTPОтвет.ПолучитьТелоКакСтроку("UTF-8"));
ДанныеОтвета = ПрочитатьJSON(Чтение, Истина);
Чтение.Закрыть();
ИДЗадачи = Строка(ДанныеОтвета.Получить("id"));
// Сохраните ИДЗадачи в своей записи интеграции.
КонецЕсли;
Создание задачи и получение текста — два отдельных действия. Ответ 202 приходит сразу, без ожидания окончания расшифровки.
Шаг 4. Проверяйте готовность
Состояние задачи возвращает GET /v1/transcriptions/<id>. В отличие от ответа на создание задачи, данные этого ответа находятся внутри объекта data.
Добавьте вспомогательную функцию в тот же модуль. Она выполняет GET-запрос и возвращает data как соответствие 1С:
Скачать функцию получения данных (.bsl)
Функция ПолучитьДанныеТранскрипты(APIХост, APIКлюч, ПутьЗапроса) Экспорт
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
HTTPСоединение = Новый HTTPСоединение(
APIХост, 443, , , , 60, ЗащищенноеСоединение);
HTTPЗапрос = Новый HTTPЗапрос(ПутьЗапроса);
HTTPЗапрос.Заголовки.Вставить("Authorization", "Bearer " + APIКлюч);
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
Если HTTPОтвет.КодСостояния <> 200 Тогда
ВызватьИсключение "API: HTTP " + Строка(HTTPОтвет.КодСостояния);
КонецЕсли;
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(HTTPОтвет.ПолучитьТелоКакСтроку("UTF-8"));
ДанныеОтвета = ПрочитатьJSON(Чтение, Истина);
Чтение.Закрыть();
Возврат ДанныеОтвета.Получить("data");
КонецФункции
Теперь запросите состояние, подставив сохранённый номер задачи и те же хост и ключ:
ДанныеЗадачи = ПолучитьДанныеТранскрипты(
APIХост, APIКлюч, "/v1/transcriptions/" + ИДЗадачи);
Статус = ДанныеЗадачи.Получить("status");
Сообщить("Статус: " + Статус);
Пока задача находится в очереди или обрабатывается, проверяйте её с интервалом, например раз в 15–30 секунд. Когда статус станет done, можно забирать результат. Проверку удобно выполнять регламентным заданием: пользователь продолжает работать в 1С, пока запись расшифровывается.
Шаг 5. Получите текст и сохраните его в 1С
Для готовой задачи вызовите GET /v1/transcriptions/<id>/result. Текст находится в data.text; та же вспомогательная функция уже возвращает содержимое data:
Если Статус = "done" Тогда
Результат = ПолучитьДанныеТранскрипты(
APIХост, APIКлюч,
"/v1/transcriptions/" + ИДЗадачи + "/result");
ТекстРасшифровки = Результат.Получить("text");
Сообщить(ТекстРасшифровки);
// Запишите текст в реквизит или связанный документ вашей конфигурации.
КонецЕсли;
Результат также содержит segments: фрагменты текста со спикерами и временными отметками. Если нужна просто расшифровка для карточки звонка, используйте text. Если делаете просмотр с привязкой к аудио, сохраните и сегменты.
В рабочей интеграции записывайте полученный текст только после успешного ответа API. Место хранения и правила доступа к расшифровке определяются вашей конфигурацией 1С.
Шаг 6. Автоматизируйте обработку записей
Для каждой отправленной записи храните номер задачи, текущий статус и связь с исходным документом. Регламентное задание проверяет незавершённые задачи, получает готовый текст и обновляет соответствующую запись.
Для повторов одной отправки используйте один Idempotency-Key. В примере UUID создаётся при каждом ручном запуске. В рабочем решении создайте и сохраните его до первой отправки, а при сетевом повторе переиспользуйте. Для другой записи создаётся новый ключ.
Когда записей станет много, вместо опроса можно принимать уведомления о готовности через вебхуки. Права ключа, жизненный цикл задач, загрузка больших файлов и вебхуки описаны в руководстве по API Транскрипты.