Триггер бездействия

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

Overview

Триггер бездействия, также называемый OnInactivity или Пользователь ничего не делает в течение некоторого времени, — это системный триггер в Copilot Studio, который автоматически запускает тему, когда пользователь не отправляет никаких сообщений в течение определенного времени. Он работает на стороне сервера, поэтому агент оценивает таймер и запускает тему, даже если клиент пользователя неактивен.

Распространенные варианты использования:

  • Отправка напоминания с вопросом, находится ли пользователь еще здесь
  • Освобождение емкости агента путем автоматического закрытия неактивных разговоров
  • Сбор отзывов (например, опрос удовлетворенности клиентов) до завершения сеанса
  • Очистка состояния сеанса для прерванных разговоров

Принцип работы триггера бездействия

В этом разделе объясняется, как Copilot Studio оценивает триггеры бездействия, планирует таймеры и запускает темы, когда разговор находится в состоянии бездействия.

Обзор архитектуры

  1. Пользователь отправляет сообщение.

  2. Среда выполнения оценивает все триггеры OnInactivity.

  3. Среда выполнения группирует триггеры по длительности и выбирает один для каждого уровня длительности. Побеждает триггер с наименьшим номером приоритета; при равенстве используется более ранняя дата создания.

  4. Среда выполнения упорядочивает выбранные триггеры по длительности, начиная с самой короткой.

  5. Среда выполнения запускает таймер для следующего триггера в служебной шине Azure. Активен только один таймер одновременно.

  6. Пользователь неактивен в течение заданного времени.

  7. Таймер срабатывает, и событие бездействия отправляется в среду выполнения.

  8. Среда выполнения сопоставляет и запускает тему бездействия.

  9. Среда выполнения рассчитывает оставшееся время до следующего триггера и запускает новый таймер.

Ключевые поведенческие характеристики

  • Таймер сбрасывается при каждом пользовательском сообщении.

    Каждый раз, когда пользователь отправляет сообщение, система переоценивает все триггеры бездействия и активирует следующий (начиная с самой короткой длительности). В любой момент времени одновременно активен только один таймер.

  • Поддерживаются несколько триггеров.

    Вы можете использовать несколько триггеров OnInactivity с разной продолжительностью (например, 5 минут и 10 минут). Система обрабатывает их в порядке увеличения длительности. Для каждого уровня длительности выбирается только один триггер. Если два триггера имеют одинаковую длительность, срабатывает триггер с меньшим номером Priority. Если равенство сохраняется, приоритет получает триггер, созданный раньше. Система игнорирует другие триггеры с той же длительностью.

  • Триггеры выполняются последовательно, а не параллельно.

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

  • Фоновое выполнение.

    Событие бездействия — это фоновый триггер. Запуск происходит без участия пользователя.

  • Запись расшифровки.

    Система записывает события бездействия в расшифровках разговоров. Новая запись расшифровки создается через 30 минут бездействия.

Пример временной шкалы (несколько триггеров)

Время Event
0:00 Пользователь отправляет последнее сообщение
5:00 Триггер A (300 с) срабатывает, отправляет предупреждение
10:00 Триггер B (600 с) срабатывает, завершает разговор

Если пользователь отправляет сообщение в 4:30, оба таймера сбрасываются. Триггер A срабатывает в 9:30, а триггер B — в 14:30.

Настройка триггера бездействия

В этом разделе показано, как Copilot Studio запускает и сбрасывает таймеры бездействия, а также управляет ими, чтобы вы могли предсказать, что произойдет, когда разговор находится в состоянии бездействия.

Создание темы триггера бездействия

  1. В Copilot Studio перейдите в раздел Темы>Добавить тему>С нуля.

  2. Выберите фразу-триггер. Вместо фразы выберите "После периода бездействия".

  3. Задайте значение для свойства Длительность бездействия. В режиме Ручной ввод выберите предустановку из выпадающего списка (15 минут, 30 минут, 45 минут или 1 час). Чтобы ввести пользовательское значение в секундах или формулу Power Fx (например, Global.TimeoutSeconds), переключите селектор режима на Формула и введите значение напрямую.

  4. Спроектируйте поток темы (отправьте сообщение, задайте вопрос, завершите разговор и так далее).

  5. Сохраните и опубликуйте вашего агента.

Точка отсчета длительности

Желаемый тайм-аут Значение (секунды)
30 секунд 30
2 минуты 120
5 мин 300
10 минут 600
1 час 3600

Important

Свойство использует секунды, а не минуты или миллисекунды. Значение 60000 — около 16,7 часов, а не 60 секунд.

Пример: одиночный триггер предупреждения

[OnInactivity — 600 секунд]

Сообщение: "Вы все еще здесь? Ответьте, чтобы продолжить".

Завершение темы

Пример: предупреждение о бездействии через 5 минут и автозакрытие через 10 минут

Этот шаблон самый распространенный. Создайте две темы бездействия:

Тема 1: предупреждение о бездействии (5 минут)

  • Триггер: после периода бездействия
  • durationInSeconds: 300
  • Действия: отправить сообщение: "Вы все еще здесь? Этот разговор будет завершен через 5 минут, если не будет получен ответ".

Тема 2: автозакрытие (10 минут)

  • Триггер: после периода бездействия
  • durationInSeconds: 600
  • Действия:
    1. задать Global.DeactivateInactivity = true (защитная переменная — см. рекомендации)
    2. Отправить сообщение: "Этот разговор завершен из-за бездействия".
    3. Завершение беседы

Пример: сбор отзывов

  • Триггер: после периода бездействия
  • durationInSeconds: 120
  • Действия:
    1. Попросить: "Прежде чем завершить разговор, оцените свой опыт по шкале от 1 до 5".
    2. Сохранение ответа
    3. Завершение беседы

Добавление условия к триггеру

Добавьте узел Условие сразу после триггера, чтобы он запускался только в определенных ситуациях:

  • Срабатывать только на определенном канале: =Activity.ChannelId = "msteams"
  • Срабатывать, только если защитная переменная не задана: =Global.DeactivateInactivity = false

Если у вас несколько триггеров с узлами Вопрос, используйте общую тему, чтобы избежать проблем с наложением диалогов.

  1. Создайте общую тему с именем HandleInactivity:

    • Добавление глобальной переменной Global.InactivityStage (текст)
    • Проверьте ее значение:
      • "warning" → Отправьте предупреждающее сообщение с узлом Вопрос ("Продолжить?" / "Конец?"):
      • "close" → Отправьте заключительное сообщение и завершите разговор
  2. Первый триггер OnInactivity (300 секунд):

    • Задайте значение Global.InactivityStage = "warning".
    • Перенаправить в HandleInactivity
  3. Второй триггер OnInactivity (600 секунд):

    • Задайте значение Global.InactivityStage = "close".
    • Перенаправить в HandleInactivity

Этот подход предотвращает накопление узлов Вопрос и появление циклов запросов.

Конфигурация для отдельного канала

Матрица поддержки каналов

Channel Уровень поддержки Примечания
Демонстрационный веб-сайт полностью поддерживается. Лучший канал для тестирования триггеров бездействия.
Настраиваемый веб-сайт (Direct Line) полностью поддерживается. Работает аналогично демонстрационному веб-сайту.
Microsoft Teams Поддерживается Работает, см. рекомендации по Teams в следующем разделе. Токены аутентификации могут истечь при длительном бездействии.
Служба клиентов Dynamics 365 полностью поддерживается. Необходимы дополнительные действия для закрытия разговоров в Dynamics 365 Customer Service. Подробнее см. в разделе Конфигурация Dynamics 365 Customer Service.
Microsoft Copilot Срабатывает триггер, но сообщения не доставляются Этот сценарий — известное ограничение. Триггер выполняется на стороне сервера, но интерфейс Microsoft Copilot не отображает проактивные сообщения от агентов. Обходное решение отсутствует.
Панель тестирования Не поддерживаются Этот сценарий создан намеренно. Таймеры отключены для идентификатора канала Studio. Используйте демонстрационный веб-сайт или опубликованный канал для тестирования.
DirectEngine Не поддерживаются Этот сценарий создан намеренно. Таймеры отключены для идентификатора канала DirectEngine (среда разработки/тестирования).
Телефония/IVR Не поддерживаются Для голосовых каналов используйте триггер OnSilence.

Конфигурация Teams

Teams использует постоянную модель единого разговора. С точки зрения Teams, разговор никогда по-настоящему не "заканчивается". Эта модель означает, что триггеры бездействия продолжают срабатывать даже после того, как пользователь считает разговор завершенным.

Рекомендуемый шаблон Teams:

  1. Создайте глобальную переменную Global.IsConversationClosed (логическая, по умолчанию — false).

  2. В начале темы бездействия проверьте: If Global.IsConversationClosed = true→ Завершить тему (выход немедленно).

  3. Когда разговор логически заканчивается (пользователь говорит "до свидания", опрос удовлетворенности клиента завершен и т. д.), установите Global.IsConversationClosed = true.

  4. Триггер бездействия может все еще сработать, но сразу завершает работу без вывода сообщения.

Конфигурация Dynamics 365 Customer Service

  • По умолчанию разговоры автоматически закрываются через 30 минут бездействия.
  • Вызов EndConversation сам по себе не завершает сеанс Dynamics 365 Customer Service. Емкость агента не освобождается.
  • Чтобы полностью завершить разговор, установите для контекстной переменной CloseOmnichannelConversation значение true через поток Power Automate, затем используйте узел Передать агенту.

Известные ограничения

Краткая справка: что может нарушить работу таймера бездействия?

Функция или действие Влияние на таймеры бездействия
Завершение беседы Навсегда очищаются все таймеры
Пользователь отправляет сообщение Сбрасывает все таймеры до нуля (намеренно)
Условие триггера с неинициализированной переменной Таймер автоматически исключается и не активируется
Длительность превышает 7 дней (604 800 секунд) Таймер автоматически игнорируется
Очистка глобальных переменных в теме бездействия агент теряет контекст разговора
Переключение на оператора отдела обслуживания клиентов Таймер остается активным и может сработать во время разговора с оператором отдела обслуживания клиентов

Панель тестирования не поддерживает триггеры бездействия

Панель тестирования Copilot Studio не запускает триггеры бездействия. Это ограничение предусмотрено архитектурой. Опубликуйте агент и протестируйте в динамическом канале (например, на демонстрационном веб-сайте, в Teams и т. д.).

Microsoft Copilot не отображает сообщения о неактивности

Триггер выполняется на стороне сервера, но любой вывод (сообщения, карты) не доставляется пользователю в опыте Microsoft Copilot. Обходной путь не существует. См. раздел Известные ограничения Teams.

Оркестрация генеративного ИИ

Триггеры бездействия реализуются как триггеры тем классической оркестрации и используют отдельный механизм обработки событий, основанный на таймере. Когда оркестрация генеративного ИИ включена, маршрутизация по темам больше не зависит от классического распознавания триггеров, поэтому темы бездействия могут не запускаться во всех конфигурациях. Если требуется обработка бездействия, рекомендуется использовать классическую оркестрацию, которая полностью проверена и подтверждена.

Связанные агенты: бездействие дочерних агентов не поддерживается

В конфигурациях связанных агентов триггеры бездействия в дочерних агентах не работают и возвращают "Неверный ответ подключенного агента". Поместите всю логику бездействия в родительский агент.

Максимальная длительность: 7 дней (604 800 секунд)

Опубликованные боты автоматически игнорируют триггеры с длительностью более 604 800 секунд. Ошибка не возникает. В режиме разработки может появиться ошибка. Минимальное значение не ограничено — короткие интервалы (менее примерно 15 секунд) могут вести себя непредсказуемо из-за задержек в инфраструктуре таймера.

Завершение разговора очищает таймеры бездействия

Когда вы вызываете Завершить разговор в теме, навсегда останавливаются все активные таймеры бездействия для этого разговора. Таймеры полностью очищаются; они не сбрасываются и не приостанавливаются. Операция отменяет все ожидающие события бездействия, которые уже были запланированы.

Если вы хотите завершить поток темы, не нарушая работу таймеров бездействия, используйте одно из альтернативных действий:

Действие (в Copilot Studio) Влияние на таймеры бездействия
Завершение беседы Очищает все таймеры; таймеры останавливаются безвозвратно
Завершение текущей темы (EndDialog) Не влияет на таймеры; таймеры продолжают работать
Отмена всех тем (CancelAllDialogs) Не влияет на таймеры; таймеры продолжают работать

Tip

Если вашей теме нужно закрыть текущий поток, но вы все равно хотите, чтобы таймер бездействия сработал позже (например, тема поиска JIRA, которая заканчивается, но разговор все равно должен завершиться при тайм-ауте), используйте узел Завершить текущую тему вместо Завершить разговор.

Использование защитной переменной для предотвращения повторного срабатывания по-прежнему остается рекомендуемой защитной практикой.

Триггер срабатывает после эскалации агенту

После передачи разговора оператору отдела обслуживания клиентов триггер бездействия продолжает работать. Триггер может сработать во время разговора с агентом и неожиданно отправить сообщения агента. Всегда вызывайте функцию EndConversation перед передачей или используйте защитную переменную.

Сообщения триггера могут появляться в расшифровках после завершения разговора

Даже после закрытия разговора триггер все еще может сработать, и его сообщения фиксируются в расшифровке. Данная ситуация не влияет на пользовательский опыт, но может отражаться в аналитике.

Телефонные, голосовые и IVR-каналы

Триггер бездействия недоступен для телефонных и голосовых каналов. Вместо этого используйте триггер OnSilence.

Распространенные ошибки конфигурации

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

Завершение разговора в теме бездействия (риск цикла)

Проблема: когда вы вызываете узел Завершить разговор в теме бездействия, вы очищаете все таймеры бездействия. Однако в каналах с постоянными разговорами (особенно Teams) основной разговор остается активным. В некоторых конфигурациях триггер все еще может срабатывать повторно, вызывая повторяющиеся сообщения о завершении сеанса.

Решение (рекомендуется в качестве защитной практики): используйте защитную переменную:

  1. Создайте Global.DeactivateInactivity (логическая, по умолчанию — false).

  2. В начале каждой темы бездействия добавьте условие: продолжать, только если Global.DeactivateInactivity = false.

  3. Установите Global.DeactivateInactivity = true до вызова EndConversation.

Примечание.

Шаблон защитной переменной особенно важен для каналов Teams, где модель постоянного разговора означает, что разговор никогда не завершается полностью.

Длительность указана неверно

Проблема: значение durationInSeconds указывается в секундах. Значение 60000 составляет примерно 16,7 часов, а не 60 секунд.

Решение: перепроверьте свои значения по справочной таблице в разделе 3.

Узлы вопросов в нескольких темах бездействия (накопление запросов)

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

Решение: используйте шаблон общей темы. Объедините логику узла Вопрос в одной теме или убедитесь, что только один триггер содержит узел Вопрос.

Очистка глобальных переменных в теме бездействия

Проблема: если тема бездействия очищает глобальные переменные, агент теряет весь контекст разговора и становится неотзывчивым при возвращении пользователя.

Решение: сбрасывайте только переменные, связанные с бездействием, а не все состояние беседы.

Отсутствие проверки условий для триггеров бездействия в Teams

Проблема: в Teams модель постоянного разговора приводит к тому, что триггеры срабатывают бесконечно. Пользователи получают повторяющиеся сообщения "Вы все еще здесь?" спустя часы или дни.

Решение: всегда используйте шаблон с ограничивающей переменной для Teams.

Не вызывается closeOmnichannelConversation

Проблема: для агентов Dynamics 365 Customer Service вызов EndConversation сам по себе не завершает сеанс Dynamics 365 Customer Service. Разговоры накапливаются в очереди агентов.

Решение: задайте для CloseOmnichannelConversation значение true через Power Automate в теме бездействия.

Динамическая длительность из неинициализированной переменной

Проблема: использование выражения Power Fx, например =Environment.InactivityTimeout для длительности, работает, но если переменная не инициализирована или равна NULL, триггер автоматически исключается.

Решение: убедитесь, что все переменные, используемые в условиях триггера и выражениях длительности, имеют допустимые значения по умолчанию.

Ожидание срабатывания триггеров после передачи разговора агенту

Проблема: после эскалации оператору отдела обслуживания клиентов триггер срабатывает в исходном разговоре с агентом и отправляет сообщения во время сеанса с агентом.

Решение: либо завершите разговор с агентом во время эскалации, либо используйте защитную переменную Global.IsEscalated = true и проверьте ее при запуске темы бездействия.

Устранение неполадок, когда триггер бездействия не работает

Используйте это дерево решений для диагностики проблемы:

  1. Где выполняется тестирование?

    • Если вы используете панель тестирования, остановитесь. Панель тестирования не поддерживает триггеры бездействия. Выполните публикацию и тестирование в динамическом канале.
  2. Какой канал используется?

    • Microsoft Copilot? У этого канала есть известное ограничение. Триггер срабатывает, но сообщения не доставляются. Обходное решение отсутствует.
    • Телефония/IVR? Этот канал не поддерживается. Вместо этого используйте триггер OnSilence.
  3. Оркестрация генеративного ИИ включена?

    • Триггеры бездействия используют отдельный конвейер таймеров, не связанный с маршрутизацией на основе распознавания. Однако их поведение с оркестрацией генеративного ИИ еще не прошло полную проверку. Если критически важна обработка бездействия, рекомендуется классическая оркестрация.
  4. Значение durationInSeconds больше 604 800?

    • Если да, триггер автоматически игнорируется. Уменьшите значение до 604 800 или ниже.
  5. Является ли агент дочерним агентом в конфигурации подключенного агента?

    • Если да, триггеры бездействия дочерних агентов не поддерживаются. Переместите логику в родительский агент.
  6. Есть ли у вас несколько триггеров бездействия?

    • Они срабатывают в порядке длительности (сначала самый короткий). Убедитесь, что вы ждете достаточно долго. Любое сообщение пользователя сбрасывает все таймеры.
  7. Есть ли у триггера условие, ссылающееся на неинициализированную переменную?

    • Если условие ссылается на еще не заданную переменную, триггер автоматически исключается. Убедитесь, что все переменные условий имеют значения по умолчанию.
  8. Агент был переопубликован после начала разговора?

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

Если триггер бездействия все еще не работает, попробуйте следующие шаги:

  • Проверьте расшифровки разговоров на предмет активности по теме бездействия. Если тема появляется, но пользователь не увидел сообщение, проблема заключается в особенностях доставки сообщений в конкретном канале.
  • Убедитесь, что тема не отключена и не находится в архиве.
  • Проверьте, что тип триггера — "После периода бездействия", а не фраза-триггер.

Лучшие практики

  • Всегда тестируйте в опубликованном канале. Используйте демонстрационный веб-сайт для быстрого тестирования. Никогда не полагайтесь на панель тестирования.

  • Используйте защитную переменную для предотвращения зацикливания. Создайте Global.DeactivateInactivity (логическая, по умолчанию — false). Присвойте ей значение true перед вызовом EndConversation. Проверяйте переменную в начале каждой темы бездействия.

  • Устанавливайте разумную длительность. Минимум около 15 секунд, максимум 604 800 секунд (7 дней).

  • Проверьте свои единицы измерения. Свойство указывается в секундах. 5 минут = 300, а не 5.

  • Для Dynamics 365 Customer Service: всегда объединяйте EndConversation с closeOmnichannelConversation через Power Automate.

  • Для сценариев с несколькими триггерами: ограничьте узлы Вопрос одним триггером или используйте шаблон общей темы.

  • Вызовите EndConversation перед переводов на оператора отдела обслуживания клиентов, чтобы отключить триггеры бездействия.

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

FAQ

Почему триггер бездействия не работает на панели тестирования?

Таймеры на панели тестирования отключены намеренно. Опубликуйте агент и выполните тестирование в динамическом канале.

Могу ли я использовать динамические значения длительности (например, из переменной)?

Yes. Поле длительности поддерживает выражения Power Fx. Можно использовать переменную среды или вычисляемое значение. Выражение вычисляется в среде выполнения, когда таймер активирован. Убедитесь, что переменная инициализирована и содержит допустимое число.

Что произойдет, если я опубликую новую версию агента, пока разговоры активны?

Среда выполнения переключается на новую версию. Если идентификатор триггера изменился (тема была удалена и создана заново), система переходит к сопоставлению по длительности. Если ни один триггер не соответствует ни идентификатору, ни длительности, ожидаемое событие бездействия удаляется.

Как полностью остановить триггеры бездействия в Teams?

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

Работает ли триггер бездействия с проверкой подлинности?

Да, но при длительных тайм-аутах сеанса (например, 24 часа) срок действия токена проверки подлинности пользователя может истечь до срабатывания триггера. Убедитесь, что агент корректно обрабатывает повторную проверку подлинности.

Что произойдет, если моя тема бездействия вызывает соединитель, выполнение которого занимает много времени?

Вызовы соединителя имеют ограничение по времени ожидания (30 секунд по умолчанию, максимум 60 секунд). Оптимизируйте соединитель или корректно обработайте тайм-аут.