Работа с переменными
Вы можете использовать переменные для сохранения ответов клиентов и повторного использования этого контента позже в разговоре.
Вы можете также использовать переменные для создания логических выражений, которые динамически направляют клиента по различным путям разговора. Например, сохраните имя клиента в переменной с именем UserName
, и помощник может обращаться к клиенту по имени, пока разговор продолжается.
Переменные также могут быть переданы в другие темы и потоки Power Automate и возвращены из них.
Переменные могут существовать на четырех уровнях или областях действия:
- тема переменные можно использовать только в тех темах, в которых они созданы. Это область действия по умолчанию для создаваемых вами переменных.
- Глобальные переменные можно использовать во всех темах. Вы можете изменить область действия переменной темы, чтобы сделать ее глобальной.
- Системные переменные создаются автоматически вашим вторым пилотом. Они предоставляют больше контекстной информации о разговоре или пользователе. Они доступны во всех темах.
- Переменные среды создаются в Power Platform и доступны только для чтения в Copilot Studio. Они хранят ключи и значения параметров, которые затем служат входными данными для различных других объектов приложения, включая Copilot Studio. Отделение параметров от объектов-потребителей позволяет изменять значения в той же среде или при переносе решений в другие среды. Альтернативный вариант — оставить жестко запрограммированные значения параметров в компонентах, которые их используют.
Типы переменных
Переменная связана с базовым типом. Тип определяет значения, которые может содержать переменная, и операторы, которые можно использовать при построении логического выражения с ней.
Type | Описание: |
---|---|
String | Последовательность символов, используемая для представления текста |
Логический | Логическое значение, которое может быть только true или false |
Число | Любое вещественное число |
Таблицу | Список значений, но все значения должны быть одного типа |
Запись | Коллекция пар имя-значение, где значения могут быть любого типа |
Дата/время | Дата, время, день недели или месяц относительно момента времени |
Выбранный вариант | Список строковых значений с соответствующими синонимами |
Чистого листа | Заполнитель для «нет значения» или «неизвестное значение»; дополнительную информацию см. в разделе Пустые значения в Power Fx |
Тип переменной устанавливается при первом присвоении ей значения. После этого тип этой переменной фиксируется, и ей не могут быть присвоены значения любого другого типа. Например, переменной с заданным начальным значением 1
присваивается тип Число. Попытка присвоить его строковому значению "apples"
приводит к ошибке.
При тестировании второго пилота переменная может временно отображаться как тип неизвестно. Переменной неизвестный еще не присвоено значение.
Порядок переменных определяется сверху вниз на холсте разработки. Узлы в верхней части холста разработки рассматриваются раньше узлов в нижней части.
При создании ветвей с узлами Условие ветви упорядочиваются слева направо. Узлы в крайней левой ветви рассматриваются раньше узлов в крайней правой ветви.
Сущности
Copilot Studio использует сущности для определения определенного типа информации из ответов пользователя. Идентифицированная информация сохраняется в переменной того типа, который подходит для этой информации. В следующей таблице перечислены базовые типы переменных, связанные с предварительно созданными сущностями.
Объект | Тип базовой переменной |
---|---|
Параметры с несколькими вариантами выбора | Выбранный вариант |
Весь ответ пользователя | String |
Возраст | Число |
Логический | Логический |
City | String |
Color | String |
Континент | String |
Страна или регион | String |
Дата и время | Дата/время |
Электронное письмо | String |
Мероприятие | String |
Целое | Целое |
Язык | String |
Money | Число |
Число | Число |
Порядковое число | Число |
Организация | String |
Процент | Число |
Имя человека | String |
Номер телефона. | String |
Точка интереса | String |
Скорость | Число |
State | String |
Улица, дом | String |
Температура | Число |
URL | String |
Толщина | Число |
Почтовый индекс | String |
Настраиваемый объект | Выбранный вариант |
Создание переменной
Любой узел, который предложит вам выбрать переменную в качестве вывода, например узел Вопрос, автоматически создает выходную переменную соответствующего типа.
Совет
Переименуйте узлы, чтобы их было легче идентифицировать. Выберите поле имени узла, чтобы обновить имя напрямую, или выберите значок Дополнительно (…) узла и выберите Переименовать из меню. Вы также можете переименовывать узлы в редакторе кода.
Невозможно переименовать узлы Trigger и Go to шаг .
Имена узлов могут иметь длину до 500 символов.
Выбор сущности для использования
Вопросительные узлы по умолчанию создаются с вариантами ответов с несколькими вариантами ответов. Чтобы использовать другую готовую или настраиваемую сущность, установите флажок Определение и выберите тип информации, которую должен прослушивать помощник.
Изменение имени переменной
Имена переменным назначаются автоматически, когда вы создаете их. Лучше всего давать переменным осмысленные имена, чтобы их назначение было понятно всем, кто должен обслуживать вашего помощника.
Выберите переменную, чтобы открыть ее на панели свойств переменных.
В поле Имя переменной введите новое имя для переменной.
Задание переменной
Обычно узел Вопроса используется для сохранения введенных пользователем данных в переменной. Однако могут возникнуть ситуации, когда вы захотите установить значение самостоятельно. В таких случаях используйте узел Задать значение переменной.
Выберите Добавить узел (+), чтобы добавить узел, затем выберите Управление переменными>Задать значение переменной.
Выберите поле под Задать переменную, затем выберите Создать новую переменную.
Новая переменная создана. Ее тип неизвестен, пока вы не присвоите ей значение.
Для До значения назначьте значение, используя один из следующих вариантов:
- Введите литеральное значение.
- Выберите существующую переменную того же типа. Это действие задает вашей переменной такое же значение, что и у выбранной переменной.
- Используйте формулу Power Fx. Формулы Power Fx полезны для более сложных типов, где нельзя использовать литеральные значения, например для типов "Таблица" и "Запись".
Заметка
Если при установке переменной строкового типа обнаруживается несоответствие между Установить переменную и Значением, появляется сообщение об ошибке и кнопка Исправить несоответствие типов . Нажмите кнопку, чтобы автоматически сгенерировать Copilot Studio формулу Power Fx , которая устраняет несоответствие.
Использование литеральных значений
Вместо выбора значения переменной можно ввести литеральное значение в любую переменную.
Узел пытается интерпретировать литеральные значения в виде строки, числа или логического значения. Например, 123
интерпретируется как число. Если вы хотели, чтобы это интерпретировалось как строковое значение, вы можете заключить это значение в двойные кавычки, например так: "123"
.
В некоторых сценариях или при использовании более сложных типов используйте формулу Power Fx для установки определенного типа.
Панель "Переменные"
На панели Переменные можно просмотреть все переменные, доступные в теме, независимо от того, в каких узлах они определены или используются. Для каждой переменной вы можете выбрать, может ли она получать свое значение из других тем, возвращать свое значение в другие темы или и то, и другое. Вы также можете выбрать переменную для изменения ее свойство на панели Свойства переменной.
Чтобы открыть панель Переменные, в строке меню темы, выберите Переменные.
Панель свойств переменной
На панели Свойства переменных вы можете переименовать переменную, посмотреть, где она используется, или преобразовать ее в глобальную переменную. Однако вы не можете преобразовать ее из глобальной переменной обратно в переменную темы. Вы также можете выбрать, может ли она получать значения из других тем или передавать их значения другим темам.
Чтобы открыть панель Свойства переменной, выберите переменную на панели Переменные. Вы также можете открыть панель Свойства переменной, выбрав переменную в любом узле.
Переменные среды
Переменные среды являются Power Platform концепцией. Переменные среды позволяют использовать базовый сценарий управления жизненным циклом приложения (ALM) для перемещения приложения между средами Power Platform. В этом сценарии приложение остается точно таким же, за исключением нескольких ключевых внешних ссылок, которые различаются в исходной среде и целевой среде.
Используйте переменные среды таким же образом, как переменные темы, глобальные переменные и системные переменные. Одно заметное отличие заключается в том, что переменные среды можно использовать только в режиме только для чтения. Авторы Copilot не могут изменять переменную среды в Copilot Studio. Однако администраторы могут изменять значения переменных среды на портале PowerApps.
Типы переменных среды в Copilot Studio сопоставляются с типами данных PowerApps следующим образом:
Тип в Copilot Studio | Тип в PowerApps |
---|---|
Десятичное число | Число |
JSON | Тип определяется по значению. Если не Json => Не указано (ошибка проверки) |
Текст | string |
Да/нет | Логический |
Источник данных | string |
Секрет | String |
Заметка
Ошибки переменных среды видны в чате Тест и при публикации. Однако эти ошибки не отображаются в списке Тема, поскольку они не являются переменными темы.
Вы не можете создавать или редактировать переменные среды в Copilot Studio. Вы должны использовать портал PowerApps для изменения или установки переменных среды. Из Copilot Studio вы можете использовать панель Переменные для просмотра информации о переменной среды. На панели Переменные также имеется ссылка на собственный интерфейс создания.
Использование переменных среды для секретов Azure Key Vault
Переменная среды может ссылаться на секрет в хранилище ключей Key Vault. Это особый случай переменных среды с уникальными особенностями.
Чтобы создать переменную среды, содержащую секрет, на портале PowerApps вы должны настроить его Key Vault.
В дополнение к конфигурации, указанной выше, необходимо выполнить следующие действия для авторизации Copilot Studio, чтобы прочитать это хранилище ключей Key Vault:
Назначьте роль
Key Vault Secrets User
для приложенияMicrosoft Virtual Agents Service
.Чтобы разрешить всем помощникам из среды доступ к секрету, создайте тег
AllowedEnvironments
в секрете и добавьте разрешенные идентификаторы среды, разделенные запятой.Чтобы разрешить использовать это хранилище ключей Key Vault только определенным помощникам из среды, создайте тег
AllowedCopilots
и поместите идентификатор помощника в формате{envId}/{schemaName}
. В случае нескольких значений разделяйте их запятыми.
Если вы достигли максимального количества символов, но вам все еще нужно добавить дополнительные помощники, добавьте еще один тег с описательным, но уникальным именем (например: AllowedCopilots2
).
Значение секрета кэшируется в среде выполнения диалога в течение пяти минут. Неудачные чтения кэшируются на 30 секунд.
Предупреждение
Добавив секрет в помощник, вы можете раскрыть значение этого секрета всем пользователям, которые могут редактировать помощник в среде, поскольку такие пользователи могут отредактировать помощник, чтобы он возвращал значение в узле SendMessage
.
Системные переменные
Каждый помощник имеет встроенные системные переменные, которые предоставляют дополнительную информацию о разговоре.
Заметка
Дополнительную информацию о переменных голосового помощника см. в разделе Использование голосовых переменных.
В списке показаны не все системные переменные. Вы должны получить доступ к этим скрытым системным переменным с помощью формулы Power Fx.
Чтобы использовать системные переменные в формуле Power Fx, вы должны добавить System.
перед именем переменной. Например, чтобы включить системную переменную User.DisplayName
в формулу, ссылайтесь на нее как System.User.DisplayName
.
Полное имя | Type | Определение |
---|---|---|
Activity.Attachments |
таблица | Файловые вложения, предоставленные пользователем |
Activity.Channel |
вариант | ИД канала текущего разговора |
Activity.ChannelData |
любое | Объект, содержащий содержимое, относящееся к каналу |
Activity.ChannelId |
string | ИД канала текущего разговора, в виде строки |
Activity.From.Id |
string | Уникальный ИД конкретного канала отправителя |
Activity.From.Name |
string | Понятное имя отправителя для конкретного канала |
Activity.Name |
string | Имя события |
Activity.Recipient.Id |
string | Свойство типа входящего действия. |
Activity.Recipient.Name |
string | Представляет отображаемое имя для помощника внутри канала. В контексте канала телефонии значением этой переменной будет номер телефона, к которому прикреплен помощник. |
Activity.Text |
string | Последнее сообщение, отправленное пользователем |
Activity.Type |
вариант | Тип действия |
Activity.TypeId |
string | Тип действия, в виде строки |
Activity.Value |
любое | Открытое значение |
Bot.EnvironmentId |
string | Идентификатор среды помощника |
Bot.Id |
string | Идентификатор помощника |
Bot.Name |
string | Имя вашего помощника |
Bot.SchemaName |
string | Имя схемы помощника |
Bot.TenantId |
string | Идентификатор клиента помощника |
ClientPluginActions |
вариант | Коллекция динамических действий подключаемого модуля клиента для рассмотрения для генеративных действий |
Conversation.Id |
string | Уникальный ИД текущей беседы |
Conversation.InTestMode |
логическое значение | Логический флаг, указывающий, происходит ли разговор в тестовом холсте |
Conversation.LocalTimeZone |
string | Название часового пояса, которое будет использоваться пользователем в формате базы данных часовых поясов IANA |
Conversation.LocalTimeZoneOffset |
datetime | Смещение времени относительно UTC для текущего местного часового пояса |
Error.Code |
string | Код ошибки для текущей ошибки. Примечание: эта переменная поддерживается только в том случае, если триггером является |
Error.Message |
string | Сообщение об ошибке для текущей ошибки. Примечание: эта переменная поддерживается только в том случае, если триггером является |
FallbackCount |
Номер | Эта переменная подсчитывает количество раз, когда тему не удалось сопоставить с пользовательским вводом. Примечание: эта переменная поддерживается только в том случае, если триггером является |
InactivityTimer.Continue |
логическое значение | Логический флаг, указывающий, нужно ли продолжать отсчет таймера. Примечание: эта переменная поддерживается только в том случае, если триггером является |
InactivityTimer.Count |
Номер | Количество срабатываний таймера OnInactivity из-за бездействия пользователя после заданного времени. Примечание: эта переменная поддерживается только в том случае, если триггером является |
LastMessage.Id |
string | ИД предыдущего сообщения, отправленного пользователем |
LastMessage.Text |
string | Предыдущее сообщение, отправленное пользователем |
Recognizer.ExtractedEntities |
вариант | Представляет извлеченные сущности из инициирующего сообщения. Примечание: эта переменная поддерживается только в том случае, если триггером является |
Recognizer.IntentOptions |
вариант | Представляет варианты намерений, когда распознаватель возвращает неоднозначные результаты. Примечание: эта переменная поддерживается только в том случае, если триггером является |
Recognizer.SelectedIntent |
вариант | Представляет намерение, выбранное из распознавателя. Примечание: эта переменная поддерживается только в том случае, если триггером является |
Recognizer.TriggeringMessage.Id |
string | Идентификатор пользовательского сообщения, инициировавшего текущую тему |
Recognizer.TriggeringMessage.Text |
string | Пользовательское сообщение, инициировавшее текущую тему |
Recognizer.MultipleTopicsMatchedReason |
string | Используется для определения причин сопоставления нескольких тем. Примечание: эта переменная поддерживается только в том случае, если триггером является |
User.Language |
вариант | Эта переменная используется для установки языкового стандарта пользователя для каждого разговора. |
SignInReason |
вариант | Используется для определения необходимого варианта входа при запуске темы. Примечание: эта переменная поддерживается только в том случае, если триггером является |
Переменные для интегрированной аутентификации (по умолчанию)
Следующие переменные доступны, если вы настроили помощник для аутентификации с помощью Microsoft. При этом будет использоваться аутентификация Entra ID и разрешены только каналы Teams и PowerApps. Это значение по умолчанию для новых помощников.
Для получения дополнительной информации см. Переменные аутентификации.
Полное имя | Type | Определение |
---|---|---|
User.DisplayName |
string | Отображаемое имя пользователя, который в данный момент общается с помощником. |
User.Email |
string | Адрес электронной почты пользователя, который в данный момент общается с помощником. |
User.FirstName |
string | Имя пользователя, который в данный момент общается с помощником. |
User.Id |
string | Уникальный идентификатор пользователя, который в данный момент общается с помощником. |
User.IsLoggedIn |
логическое значение | Логический флаг, который указывает, аутентифицирован ли пользователь, который в данный момент общается с помощником, или нет. |
User.LastName |
string | Фамилия пользователя, который в данный момент общается с помощником. |
User.PrincipalName |
string | Имя участника-пользователя, который в данный момент общается с помощником. |
Переменные для ручной аутентификации с помощью Generic OAuth 2
Следующие переменные доступны, если вы настроили своего второго пилота на использование поставщика услуг Generic OAuth 2.
Полное имя | Type | Определение |
---|---|---|
User.AccessToken |
string | Токен доступа для пользователя, прошедшего аутентификацию с помощником. |
User.DisplayName |
string | Отображаемое имя пользователя, который в данный момент общается с помощником. |
User.Id |
string | Уникальный идентификатор пользователя, который в данный момент общается с помощником. |
User.IsLoggedIn |
логическое значение | Логический флаг, который указывает, аутентифицирован ли пользователь, который в данный момент общается с помощником, или нет. |
Переменные для ручной аутентификации с помощью Microsoft Entra ID
Следующие переменные доступны, если вы настроили помощник для использования поставщиков услуг Microsoft Entra ID (ранее Azure Active Directory).
Полное имя | Type | Определение |
---|---|---|
User.AccessToken |
string | Токен доступа для пользователя, прошедшего аутентификацию с помощником. |
User.DisplayName |
string | Отображаемое имя пользователя, который в данный момент общается с помощником. |
User.Email |
string | Адрес электронной почты пользователя, который в данный момент общается с помощником. |
User.FirstName |
string | Имя пользователя, который в данный момент общается с помощником. |
User.Id |
string | Уникальный идентификатор пользователя, который в данный момент общается с помощником. |
User.IsLoggedIn |
логическое значение | Логический флаг, который указывает, аутентифицирован ли пользователь, который в данный момент общается с помощником, или нет. |
User.LastName |
string | Фамилия пользователя, который в данный момент общается с помощником. |
User.PrincipalName |
string | Имя участника-пользователя, который в данный момент общается с помощником. |
Переменные для голосовых помощников
Следующие переменные доступны только в голосовых помощниках.
Заметка
Дополнительную информацию о переменных голосового помощника см. в разделе Использование голосовых переменных.
Полное имя | Type | Определение |
---|---|---|
Activity.InputDTMFKeys |
string | Необработанное значение ключа DTMF, полученное от телефонии. |
Activity.SpeechRecognition.Confidence |
Номер | Степень уверенности для всего результата гипотезы ASR, от 0 до 1. |
Activity.SpeechRecognition.MinimallyFormattedText |
string | Слегка отформатированный текст результата гипотезы ASR. Например, Пятьсот долларов. Слова пишутся прописью, но основные заглавные буквы и знаки препинания сохранены. |
Activity.UserInputType |
вариант | Тип входных данных из последних входных данных конечного пользователя. Значение может быть тест, речь или DTMF. |
Conversation.OnlyAllowDTMF |
логическое значение | Логический флаг, указывающий, следует ли перевести IVR в режим «только DTMF» во время выполнения. |
Conversation.SipUuiHeaderValue |
string | Строка заголовка UUI, используемая для передачи контекста в IVR при начале вызова. |
Передача переменных между темами
Когда вы перенаправляете одну тему в другую, вы можете передавать значения переменных между исходной темой и целевой темой. Передача переменных между темами особенно полезна, когда предыдущая тема уже собрала информацию, необходимую для последующей темы. Ваши пользователи оценят, что им больше не придется отвечать на те же вопросы.
Получение значений из других тем
Когда тема определяет переменную (например, с помощью узла «Вопрос»), помощник задает вопрос пользователю для заполнения значения переменной. Если значение уже получено помощником в предыдущей теме, нет причин снова задавать вопрос. Для этих случаев эту переменную можно задать как Получение значений из других тем. Когда другая тема перенаправляет на эту тему, она может передать значение переменной (или литеральное значение) в эту переменную и пропустить этот вопрос. Это приводит к беспроблемному общению пользователя с помощником.
В этом примере мы будем использовать две темы: "Приветствие" и "Разговор с клиентом". Обе темы запрашивают имя клиента. Однако, если тема "Приветствие" запускается первой, тема "Разговор с клиентом" пропускает свой вопрос. Вместо этого она использует значение переменной, переданной из темы "Приветствие".
Вот поток темы "Разговор с клиентом":
Как показано на панели «Тестирование помощника», если эта тема срабатывает первой, система спрашивает пользователя: «Как мне вас называть?» и сохраняет значение в строковой переменной с именем userName
. Переменная userName
также настроена на получение значения из других тем. Тема завершается сообщением: «Желаю вам хорошего дня, {userName}!»
Вот поток темы "Приветствие":
Как показано на панели «Тестирование помощника», если эта тема срабатывает первой, система спрашивает пользователя: «Как вас зовут?» и сохраняет значение в строковой переменной с именем UserName
. Тема отправляет сообщение: «Приятно познакомиться, {UserName}!» Затем она перенаправляется на тему «Разговор с клиентом», который отправляет сообщение: «Надеюсь, у вас замечательный день, {userName}!» Обратите внимание, однако, что тема «Разговор с клиентом» пропустила повторный запрос имени пользователя. Вместо этого она использовала значение переменной UserName
, переданной из темы "Приветствие".
Наконец, вот еще раз этот второй разговор, на этот раз с точки зрения темы «Разговор с клиентом»:
Давайте рассмотрим шаги по настройке темы для получения значений из других тем. Мы будем использовать наш текущий пример, но те же шаги будут работать каждый раз, когда теме нужно получить значение из более ранней темы.
Настройка темы назначения
Тема назначения — это тема, на который выполняется перенаправление, которая будет получать значения из других тем. В нашем примере это «Разговор с клиентом».
Создайте или перейдите к теме назначения.
Добавьте узел «Вопрос» и введите
What should I call you?
для сообщения.В разделе Идентификация выберите предварительно созданную сущность Имя человека.
Выберите эту переменную, чтобы открыть панель Свойства переменной. Назовите ее
userName
, затем выберите Получение значений из других тем.В поле сообщения введите
I hope you're having a wonderful day,
.Выберите значок Вставить переменную ({x}), затем выберите userName.
Выберите пробел после переменной и введите
!
.Сохраните тему.
Настройка исходной темы
Исходная тема — это тема, выполняющая перенаправление, та, которая предоставляет значение, которое будет передано теме назначения. В нашем примере это «Приветствие».
Перейдите в исходную тему.
Добавьте узел перенаправления и выберите пункт назначения тема.
Выберите + Добавить входные данные, затем выберите переменную из темы назначения, в которую вы хотите передать значение.
Выберите значок >, затем выберите переменную, значение которой вы хотите передать.
Узел перенаправления должен выглядеть следующим образом:
Сохраните тему.
Возврат значений к исходным темам
Когда производится перенаправление на тему и она получает переменную путем задания вопроса или иным образом, эта переменная может быть возвращена в исходную тему. Переменная становится частью исходной темы и может использоваться как любая другая переменная. Информация, которую помощник получает, таким образом становится доступна в разных темах, сокращая необходимость в глобальных переменных.
Давайте продолжим пример из предыдущего раздела. Мы зададим новый вопрос в теме «Разговор с клиентом», затем вернем ответ в тему «Приветствие».
Настройте исходную тему для возвращаемой переменной
Когда вы возвращаете переменную в тему, исходная тема является темой, в которую производится перенаправление, темой, которая предоставляет значение, которое будет передано обратно в исходную тему. В этом примере это «Разговор с клиентом».
Перейдите в исходную тему.
Добавьте узел «Вопрос» и введите
What city do you live in?
для сообщения.В разделе Идентификация выберите предварительно созданную сущность Город.
Выберите эту переменную, чтобы открыть панель Свойства переменной. Назовите ее
userCity
, затем выберите Возврат значений к исходным темам.Сохраните тему.
Настройте тему назначения для возвращенной переменной
Когда вы возвращаете переменную в тему, темой назначения является тема, выполняющая перенаправление, которая будет получать значения из других тем. В нашем примере это «Приветствие».
Перейдите в тему назначения.
Переменная, которую вы выбрали в исходной теме, должна появиться в узле перенаправления как выходная переменная.
Сохраните тему.