При попытке интеграции 1С с облачными сервисами распознавания текста, такими как Google Cloud Vision, разработчики часто сталкиваются с ошибкой INVALID_ARGUMENT при передаче данных в формате Base64. Разберем, почему это происходит и как правильно организовать передачу данных.
Первая и самая частая проблема — избыточная обработка данных перед отправкой. Давайте проанализируем, почему использование КодироватьСтроку при формировании JSON-запроса является избыточным.
Когда мы отправляем запрос к API, мы формируем тело в формате JSON. Строка, содержащая Base64-код, уже является текстовой репрезентацией двоичных данных. Дополнительное применение кодировки URL превращает символы, которые являются частью структуры Base64, в невалидные последовательности для декодера на стороне сервера Google. Запомните: при передаче в теле HTTPЗапрос с заголовком Content-Type: application/json, данные должны быть «чистыми».
Также важно обращать внимание на символы переноса строк. Стандартный метод Base64Строка() в 1С может добавлять символы перевода каретки и переноса строки (CR/LF). API Google ожидает «бесшовную» строку. Для очистки данных используйте следующий подход:
Функция ПодготовитьBase64(ДвоичныеДанныеФайла)
Результат = Base64Строка(ДвоичныеДанныеФайла);
Результат = СтрЗаменить(Результат, Символы.ПС, "");
Результат = СтрЗаменить(Результат, Символы.ВК, "");
Возврат Результат;
КонецФункции
Самая важная деталь, которая часто ускользает от внимания при чтении документации, — это специфическое ограничение Google Vision API. Даже если вы идеально закодируете файл в Base64, сервис может вернуть ошибку при попытке распознавания PDF или TIFF.
Дело в том, что согласно официальной документации Google, распознавание PDF и TIFF документов через синхронные запросы напрямую в теле контента не поддерживается. Эти форматы требуют асинхронной обработки через Google Cloud Storage.
Рассмотрим правильный алгоритм действий:
image.content в вашем JSON-запросе к Vision API, используйте поле source.gcs_image_uri.gs://имя_вашего_бакета/путь_к_файлу.pdf.В процессе работы с файлами мы часто сталкиваемся с невидимыми маркерами. Один из таких — BOM (Byte Order Mark). Если вы сохраняете строку в файл, а потом читаете её обратно, 1С может добавить сигнатуру UTF-8 (в Base64 она выглядит как 77u/ в начале строки). Всегда проверяйте, не попал ли этот префикс в вашу финальную строку перед отправкой в API.
Также обратите внимание на настройки объекта ЗаписьJSON. Использование ЭкранированиеСимволовJSON.Нет может привести к ошибкам, если в вашей строке случайно окажутся спецсимволы JSON. Рекомендуется использовать стандартные настройки и следить за структурой формируемого объекта.
Чтобы успешно распознать текст из PDF, проанализируем ситуацию еще раз:
КодироватьСтроку перед отправкой JSON.image.content — это путь в никуда из-за архитектурных ограничений самого сервиса.Соблюдение этих правил позволит избежать ошибки Base64 decoding failed и успешно интегрировать 1С с современными облачными сервисами обработки изображений.