Использование 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.2024 обновлено. В процедуре обновления 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 не будет опубликован. Обязательные поля помечены *