Использование Yandex Speechkit для распознавания речи в 1С

Оказалось, что в этом нет ничего сложного.

     Господа! Зная, что здесь сидят мэтры 1С, прошу: не судите строго, это моя первая статья…

     Статья описывает свой небольшой опыт работы с Yandex Speechkit Cloud. Она не претендует на максимально развернутое сообщение об этой системе. Скорее, это даже немного художественная статья, переплетающаяся с технической.

     Однажды я задумал написать для себя проект: телеграм-бота, который помогает вести семейный бюджет. Вроде всего-ничего: арендовал vds на убунте 16.4, развернул postgresql 9.6 и, конечно же, сервер 1С 8.3.12…(не помню по памяти), накидал план-проект и, соответственно, приступил к работе. Во время работы вдруг пришла идея: а почему бы не сделать так: отправлять боту аудиосообщение с командой, скажем, "поступление 5 рублей", после этого речь должна будет преобразовываться в текст и обрабатывать команду? К моменту, когда пришла эта идея, основной модуль по обработке команд из текстовых сообщений был готов.

     Пришла идея и понеслось. Во-первых нужно было решить, какой использовать сервис, который будет преобразовывать речь в текст. Оказалось, что русскую речь преобразовывает только сервис Яндекса.

     Итак, поехали. Буду писать код по частям и комментировать. Код будет содержать также запросы в телеграм.

     Для начала нужно получить файл звукового сообщения с сервера телеграм. Для этого нужно выполнить два GET запроса. У первого запроса метод "getFile", в котором указывается один параметр — "file_id". Значение этого параметра содержится в структуре сообщения (читайте документацию телеграм апи). При выполнении этого запроса сервер телеграм находит нужный нам звуковой файл и дает ему временную уникальную ссылку, которую выдает в ответе. Второй запрос — это получение, непосредственно, самих двоичных данных файла. После получения сохраняем файл.

Звук = СтруктураСообщения.voice;
Запрос = Новый HTTPЗапрос(BotID + "/getFile?file_id=" + Звук.file_id);
Ответ = Соединение.Получить(Запрос);
СтрокаОтвет = Ответ.ПолучитьТелоКакСтроку();
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаОтвет);
Структура = ПрочитатьJSON(Чтение);

Запрос = Новый HTTPЗапрос("/file/" + BotID + "/" + Структура.result.file_path);
Ответ = Соединение.Получить(Запрос);
ДД = Ответ.ПолучитьТелоКакДвоичныеДанные();

Файл = ПолучитьИмяВременногоФайла("ogg");
ДД.Записать(Файл);

     На этом останавляваться не будем. Кому интересно — читайте документацию.

     Вот, у нас есть звуковой файл. Такие голосовые сообщения хранятся в формате .ogg, что очень удобно ввиду их небольших размеров, а также того, что Яндекс также по-умолчанию принимает именно этот формат файла. Теперь нам необходимо авторизоваться в Яндекс облаке. Во-первых, нужно похимичить с созданием платежного аккаунта, созданием каталога, назначении ему прав. Обо всём написано здесь. Четвертый пункт в этой инструкции гласит, что нужно получить IAM-токен. Здесь самое интереное: IAM-токен действителен в течение 12 часов. Получается, что его нужно периодически обновлять. Здесь описано, как это сделать. Для обновления IAM-токена нужен постоянный пользовательский OAuth-токен, который можно получить на той же странице, перейдя по ссылке в пункте 2 на вкладке API. Всё, самое сложное позади;)

     Так как IAM-токен действителен в течение 12 часов, то сначала я сделал регламентное задание. Но практика показала, что он действует меньше. Поэтому я сделал, чтобы он обновлялся при получении каждого голосового сообщения. Ничего страшного, пусть пашет;) Итак, для обновления токена создается https соединение с доменом "iam.api.cloud.yandex.net" и стандартными портами и выполняется один простой POST-запрос "/iam/v1/tokens". Заголовок один, который гласит, что мы отправляем данные в формате json. В теле запроса указываем один параметр "yandexPassportOauthToken" и в значение этого параметра указываем наш OAuth-токен. В ответе на такой запрос получаем новенький IAM-токен.

Процедура ОбновитьIAMЯндекс()

СоединениеЯндекс = Новый HTTPСоединение("iam.api.cloud.yandex.net", 443, , , , 20, Новый ЗащищенноеСоединениеOpenSSL(), Неопределено);

Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type","application/json");
Запрос = Новый HTTPЗапрос("/iam/v1/tokens",Заголовки);
СтрокаТела = "{""yandexPassportOauthToken"": """ + Константы.OAUTHТокен.Получить() + """}";
Запрос.УстановитьТелоИзСтроки(СтрокаТела,КодировкаТекста.UTF8);

Ответ = СоединениеЯндекс.ОтправитьДляОбработки(Запрос);
СтрокаОтвет = Ответ.ПолучитьТелоКакСтроку();
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаОтвет);
СтруктураОтвета = ПрочитатьJSON(Чтение);

Константы.IAMТокенЯндекс.Установить(СтруктураОтвета.iamToken);

КонецПроцедуры

     Итак, ещё одна часть завершена. Теперь, наконец, самое интересное — отравить яндексу запрос на распознавание речи. Ах да, ещё нюанс… Помните, что нужно было создать каталог в Яндекс облаке? Нам нужен ID этого каталога. Это совсем не сложно — смотрите здесь.

     И финишная прямая. Создаем новое https соединение с доменом "stt.api.cloud.yandex.net"и стандартными портами. Создаем POST-запрос "/speech/v1/stt:recognize/". В заголовках указываем стандартный "Content-Type=application/json", А также наш IAM-токен. Имя заголовка "Authorization", значение — "Bearer " + наш токен. В параметрах запроса только один обязательный — "folderId", в значение которого вписываем ID нашего каталога. О других параметрах читайте в документации. В тело запроса вставляем наши двоичные данные, полученные с сервера телеграм.

СоединениеЯндекс = Новый HTTPСоединение("stt.api.cloud.yandex.net", 443, , , , 20, Новый ЗащищенноеСоединениеOpenSSL(), Неопределено);
Заголовки = Новый Соответствие();
Заголовки.Вставить("Authorization", "Bearer " + Константы.IAMТокенЯндекс.Получить());
Заголовки.Вставить("Content-Type", "application/json");
Запрос = Новый HTTPЗапрос("/speech/v1/stt:recognize/?topic=general&folderId=" + Константы.ИДПапкиЯндекс.Получить() + "&lang=ru-RU",Заголовки);
Запрос.УстановитьТелоИзДвоичныхДанных(ДД);
Ответ = СоединениеЯндекс.ОтправитьДляОбработки(Запрос);
СтрокаОтвет = Ответ.ПолучитьТелоКакСтроку();

Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаОтвет);
СтруктураОтвета = ПрочитатьJSON(Чтение);
ТекстСообщения = СтруктураОтвета.result;

     Всё. В ответе на последний запрос будет результат — строка. После этого делаем с этой строкой всё, что душе угодно;)

     Итак, организовать распознавание речи в текст сделать не так уж сложно. Конечно, не во всяком бизнесе это пригодится. Но зато мне очень круто говорить своему боту, а он делает всё, что я ему скажу;)

     Полный листинг того, что получилось, прилагаю внизу. Если вам оказалась эта статья полезной и интересной, или же у вас есть объективные отзывы и комментарии, буду рад о них узнать. Если статья окажется полезной, то в дальнейшем напишу про прочие фишки, которые я использовал при создании бота, а, может, даже и про то, как этот бот создается. И ещё раз прошу: не судите строго.. Всем спасибо за внимание!

Функция ПолучитьТекстИзГолосовогоСообщения(СтруктураСообщения)
Если СтруктураСообщения.Свойство("voice") Тогда
// получаем уникальный код звукового файла
Звук = СтруктураСообщения.voice;
Запрос = Новый HTTPЗапрос(BotID + "/getFile?file_id=" + Звук.file_id);
Ответ = Соединение.Получить(Запрос);
СтрокаОтвет = Ответ.ПолучитьТелоКакСтроку();
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаОтвет);
Структура = ПрочитатьJSON(Чтение);

// получаем двоичные данные
Запрос = Новый HTTPЗапрос("/file/" + BotID + "/" + Структура.result.file_path);
Ответ = Соединение.Получить(Запрос);
ДД = Ответ.ПолучитьТелоКакДвоичныеДанные();

// обновляем IAM-токен
ОбновитьIAMЯндекс();

// получаем готовый результат
СоединениеЯндекс = Новый HTTPСоединение("stt.api.cloud.yandex.net", 443, , , , 20, Новый ЗащищенноеСоединениеOpenSSL(), Неопределено);
Заголовки = Новый Соответствие();
Заголовки.Вставить("Authorization", "Bearer " + Константы.IAMТокенЯндекс.Получить());
Заголовки.Вставить("Content-Type", "application/json");
Запрос = Новый HTTPЗапрос("/speech/v1/stt:recognize/?topic=general&folderId=" + Константы.ИДПапкиЯндекс.Получить() + "&lang=ru-RU",Заголовки);
Запрос.УстановитьТелоИзДвоичныхДанных(ДД);
Ответ = СоединениеЯндекс.ОтправитьДляОбработки(Запрос);
СтрокаОтвет = Ответ.ПолучитьТелоКакСтроку();

Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаОтвет);
СтруктураОтвета = ПрочитатьJSON(Чтение);
Возврат СтруктураОтвета.result;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции

Процедура ОбновитьIAMЯндекс()

СоединениеЯндекс = Новый HTTPСоединение("iam.api.cloud.yandex.net", 443, , , , 20, Новый ЗащищенноеСоединениеOpenSSL(), Неопределено);

Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type","application/json");
Запрос = Новый HTTPЗапрос("/iam/v1/tokens",Заголовки);
СтрокаТела = "{""yandexPassportOauthToken"": """ + Константы.OAUTHТокен.Получить() + """}";
Запрос.УстановитьТелоИзСтроки(СтрокаТела,КодировкаТекста.UTF8);

Ответ = СоединениеЯндекс.ОтправитьДляОбработки(Запрос);
СтрокаОтвет = Ответ.ПолучитьТелоКакСтроку();
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаОтвет);
СтруктураОтвета = ПрочитатьJSON(Чтение);

Константы.IAMТокенЯндекс.Установить(СтруктураОтвета.iamToken);

КонецПроцедуры

26.08.2026 обновлено. В процедуре обновления IAM-токена изменил метод получения ответа. Теперь вместо создания временного файла использую объект HTTPОтвет.

31 Comments

  1. for_sale

    Желательно давать ссылку на оригинальный апи от производителя, этот сайт тлгрм, насколько я понимаю, с телеграмом не аффилирован и там могут быть как минимум устаревшие данные а как максимум что-нибудь злонамеренное.

    Reply ↓
  2. for_sale

    Но в целом спасибо за статью, интересно!

    Reply ↓
  3. RomanCrow13

    (1)Согласен, поправлю.

    Reply ↓
  4. ltfriend

    А зачем в ОбновитьIAMЯндекс используется временный файл?

    Reply ↓
  5. AzagTot

    Это здорово, что появляются такие работы!

    Хочется застать то время, когда появится полноценный голосовой интерфейс в операционной системе и, конечно, в программе 1С (Предприятие и Конфигуратор).

    Представьте себе — вы лежите на диване и «плюёте в потолок» а перед вами трёхмерная голограмма конфигуратора 1С и вы голосом даёте команды для написания программы или правки формы).

    Интересно, когда настанет это время…

    Reply ↓
  6. skv_79

    Спасибо, интересно

    Reply ↓
  7. RomanCrow13

    (4)На самом деле правда не зачем. Просто хотел показать, что так тоже можно. Исправлю, чтобы глаза не мозолило)

    Reply ↓
  8. Darklight

    Здорово, но, как мне кажется — тут всё упрётся в первую очередь в качество распознавания речи. На мой взгляд, оно должно идти по заранее заданной карте ожиданий ключевых слов (что-то типа карты правил синтаксического разбора, но для звука) — понятно, что внутри сервиса Яндекса есть своя такая карта с кучей вариантов паттернов произношение, но она заточена на отдельные слова и простые фразы, а не на специфику бизнес-логики команд. Вот если бы можно было загружать свою карту лексического разбора (свою семантику команд) и получать ответ уже скомпонованный строгим образом согласно данной семантики — вот это было бы здорово и продвинуло бы применение данного сервиса в реальных задачах голосового управления. А так всё будет сводится к тому, чтобы писать сложные лексические анализаторы той абракадабре, которую пришлёт сервис распознавания — причём без каких-либо вариантов ветвления распознавания — когда получается околесица и хочется получить иные варианты толкования в надежде что они окажутся более подходящими. А значит такое управление будет часто давать сбои — что очень негативно скажется на его практическом применении.

    Жаль, что в статье не приведены примеры тестов и статистика корректности распознавания.

    Ну и скоростные замеры были бы тут тоже уместны – ибо, в таком сложносочленённом тандеме потенциально не шустрых цифровых участников (посредников) скорость может заметно снижаться. А для устного разговора с компьютером — скорость реакции не менее важна, как и точность — иначе дальше чем как кратковременное завлечение — это дело не пойдёт. Ну разве что слепым будет ещё интересно — так сказать — от безысходности 🙁

    Вообще — подобный сервис уже надо бы встраивать в платформу 1С (желательно без необходимости таскать звуковые семплы в web и обратно, хотя как вариант — можно допустить наличие отдельного сервера в сети компании — тот же сервер взаимодействий для этой роли вполне подходит). Конечно в ближайшие годы этого ожидать от компании было бы излишне наивно — но через пару десятилетий — голосовое управление и ввод текста явно должно стать мировым трендом в программном обеспечении!

    Reply ↓
  9. RomanCrow13

    (8)

    Насчет качества: согласен, что под бизнес-логику механизм не заточен. Конечно, при отправке запроса в параметр «topic» можно указать языковую модель, но самому описать эту модель нельзя. И, думаю, это трудоемкий процесс.

    Тесты и статистику привести был бы рад. но дело в том, что я перестал работать над проектом несколько месяцев назад. Всё здорово да, но отдавать 150 р/мес за vds с минималками оказалось менее целесообразно, чем покупку приложения за 300 р насовсем. Конечно, можно провести тесты локально, подумаю. Может, в следующей статье.

    Насчет последнего пункта согласен полностью. Ждать от 1С распознавание речи в близжайшие года крайне безумно оптимистично.

    Reply ↓
  10. hasp_x

    Наглядный пример того, что лентяи двигают прогресс:))

    Reply ↓
  11. blackhole321

    (8)

    Вообще — подобный сервис уже надо бы встраивать в платформу 1С (желательно без необходимости таскать звуковые семплы в web и обратно, хотя как вариант — можно допустить наличие отдельного сервера в сети компании — тот же сервер взаимодействий для этой роли вполне подходит).

    Тогда можно использовать что-то типа: https://developer.microsoft.com/ru-ru/windows/speech

    Reply ↓
  12. YanTsys

    (5) На языке мозоли будут…

    Reply ↓
  13. chebser

    (12) а в коде — больше мата

    Reply ↓
  14. Darklight

    (11)Да, тут скорее всего нужно партнёрство. Разрабатывать голосовой сервис с нуля дело хлопотное (но возможное, если бы, скажем, компания 1С захотела распространить сервис не только на одну линейку своих продуктов, а как, Микрософт или Яндекс внедряла бы сервис в диверсифицированную линеку своих продуктов, и предлагала свой API для использования сторонним партнёрам и частным лицам; но компания 1С не ведёт такую политику — её бизнес унитарно сосредоточен в нескольких областях, которые мало между собой пересекаются).

    Значит, нужно выбирать иного вендора, который смог бы предоставить свой сервис для встройки. Причём не только через облачные технологии, но и смог бы лицензировать сам движок.

    Компании 1С проще договориться с отечственными вендорами, чем с западными, причём гораздо проще договориться с Яндексом, чем с Микрософтом (у которого на 1С есть «зуб» за отказ в продаже 1С: Предприяте мелкомягним).

    Да и на фоне указания «партии» на импортозамещение — вероятность партнёрства с любым западным вендором вообще очень мала! А отечественных, предоставляющих, голосовые сервисы — по пальцам одной руки пересчитать можно — и, по большей части, все они очень слабы. Но если в них вложиться (а деньги, компания 1С, наверняка найти смогла бы) — то не одним Яндексом можно было бы обойтись. Именно так бы я на месте Нураливых и сделал бы — это классический мировой подход — приобретение небольших компаний с перспективными технологиями, нуждающихся в финансировании.

    Так или иначе — через 10-20 лет потребность в голосовых ассистентах будет куда выше, чем сейчас — а это уже не просто голосовое управление, это и встроенный интеллектуальный разбор команд и их математически осмысленное (по заложенной модели) исполнение. Я ведь не зря выше написал про карту ожидаемых ключевых слов — карту лексико-фонетического разбора — это ключевой элемент функционирования голосовых ассистентов.

    Так что, уже в ближайшем будущем серьёзному ПО без таких голосовых сервисов не обойтись. Но на их разработку нужно время — даже на доведение до ума полуготовых разработок — скорее сего потребуется не менее 5-10 лет. Так что, таким проектом правильно было бы начинать уже сейчас. Чтобы через 10 лет предложить хотя бы примитивное голосовое решение внутри платформы 1С Предприятие 8.5, а к 8.6 создать уже вполне удобного и практичного голосового ассистента, который на голову должен превосходить то, что сейчас есть на рынке — чтобы иметь реальное практическое повседневное и серьёзное применение в бизнес приложениях

    Reply ↓
  15. Darklight

    (9)

    Конечно, при отправке запроса в параметр «topic» можно указать языковую модель, но самому описать эту модель нельзя

    Плохо, что нельзя. Сложно — наверняка, но без этого — это всё просто лишь развлечение — серьёзное применение практически исключено. Но раз Яндекс такой возможности не даёт — то грош цена такому сервису 🙁 Это говорит лишь о сырости данного сервиса. Видимо тут ещё десятилетия понадобятся, чтобы довести его до ума.

    Хм — интересно было бы сравнить возможности с конкурентами, рассмотреть альтернативные API — хоть от того же микрософта (как предложено в соседнем посте) — там, кстати, есть возможности хоть примитивно, но настраивать грамматику фонетического разбора (причём применение фала граматики SRGS даёт уже приемлемую универсальность; жаль только, что у сервиса, вроде как, пока не всё хорошо с поддержкой русского языка).

    Ждать от 1С распознавание речи в ближайшие года крайне безумно оптимистично

    В ближайшие годы — да. Но если за 20 лет компания так и не анонсирует подобного сервиса — то вот это будет уже глупо с её стороны

    Но да — 20 лет срок ого-го как не малый 8-ка столько может и не проживёт…

    Reply ↓
  16. Crazy_Max

    (15)Когда вышла 8-ка, самым распространённым анекдотом про неё было: «Судя по изменениям в 8-ке по сравнению с 7.7, можно с уверенностью утверждать, что 9-я версия будет с 3-мерным интерфейсом и голосовым управлением».

    Кто ж знал, что это будет не шутка?

    Мысли имеют свойство материализовываться…

    Reply ↓
  17. Darklight

    (16)Вначале нулевых многие грёзили киберфантастикой (в на основе литературных и кинематографических образов, созданных в третьей четверти XX века) — мол ещё несколько десятилетий и ПО преобразится — уйдёт в виртуальное пространство, где управление будет голосовое или через манипулирование 3D структурами). Десятилетия шли — а воз и ныне там. Но, правда с голосовым управлением всё-таки ситуация сейчас активно начала двигаться в практическом применении. В MS Office голосового интеллектуального ассистента встроят уже в следующем поколении, ну а в смартфонах и умных колонках он уже появился, и относительно активно используется потребителями (а ещё в смарт телевизорах — но тут меньше).

    Голосовой сервис можно встроить в 8-е поколение платформы — как я упомянул выше — центр взаимодействий для этого очень хорошо подходит. Но просто встроить голосовой сервис мало — нужно встраивать голосового интеллектуального ассистента — который смог бы относительно осмыслено взаимодействовать с голосовым сервисом на пользовательском уровне (а на программном уровне имел бы относительно не очень сложный API своего конфигурирования).

    Хотя я, за пределами, смартфонов, пока не вижу в голосовых ассистентах большого смысла — на мой взгляд постоянно управлять голосом — не самое удобное занятие (хотя, тут дело в правильном маркетинге, ну и от качества таких сервисов много зависит — пока качество так себе, особенно вне английского языка). Поигрался я как-то с голосовым управлением на современных смарт-тв — и бросил это дело — с пульта быстрее и удобнее выходит — ну кроме набора текста для выполнения поиска — но я редко этим пользуюсь на ТВ, даже на смартфоне (где это приходится делать часто) мне проще текст вбить на мелких экранных клавишах, чем вводить его голосом — ошибок меньше, понимания больше, ну или, может, я просто не хочу выглядеть со стороны сумасшедшим — болтая со смартфоном — хотя идущие и говорящие в пустоту люди — уже не вызывают подобных ассоциаций — люди привыкли к наличию беспроводной малозаметной гарнитуры и общении на ходу — привыкнут со временем и к разговорам со смартфоном/телевизором/компьютером…. но если рядом так несколько людей заведут активную беседу — шум и гам будет ещё тот….

    Но всё равно — будущее за голосовыми смарт ассистентами — да может фиг с ними с голосовыми — вообще за интеллектуальными смарт ассистентами, способными предугадывать дальнейшие действия и будущие желания пользователей — быстро предлагая им то, в чём они сейчас нуждаются и ответы на вопросы, которые их беспокоят — пусть даже общение будет вне звуковой формы.

    Да и программистам в IDE такие ассистенты, помогающие быстро создавать код и проводить его анализ и рефакторинг — были бы весьма полезны — вот это уже наверное да — задел для 9-го поколения платформы 1С: Предприятие — лет так через 30-50 — и вряд ли раньше 🙁

    Reply ↓
  18. Lion_LexXx

    Добрый день! Подскажите пожалуйста как сделать запрос на синтез речи. По аналогии с распознаванием речи делаю, распознавание речи работает, а синтез речи возвращает ошибку «404 page not found».

    АдресСервера = «tts.api.cloud.yandex.net»;
    iamToken = «ХХХХХХХХХХХХХХХХХХХХХХХХХХХХ»;
    folderId = «ХХХХХХХХХХХХХХХ»;
    ssl = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows( СпособВыбораСертификатаWindows.Выбирать), Новый СертификатыУдостоверяющихЦентровWindows());
    
    СоединениеЯндекс = Новый HTTPСоединение(АдресСервера, 443, , , , 20, ssl, Неопределено);
    Заголовки = Новый Соответствие();
    Заголовки.Вставить(«Authorization», «Bearer » + iamToken);
    Запрос = Новый HTTPЗапрос(«/speech/v1/tts:synthesize/?text=Hello» + «&lang=en-US» + «&folderId=» + folderId ,Заголовки);
    Ответ = СоединениеЯндекс.ОтправитьДляОбработки(Запрос);
    Сообщить(«Ответ.КодСостояния » + Ответ.КодСостояния);
    СтрокаОтвет = Ответ.ПолучитьТелоКакСтроку();
    
    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(СтрокаОтвет);
    СтруктураОтвета = ПрочитатьJSON(Чтение);
    result = СтруктураОтвета.result;

    Показать

    В соответствии с инструкцией из заголовков убрал:

    Заголовки.Вставить(«Content-Type», «application/json»);

    Инструкция генерации речи:

    https://cloud.yandex.ru/docs/speechkit/tts/request

    Reply ↓
  19. RomanCrow13

    (18)

    Привет! Столкнулся с этой же проблемой. Хотел сделать синтезирование речи, чтобы потом сообщали об остатках аудиосообщением. Хотя в Curl всё отлично срабатывает.

    Но, во-первых, вижу, что ты отправляешь запрос не правильно. Нужно вписывать параметры в тело запроса, а не в сам запрос. Так запрос должен быть просто «/speech/v1/tts:synthesize/». Тело пишешь строкой (по аналогии получения iam-токена), далее отправляешь для обработки.

    Но и это у меня не срабатывает. Я грешу на то, что текст сообщения нужно перекодировать в url, но и даже это у меня не сработало. Скорее всего нужно правильно написать строку параметров запроса…

    Reply ↓
  20. RomanCrow13

    (19)

    Добавка (только что проверил): Если убрать content-type=application/jsob, то по-умолчанию встанет application/octet-stream

    Reply ↓
  21. Lion_LexXx

    (19)

    Ответ техподдержки Яндекс:

    Служба поддержки

    Здравствуйте!

    Вероятнее всего в вашем запросе генерируется некорректный URL, который приводит к ошибке 404 NOT FOUND.

    Рекомендуем вам проверить работу с использованием cURL по примеру из документации: https://cloud.yandex.ru/docs/speechkit/tts/request#wav

    Примеры использования 1С для работы с API вы можете найти в интернете, например:

    https://ediweb.com/ru-ru/support/kb/403

    https://helpme1c.ru/rabota-s-http-zaprosami-get-i-post-v-yazyke-1s-8-3-8-2-v-primerax#ref_c_6

    Reply ↓
  22. Lion_LexXx

    (20)

    octet-stream

    application/octet-stream стандарт пересылки, подразумевающий бинарное содержимое файлов?

    Reply ↓
  23. RomanCrow13

    (21)

    В общем я написал запрос к Curl и выполнил в 1С помощью ЗапуститьПриложение()

    Reply ↓
  24. Lion_LexXx

    (19) Получилось!

    В заголовок вставил:

    Заголовки.Вставить(«Content-Type», «application/x-www-form-urlencoded;»);

    Рабочий код:

    АдресСервера = «tts.api.cloud.yandex.net»;
    iamToken = «ХХХХХХХХХХХХХХХХХХХХХХХХХХХХ»;
    folderId = «ХХХХХХХХХХХХХХХ»;
    
    ssl = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows( СпособВыбораСертификатаWindows.Выбирать), Новый СертификатыУдостоверяющихЦентровWindows());
    
    СоединениеЯндекс = Новый HTTPСоединение(АдресСервера, 443, , , , 20, ssl, Неопределено);
    Заголовки = Новый Соответствие();
    Заголовки.Вставить(«Authorization», «Bearer » + iamToken);
    Заголовки.Вставить(«Content-Type», «application/x-www-form-urlencoded;»);
    
    СтрокаТела =
    «text=Привет мир!» +
    «&lang=ru-RU» +
    «&folderId=» + folderId
    ;
    
    Запрос = Новый HTTPЗапрос(«/speech/v1/tts:synthesize», Заголовки);
    
    Запрос.УстановитьТелоИзСтроки(СтрокаТела,КодировкаТекста.UTF8);
    ТелоКакСтрока = Запрос.ПолучитьТелоКакСтроку();
    
    Ответ = СоединениеЯндекс.ОтправитьДляОбработки(Запрос);
    Сообщить(«Ответ.КодСостояния » + Ответ.КодСостояния);
    СтрокаОтвет = Ответ.ПолучитьТелоКакСтроку();
    ДвоичныеДанныеОтвет = Ответ.ПолучитьТелоКакДвоичныеДанные();
    ИмяФайла = «C:yandexspeechYandex.ogg»;
    ДвоичныеДанныеОтвет.Записать(ИмяФайла);

    Показать

    Reply ↓
  25. script

    Да ничего здесь сложного нет.

    Посмотрите какие функции чаще всего выполняют пользователи:

    1. Найти и открыть какой то документ.

    2. Создать новый/справочник документ и заполнить его.

    3. Сформировать отчет за период и с отборами.

    Даже, описанная в этой статье, технология уже позволяет это реализовать.

    Представьте это в виде расширения типа:

    Бухгалтер говорит: Эй 1С, Найди и открой расходную номер 123 от 27.08.

    Уже от этого бухи просто поплывут от изумления.

    К 8-марта можно ради прикола сделать или 1-апреля

    Reply ↓
  26. RomanCrow13

    (25)

    Хах)

    В принципе интересно. Нужно придумать только, как в 1С захватить звук. Скорее всего надо писать внешнюю компоненту с использованием OpenAl. Попробую что-нибудь такое сделать)

    Reply ↓
  27. DO_WHILE_LOOP
  28. Crazy_Max

    (17)

    многие грёзили киберфантастикой

    Честно говоря, я очень надеюсь на какие-то нейроинтерфейсы вместо классических органов чувств и методов воздействия. Они то же имеют неплохое развитие сейчас, и в перспективе должны быть гораздо комфортнее в использовании: они не должны перекрывать естественных каналов взаимодействия с реальностью. 3Д, дополненная реальность — вообще плохо приживается, отнимая основной наш канал получения информации. Голос то же не очень хорош тем, что требуется со стороны информационной системы постоянно усложнять логику для повышения результативности взаимодействия. А вот нейроинтерфейс вместо этого должен позволять нашему мозгу неограниченно развивать скилл взаимодействия с компьютером.

    Reply ↓
  29. Darklight

    (28)Дополненная реальность как раз имеет высокие перспективы развития и основные каналы связи с окружающим миром она как раз не отнимает. Нейроинтерфейсы — это пока вообще за гранью научного прогресса — всё что существует на практике- полная чушь, пригодная разве что как помощь инвалидам — просто от безисходности.

    Полное погружение в VR — вещь перспективная — но ещё более далёкая, чем простые нейроинтерфейсы. А ограниченное погружение в 3D — вещь «сама в себе» — определённые перспективы имеет — но лишь в узких кругах — поэтому реально не получит распространения.

    Ещё есть управление жестами (в т.ч. через камеры) — штука тоже очень ограниченная по применению, но её не стоит совсем сбрасывать со счетов — у неё тоже есть свои перспективы применения и реальная нынешняя практика использования.

    Голосовое управление — конечно же тоже очень ограничено — но у него есть реальная практика применения — она будет расширяться, но вряд ли до конца века сможет занять весомую долю рынка систем взаимодействия человека и компьютера (а в следующем веке — уже возможности AR должны с лихвой перекрывать все другие способы взаимодействия, а к концу XXII может и нейроинтерфейсы подтянутся — но я бы не стал расссчитывать на их более ранее применение).

    Другое дело — это то, что вторая половина XXI века теъхнологически будет нацелена на рост возможностей AI и глубины его применения при взаимодействии с пользователями. Что приведёт к тому, что, к концу века, количество информации, требующей ввода от человека и количество поступающих от него команд (как и вообще количество профессиональных операторов ПК) существенно сократится — на порядки сократится. Компьютеры буквально всё будут понимать с полуслова — и выполнять огромное число операций, не требующих прямого управления сто стороны человека. Поэтому, то как человек будет взаимодействовать с компьютером — будет, скорее всего, не так важно — и простого жестового и голосового управления может быть вполне достаточно (+ широкие возможности визуализации AR).

    Более того, эра XXII века — будет царством предсказания — когда AI будет предсказывать то, что нужно будет людям и предоставлять результат заранее — ещё до того,как будет отдана команда. К концу XXII века должна наступить тотальная эра телепатических систем — это следующее поколение развития компьютеров — предсказано, что оно настанет после широкого распространнения квантовых компьютеров (предыдущее поколение), правда технологии квантовых вычислений пока сильно буксуют — и скорее всего ситуация будет медленно меняться на протяжении XXI века — но в XXII всё должно перемениться (с квантовыми компьютерами или без них — эпоха телепатических систем должна будет настать). Вот тогда нейроинтерфейсы бубут очень востребованы — только начинаешь складывать мысль, что тебе хочется — а AI уже всё предугадал и подал тебе на «блюдечке с голубой каёмочкой».

    Поэтому AI ассистентов нужно начинать развивать уже сейчас — они важнее — чем голосовое управление!

    Reply ↓
  30. the1

    (13) Больше? В смысле, он и сейчас у Вас там есть? ))

    Reply ↓
  31. chebser

    (30) у меня нет, но в чужом коде попадался

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *