Сохраняет параметры доступа к облачному сервису работы с речью для текущего сеанса.
Синтаксис
УстановитьПараметрыВнешнегоПодключенияСеанса(<Параметры>)Полное описание, параметры и ограничения
МенеджерРаботыСРечью.УстановитьПараметрыВнешнегоПодключенияСеанса (SpeechProcessingManager.SetSessionExternalConnectionParameters)
МенеджерРаботыСРечью (SpeechProcessingManager)
УстановитьПараметрыВнешнегоПодключенияСеанса (SetSessionExternalConnectionParameters)
Доступен, начиная с версии 8.3.23.
Синтаксис:
УстановитьПараметрыВнешнегоПодключенияСеанса(<Параметры>)
Параметры:
<Параметры> (обязательный)
Тип: ПараметрыВнешнегоПодключенияРаботыСРечью.
Параметры доступа к облачному сервису распознавания в информационной базы (для текущей области, если для сеанса определены разделители).
Поле АдресСервера должно быть заполнено обязательно.
Если Токен не установлен, будет получен список публичных моделей.
Описание:
Сохраняет параметры доступа к облачному сервису работы с речью для текущего сеанса.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (сервер).
Использование в версии:
Доступен, начиная с версии 8.3.23.
Методическая информация
Практические примеры
Зарегистрировать только свой сеанс и проверить настоящие параметры без вывода токена
Пустой собственный сеанс регистрируется настоящим аккаунтом. Полученные параметры копируются в отдельный изменяемый объект и действуют только в этом сеансе; проверки подтверждают отсутствие сохраняемой регистрации базы.
Где и как запускать
Полный модуль обычной формы собственной обработки УчебноеПодключениеРечи85.Пульт; толстый клиент, новая отдельная база УчебноеПодключениеРечи85.
Подготовка
Для каждого урока создайте отдельную новую пустую файловую базу с именем конфигурации УчебноеПодключениеРечи85, платформа8.5.1.1343. Не переименовывайте рабочую УТ/КА/УНФ/БП и не переносите туда служебные данные старой регистрации, модели, грамматики, обмены или задания.
Используйте толстый клиент, Обычное приложение. В конфигураторе: Обработки → УчебноеПодключениеРечи85 → Формы → Пульт, тип Обычная. Основной код — полный модуль этой формы, не код управляемой формы и не серверной команды браузера.
Заранее подготовьте отдельный настоящий аккаунт сервиса речи, его пароль, подтверждённый HTTPS-адрес вашего региона, разрешение на регистрацию и сведения о тарифе. Код не задаёт домен, логин, токен или пароль по умолчанию и не отключает проверку сертификата.
Свой учебный пользователь1С должен иметь Администрирование данных: в обоих уроках чтение настроек базы нужно для проверки границы между базой и сеансом. Не включайте привилегированный режим и не используйте production-аккаунт администратора.
Добавьте реквизиты Согласие типа Булево, УчетнаяЗапись, ПарольСервиса, АдресСервиса и Итог типа Строка неограниченной длины. Выведите флажок согласия и поля строк; многострочный Итог сделайте только для просмотра.
Поле ввода реквизита ПарольСервиса назовите ПолеПароля. ПриОткрытии программно включает его РежимПароля: символы скрываются звёздочками. Это маскировка экрана, не шифрование памяти; не сохраняйте пароль в настройках, файлах, журнале, скриншотах или скопированном коде.
Вставьте полный код своего выбранного урока в пустой модуль формы. ПриОткрытии назначьте соответствующему событию без параметров; ПередЗакрытием — событию обычной формы с параметрами Отказ и СтандартнаяОбработка. Не объединяйте два модуля с одинаковыми обработчиками.
Добавьте перечисленные для урока обычные кнопки. Событию Нажатие каждой назначьте одноимённую процедуру без параметров. Нажмите F7, обновите только новую учебную базу; F7 не доказывает подключение к облаку.
Откройте свою обработку в отдельном новом сеансе. При открытии все поля очищаются и Согласие=Ложь. Введите настоящий аккаунт и адрес вручную, проверьте адрес по своим официальным настройкам и только затем установите согласие.
Исходная база и текущий сеанс должны быть без регистрации. Перед первой записью код проверяет оба набора параметров, непрозрачные данные базы и флаг внешнего расположения. Если что-то уже есть, он отказывается: чужие настройки ради прохождения опыта не очищайте.
Во время опыта не открывайте второе окно, не меняйте разделители или учётную запись и не запускайте другие действия с сервисом. Адреса, токены и непрозрачные данные берутся только из фактических ответов менеджера; сюда не вставляется неизвестный входной объект.
Здесь примеры не запускались в1С, сеть и регистрация не выполнялись: runtimeVerifiedScenarios=0. Реальный доступ, тариф и корректность сертификатов проверяются отдельно пользователем; новые файлы, резервные копии и архивы код урока не создаёт.
Создайте одну обычную кнопку ЗарегистрироватьСеанс. После успешного или неопределённого по ошибке результата повторную регистрацию этот открытый опыт не делает: для нового опыта завершите весь собственный клиент1С и начните новый сеанс.
Перем СвояГотовность;
Перем СвойОпытНачат;
Процедура ПриОткрытии()
СвояГотовность = Ложь;
СвойОпытНачат = Ложь;
Согласие = Ложь;
УчетнаяЗапись = "";
ПарольСервиса = "";
АдресСервиса = "";
Итог = "Подготовьте отдельный настоящий аккаунт и подтверждённый адрес собственного сервиса";
ЭлементыФормы.ПолеПароля.РежимПароля = Истина;
ПроверитьСвойСтенд();
СвояГотовность = Истина;
КонецПроцедуры
Процедура ПроверитьСвойСтенд()
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Не регистрируйте сервис внутри транзакции";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьСвоеСогласие()
ПроверитьСвойСтенд();
Если Не СвояГотовность Или Не Согласие Тогда
ВызватьИсключение "Нужны открытое собственное окно и явное согласие на регистрацию";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьСвойВвод()
ПроверитьСвоеСогласие();
Если Не ЗначениеЗаполнено(УчетнаяЗапись) Или Не ЗначениеЗаполнено(ПарольСервиса)
Или Не ЗначениеЗаполнено(АдресСервиса) Тогда
ВызватьИсключение "Введите реальные логин, пароль и подтверждённый адрес собственного сервиса";
КонецЕсли;
Если НРег(Лев(АдресСервиса, 8)) <> "https://" Тогда
ВызватьИсключение "Этот учебный облачный стенд допускает только заранее подтверждённый HTTPS-адрес";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьСвоеПустоеПодключение()
Если РаботаСРечью.ПолучитьПараметрыВнешнегоПодключенияСеанса() <> Неопределено Тогда
ВызватьИсключение "В этом сеансе уже есть подключение: начните отдельный новый учебный сеанс, не очищайте чужое";
КонецЕсли;
Если РаботаСРечью.ПолучитьПараметрыВнешнегоПодключенияИнформационнойБазы() <> Неопределено
Или РаботаСРечью.ПолучитьДанныеРаботыСРечьюИнформационнойБазы() <> Неопределено
Или РаботаСРечью.ПоддерживаетсяИспользованиеВнешнегоРасположения() Тогда
ВызватьИсключение "В новой учебной базе не должно быть регистрации, моделей или грамматик предыдущего опыта";
КонецЕсли;
КонецПроцедуры
Функция СделатьСвоюКопиюПодключения(Параметры)
Если ТипЗнч(Параметры) <> Тип("ПараметрыВнешнегоПодключенияРаботыСРечью") Тогда
ВызватьИсключение "Нужны настоящие параметры, полученные от менеджера после регистрации";
КонецЕсли;
Если Не ЗначениеЗаполнено(Параметры.АдресСервера) Тогда
ВызватьИсключение "Сервис не вернул адрес: не заменяйте его придуманным endpoint";
КонецЕсли;
Копия = Новый ПараметрыВнешнегоПодключенияРаботыСРечью;
Копия.АдресСервера = Параметры.АдресСервера;
Копия.Токен = Параметры.Токен;
Возврат Копия;
КонецФункции
Процедура ПроверитьСвоиПараметры(Фактические, Ожидаемые)
Если ТипЗнч(Фактические) <> Тип("ПараметрыВнешнегоПодключенияРаботыСРечью") Тогда
ВызватьИсключение "Сохранённое подключение не вернуло типизированные параметры";
КонецЕсли;
Если Фактические.АдресСервера <> Ожидаемые.АдресСервера
Или Фактические.Токен <> Ожидаемые.Токен Тогда
ВызватьИсключение "Сохранённые параметры изменились; секретные значения в сообщение не включаются";
КонецЕсли;
КонецПроцедуры
Процедура ЗарегистрироватьСеанс()
ПроверитьСвойВвод();
Если СвойОпытНачат Тогда
ВызватьИсключение "Этот опыт уже пытался зарегистрировать сеанс. Завершите весь учебный клиент и начните отдельный новый сеанс";
КонецЕсли;
ПроверитьСвоеПустоеПодключение();
Итог = "Регистрация собственного сеанса; прошлый результат сброшен";
ПарольЗапроса = ПарольСервиса;
ПарольСервиса = "";
СвойОпытНачат = Истина;
Попытка
РаботаСРечью.ВыполнитьРегистрациюСеанса(УчетнаяЗапись, ПарольЗапроса, АдресСервиса);
ПарольЗапроса = "";
Параметры = РаботаСРечью.ПолучитьПараметрыВнешнегоПодключенияСеанса();
Если Параметры = Неопределено Тогда
ВызватьИсключение "Регистрация не дала параметры текущего сеанса";
КонецЕсли;
Копия = СделатьСвоюКопиюПодключения(Параметры);
РаботаСРечью.УстановитьПараметрыВнешнегоПодключенияСеанса(Копия);
ПроверитьСвоиПараметры(РаботаСРечью.ПолучитьПараметрыВнешнегоПодключенияСеанса(), Копия);
Если РаботаСРечью.ПолучитьПараметрыВнешнегоПодключенияИнформационнойБазы() <> Неопределено
Или РаботаСРечью.ПолучитьДанныеРаботыСРечьюИнформационнойБазы() <> Неопределено
Или РаботаСРечью.ПоддерживаетсяИспользованиеВнешнегоРасположения() Тогда
ВызватьИсключение "Сеансовый опыт не должен зарегистрировать информационную базу";
КонецЕсли;
Итог = "Получены и пересохранены настоящие параметры текущего сеанса. База осталась без регистрации; токен не показан. Закрытие формы не завершает сеанс";
Исключение
ПарольЗапроса = "";
Итог = "Регистрация или проверка не завершена. Возможное подключение действует только в собственном текущем сеансе; автоматического повторного запроса или сброса через Неопределено нет";
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
СтандартнаяОбработка = Истина;
ПарольСервиса = "";
СвояГотовность = Ложь;
КонецПроцедурыРазбор по шагам
Сначала проверяются собственный стенд, версия, согласие и три реальные непустые строки. В этом облачном учебном опыте нужен HTTPS; сам префикс не подтверждает, что домен принадлежит вашему сервису.
Чтение начальных настроек должно подтвердить отсутствие подключения сеанса и базы. Администрирование данных здесь требуется для контрольного чтения базы, хотя сама регистрация сеанса не помечена этим требованием.
Пароль копируется только в локальную строковую переменную вызова, а поле сразу очищается. Флаг попытки ставится до регистрации: при потере ответа неизвестно, сохранилось ли подключение.
ВыполнитьРегистрациюСеанса вызывается с фактическими логином, паролем и региональным адресом. Метод не возвращает булево подтверждение; результат проверяем отдельным getter, а не выдуманным Истина.
Getter может вернуть Неопределено. Только после этой проверки и проверки типа читаем АдресСервера и Токен; ни одно секретное значение не выводим пользователю.
Новый ПараметрыВнешнегоПодключенияРаботыСРечью создаёт отдельный объект. Два изменяемых поля заполняются фактическими значениями ответа, не выдуманным URL и токеном; копия реально передаётся setter текущего сеанса.
Повторный getter проверяет фактические адрес и токен после сохранения. Отдельные чтения данных базы должны по-прежнему возвращать отсутствие регистрации, а флаг внешнего расположения базы — Ложь.
В успехе и исключении локальная переменная пароля очищается. Повторный платный запрос и недокументированный сброс сеанса через Неопределено не выполняются; закрытие формы очищает лишь поле пароля, не завершает сеанс.
Как проверить результат
Без согласия, заполненного настоящего адреса, аккаунта или пароля регистрации быть не должно. При неправильной базе, версии, активной транзакции или существующем подключении код должен отказать.
С реальным разрешённым аккаунтом ожидаются параметры текущего сеанса правильного типа и повторное равенство двух фактических полей после setter. Никакого заранее заданного токена нет.
После сеансового опыта параметры и непрозрачные данные базы должны оставаться Неопределено. Ложь флага внешнего расположения базы не означает ошибку регистрации отдельного сеанса.
ПарольСервиса должен очищаться до вызова регистрации и оставаться пустым при исключении внутри опыта. Токен и XML регистрации не должны появляться в поле Итог или Сообщить.
Повторное нажатие после начала попытки отклоняется. Для нового независимого опыта завершайте именно собственный сеанс клиента, не рабочую базу другого пользователя.
Полученные параметры ещё не доказывают доступ к закрытой модели, тариф, качество распознавания или успешный сетевой вызов к модели; здесь микрофон, распознавание и синтез не используются.
Ожидаемый результат
Текущий собственный сеанс имеет настоящие проверенные параметры подключения; пустая информационная база не получила сохраняемой регистрации. Секреты не выводятся, завершение сеанса остаётся отдельным действием пользователя.
На что обратить внимание
Завершение обычной формы и завершение сеанса — разные вещи. Зарегистрированный сеанс не обещается отключённым по закрытию этого окна.
Сеансовый setter требует заполненный адрес. Неопределено как его аргумент очистки не документировано; не переносите на него способ отключения базы.
Без токена сеансовое подключение допускает публичные модели. Наличие или отсутствие токена само по себе не доказывает авторизацию в частной модели или действительность тарифа.
РежимПароля скрывает экранные символы, но не шифрует строки в памяти. Обнуление переменной в1С не является гарантированным криптографическим стиранием памяти; не оставляйте дампы, диагностические выгрузки или записи экрана с секретами.
Исключение платформы или сервиса может иметь свои диагностические подробности. Пример не пишет их в файл и не добавляет секреты к сообщению; перед отправкой внешней диагностики пользователь должен проверить её на чувствительные данные.
Настройки текущего сеанса не являются регистрацией всей базы. В разделённой системе контекст области и сеанса должен совпадать; для этого первого опыта используется отдельная база без разделителей.
Идентичное пересохранение собственной копии — работа с реальным типизированным объектом, не проверка сети и не смена аккаунта. Все значения берутся из фактического getter; runtimeVerifiedScenarios=0.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.