無操作トリガー

非アクティブ トリガーを構成する方法と、セットアップ、チャネルのサポート、制限事項、トラブルシューティングに関するガイダンスを参照してください。

Overview

非アクティブ トリガー、OnInactivity、またはユーザーがしばらく非アクティブとも呼ばれるこのシステム トリガーは、ユーザーが一定期間メッセージを送信しないと、トピックを自動的に起動するCopilot Studioのシステムトリガーです。 サーバー側で実行されるため、エージェントはタイマーを評価し、ユーザーのクライアントがアイドル状態であってもトピックを実行します。

一般的なユース ケースは次のとおりです。

  • ユーザーがまだそこにいるかどうかを確認するリマインダーを送信する
  • アイドル状態の会話を自動的に閉じることでエージェントの作業負荷を軽減する
  • セッションが終了する前にフィードバック (顧客満足度調査など) を収集する
  • 破棄された会話のセッション状態をクリーンアップする

非アクティブ トリガーのしくみ

このセクションでは、Copilot Studioが非アクティブトリガーを評価し、タイマーをスケジュールし、会話がアイドル状態のときにトピックを実行する方法について説明します。

アーキテクチャの概要

  1. ユーザーがメッセージを送信します。

  2. ランタイムは、すべての OnInactivity トリガーを評価します。

  3. ランタイムは、期間ごとにトリガーをグループ化し、期間レベルごとに 1 つを選択します。 最も優先度の低い数値が勝ちます。同じ優先度の場合は、最も早い作成日が決定します。

  4. ランタイムは、選択したトリガーを期間 (最も短い順) で並べ替える。

  5. ランタイムは、Azure Service Busで次回のトリガーのためにタイマーをセットします。 一度にアクティブなタイマーは 1 つだけです。

  6. ユーザーは、構成された期間非アクティブです。

  7. タイマーが起動し、非アクティブなイベントがランタイムに送信されます。

  8. ランタイムは、非アクティブなトピックと一致して実行します。

  9. ランタイムは、次のトリガーまでの残りの時間を計算し、新しいタイマーを使用します。

主要な動作

  • タイマーは、すべてのユーザー メッセージでリセットされます。

    ユーザーがメッセージを送信するたびに、システムはすべての非アクティブなトリガーを再評価し、次のトリガーをアームします (最も短い期間が最初)。 アクティブなタイマーは、いつでも 1 つだけです。

  • 複数のトリガーがサポートされています。

    異なる期間 (5 分、10 分など) に複数の OnInactivity トリガーを設定できます。 システムは、期間の昇順でそれらを処理します。 期間レベルごとに 1 つのトリガーのみが選択されます。 2 つのトリガーの継続時間が同じ場合、 Priority 数が小さいトリガーが起動します。 引き続き同点がある場合は、以前に作成したトリガーが優先されます。 システムは、同じ期間に他のトリガーを破棄します。

  • トリガーは並列ではなくキューに入れられます。

    一度にアクティブなタイマーは 1 つだけです。 現在のトリガーが実行されると、ランタイムは次のトリガーまでの残りの時間を計算し、その差に新しいタイマーを設定します。 根本的な効果は、トリガーが元の非アクティブ ポイントからの正しいオフセットで起動することですが、トリガーの実行にかなりの時間がかかる場合は、軽微な誤差が発生する可能性があります。

  • バックグラウンド実行。

    アクティブでないイベントはバックグラウンド トリガーです。 それは自動で起動し、ユーザーの操作を必要としません。

  • トランスクリプトの記録。

    システムは、非アクティブイベントを会話トランスクリプトに記録します。 非アクティブ状態が 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で、Topics>トピックの追加>空白に移動します。

  2. トリガー フレーズを選択します。 語句の代わりに、[ 非アクティブな期間の後] を選択します。

  3. [非アクティブ期間] プロパティを設定します。 手動入力モードで、ドロップダウンからプリセットを選択します (15 分、30 分、45 分、または 1 時間)。 秒単位または Power Fx 数式 (たとえば、 Global.TimeoutSeconds) を入力するには、モード セレクターを [数式] に切り替えて、値を直接入力します。

  4. トピック フローを設計する (メッセージの送信、質問、会話の終了など)。

  5. エージェントを保存して公開します。

期間のリファレンス

必要なタイムアウト 値 (秒)
30 秒 30
2 分 120
5 分 300
10 分 600
1 時間 3600

Important

この プロパティは、分またはミリ秒ではなく秒を使用します。 60000の値は、60 秒ではなく約 16.7 時間を意味します。

例: 単一の警告トリガー

[無操作時 - 600 秒]

メッセージ: "あなたはまだそこにいますか? 返信して続行してください。"

終了トピック

例: 5 分間の警告と 10 分の自動閉じ

このパターンが最も一般的です。 非アクティブなトピックを 2 つ作成します。

トピック 1: 非アクティブ警告 (5 分)

  • トリガー: 非アクティブな期間が経過した後
  • durationInSeconds: 300
  • アクション: メッセージを送信します。「まだそこにいますか?」 応答がない場合、この会話は 5 分で終了します。

トピック 2: 自動クローズ (10 分)

  • トリガー: 非アクティブな期間が経過した後
  • durationInSeconds: 600
  • Actions:
    1. Global.DeactivateInactivity = trueの設定 (ガード変数 - ベスト プラクティスを参照)
    2. "この会話は非アクティブのため終了します" というメッセージを送信します。
    3. 会話の終了

例: フィードバック収集

  • トリガー: 非アクティブな期間が経過した後
  • 秒数: 120
  • Actions:
    1. 質問: "行く前に、エクスペリエンスを評価しますか? (1-5)"
    2. 応答を格納する
    3. 会話の終了

トリガーに条件を追加する

特定の状況でのみ実行されるように、トリガーの直後に 条件 ノードを追加します。

  • 特定のチャネルでのみ起動します。 =Activity.ChannelId = "msteams"
  • ガード変数が設定されていない場合のみ発動します。 =Global.DeactivateInactivity = false

質問ノードで複数のトリガーがある場合は、共有トピックを使用してダイアログスタックの問題を回避します。

  1. HandleInactivityという名前の共有トピックを作成します。

    • グローバル変数 Global.InactivityStage を追加する (テキスト)
    • その値を確認します。
      • "warning"質問 ノードを含む警告メッセージを送信します ("Continue?" / "End?")
      • "close" → 終了メッセージを送信して会話を終了する
  2. 最初のオンイナクティビティトリガー (300秒):

    • Global.InactivityStage = "warning" を設定します
    • リダイレクト先 HandleInactivity
  3. 2 番目の OnInactivity トリガー (600 秒):

    • Global.InactivityStage = "close" を設定します
    • リダイレクト先 HandleInactivity

この方法により、 質問 ノードがスタックしてプロンプト ループを作成できなくなります。

チャネル固有の構成

チャネル サポート マトリックス

チャネル サポート レベル Notes
デモ Web サイト 完全にサポートされています 非アクティブ トリガーをテストするための最適なチャネル。
カスタム Web サイト (Direct Line) 完全にサポートされています デモ Web サイトと同じように動作します。
Microsoft Teams サポートされている 機能しますが、次のセクションでは Teams 固有のガイダンスを参照してください。 認証トークンは、非アクティブな期間が長い間期限切れになる可能性があります。
Dynamics 365 顧客サービス 完全にサポートされています Dynamics 365 Customer Service会話を閉じるには、追加の手順が必要です。 詳細については、Dynamics 365 Customer Service構成を参照してください。
Microsoft 365 Copilot トリガーが発生するが、 メッセージは配信されない このシナリオは既知の制限事項です。 トリガーはサーバー側で実行されますが、Microsoft 365 Copilot UI にはエージェントからのプロアクティブ メッセージは表示されません。 回避策はありません。
テスト パネル サポートしていません このシナリオは仕様です。 Studio チャネル ID のタイマーは無効になっています。 デモ Web サイトまたは公開されたチャネルを使用してテストします。
DirectEngine サポートしていません このシナリオは仕様です。 DirectEngine チャネル ID (デザイン/テスト環境) に対してタイマーが無効になっています。
テレフォニー/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 のセッションは閉じられません。 エージェントの容量は解放されません。
  • 会話を完全に閉じるには、Power Automate フローを使用して CloseOmnichannelConversation コンテキスト変数を true に設定し、エージェントへの転送 ノードを使用します。

既知の制限

非アクティビティタイマーに影響を与える要因は何ですか?

機能またはアクション 非アクティブ タイマーへの影響
会話の終了 すべてのタイマーを永続的に消去する。
ユーザーがメッセージを送信する すべてのタイマーをゼロにリセットします (仕様により)
初期化されていない変数を使用して条件をトリガーする タイマーはサイレントで除外されます - 腕なし
期間が 7 日 (604,800 秒) を超える タイマーは自動的に無視されます
非アクティブなトピックでのグローバル変数のクリア エージェントが会話コンテキストを失う
顧客サービス担当者への転送 タイマーはアクティブなままで、顧客サービス担当者との会話中に起動する可能性があります

テスト パネルで非アクティブ トリガーがサポートされない

Copilot Studioテスト パネルでは、非アクティブ なトリガーは発生しません。 この制限は仕様です。 エージェントを公開し、ライブ チャネル (デモ Web サイト、Teams など) でテストします。

Microsoft 365 Copilotに非アクティブなメッセージが表示されない

トリガーはサーバー側で実行されますが、Microsoft 365 Copilot エクスペリエンスでは出力 (メッセージ、カード) がユーザーに配信されません。 回避策はありません。 Teams の既知の制限事項を参照してください。

生成 AI オーケストレーション

非アクティブ トリガーは 、クラシック オーケストレーション トピック トリガーとして実装され、個別のタイマー ベースのイベント パイプラインを使用します。 Generative AI オーケストレーションが有効になっている場合、トピック ルーティングは従来のトリガー認識に依存しなくなったため、非アクティブなトピックがすべての構成で確実に起動されない可能性があります。 非アクティブな処理が必要な場合は、クラシック オーケストレーションが推奨され、完全に検証された構成です。

接続されたエージェント: 子エージェントの非アクティブはサポートされていません

接続されたエージェント構成では、子エージェントの非アクティブ なトリガーが機能せず、"無効な接続されたエージェント応答" が返されます。親エージェントに非アクティブなロジックをすべて配置します。

最大期間: 7 日 (604,800 秒)

発行されたボットでは、継続時間が 604,800 秒を超えるトリガーは自動的に無視されます。 エラーは表示されません。 デザイン モードでは、エラーが表示されることがあります。 適用される最小時間はありません。タイマー インフラストラクチャの待機時間が原因で、短い期間 (約 15 秒未満) が予期せず動作する可能性があります。

会話を終了すると、非アクティブタイマーがクリアされる

トピックで End conversation を呼び出すと、その会話のすべてのアクティブな非アクティブ タイマーが 完全に停止 します。 タイマーは完全にクリアされます。リセットも一時停止もされません。 この操作は、既にスケジュールされている保留中の非アクティブ イベントをすべて破棄します。

非アクティブ タイマーを中断 せずに トピックのフローを終了する場合は、次のいずれかの代替アクションを使用します。

アクション (Copilot Studio) 非アクティブ タイマーへの影響
会話の終了 すべてのタイマーをクリアします。タイマーが永続的に停止する
現在のトピックを終了する (EndDialog) タイマーには影響しません。タイマーの実行を続ける
すべてのトピックを取り消す (CancelAllDialogs) タイマーには影響しません。タイマーの実行を続ける

ヒント

トピックで現在のフローを閉じる必要があるが、非アクティブ タイマーを後で起動したい場合 (たとえば、JIRA 検索トピックが終了しても会話はタイムアウトする必要がある場合など)、End conversation ではなく End current topic を使用します。

ガード変数を使用して再入を防ぐことは 、推奨される防御練習です。

エージェントのエスカレーション後にトリガーが発動する

システムが顧客サービス担当者に会話を転送した後、非アクティブトリガーはアクティブなままです。 これは、人間のエージェントの会話中に発生し、エージェント メッセージを予期せず送信する可能性があります。 転送前に常に EndConversation を呼び出すか、ガード変数を使用します。

メッセージのトリガーは、会話の終了後にトランスクリプトに表示される場合があります

会話が閉じた後でも、トリガーが起動し、メッセージがトランスクリプトに記録される可能性があります。 この条件はユーザー エクスペリエンスには影響しませんが、分析に表示される可能性があります。

電話、音声、IVR チャネル

非アクティブ トリガーは、電話チャネルと音声チャネルでは使用できません。 代わりに OnSilence トリガーを使用してください。

一般的な構成ミス

このセクションを使用して、非アクティブなトリガーが期待どおりに動作しなくなる可能性がある一般的な構成の問題を特定して修正します。

非アクティブなトピックでの会話を終了する (ループ リスク)

問題: 非アクティブなトピックから End conversation を呼び出すと、すべての非アクティブ タイマーがクリアされます。 ただし、永続的な会話があるチャネル (特に Teams) では、基になる会話はアクティブなままです。 一部の構成では、トリガーが再起動し、"セッションが終了しました" メッセージが繰り返し発生する可能性があります。

解決策 (防御練習として推奨): ガード変数を使用します。

  1. Global.DeactivateInactivityを作成します (ブール値、既定値: false)。

  2. 非アクティブなトピックの先頭に、条件を追加します。 Global.DeactivateInactivity = false場合にのみ続行します。

  3. EndConversation をGlobal.DeactivateInactivity = true呼び出すに設定してください。

Note

ガード変数パターンは特に Teams チャネルにとって重要です。永続的な会話モデルにより、会話が本当に終わらないことを意味します。

期間が間違った値に設定されている

問題:durationInSeconds秒単位です60000の値は約 16.7 時間であり、60 秒ではありません。

ソリューション: セクション 3 の参照テーブルに対して値を再確認します。

非アクティブな複数のトピックの質問ノード (プロンプトスタック)

問題: 複数のトリガーにそれぞれ 質問 ノードがある場合、2 番目のトリガーの 質問 ノードは最初のトリガーを中断します。 ユーザーが回答すると、最初の 質問 ノードが再開され、再プロンプトが表示され、ループが作成されます。

ソリューション:共有トピック パターンを使用します。 質問ノードのロジックを 1 つのトピックに統合するか、1 つのトリガーにのみ質問ノードがあることを確認します。

非アクティブなトピックでのグローバル変数のクリア

問題: 非アクティブなトピックがグローバル変数をクリアすると、エージェントはすべての会話コンテキストを失い、ユーザーが戻ったときに応答しなくなります。

ソリューション: 非アクティブな特定の変数のみをリセットし、会話状態全体はリセットしません。

Teams の非アクティブ トリガーを制限しない

問題: Teams では、永続的な会話モデルによりトリガーが常に作動し続けます。 ユーザーは、数時間または数日後に繰り返し "まだそこにいるか?" というメッセージを受け取ります。

ソリューション: Teams には常に ゲーティング変数パターンを 使用します。

closeOmnichannelConversation を呼び出さない

Problem: Dynamics 365 Customer Service エージェントの場合、EndConversation のみを呼び出しても、Dynamics 365 Customer Service セッションは閉じられません。 会話はエージェント キューに積み重ねられます。

Solution: 非アクティブなトピックのPower Automateを使用して、CloseOmnichannelConversationtrue に設定します。

初期化されていない変数からの動的持続時間

問題: 期間に =Environment.InactivityTimeout のような Power Fx 式を使用すると機能しますが、変数が初期化されていない場合や null の場合、トリガーは暗黙的に除外されます。

ソリューション: トリガー条件と期間式で使用されるすべての変数に有効な既定値があることを確認します。

エージェントのエスカレーション後にトリガーが機能することを期待する

問題: システムがカスタマー サービス担当者に転送されると、トリガーは元のエージェント会話で起動し、人間のエージェント セッション中にメッセージを送信します。

ソリューション: エスカレーション時にエージェントの会話を終了するか、ガード変数 Global.IsEscalated = true 使用して、非アクティブなトピックの開始時に確認します。

非アクティブ トリガーが機能しない場合のトラブルシューティング

このデシジョン ツリーを使用して、問題を診断します。

  1. どこでテストしていますか?

    • テスト パネルを使用している場合は、停止します。 テスト パネルでは、非アクティブ トリガーはサポートされていません。 ライブ チャネルで公開してテストします。
  2. どのチャネルを使用していますか?

    • Microsoft 365 Copilot? このチャネルには既知の制限があります。 トリガーは起動しますが、メッセージは配信されません。 回避策はありません。
    • テレフォニー/IVR? このチャネルはサポートされていません。 代わりに OnSilence トリガーを使用してください。
  3. Generative AIのオーケストレーションは有効化されていますか?

    • 非アクティブ トリガーでは、認識ベースのルーティングとは別のタイマー パイプラインが使用されます。 ただし、生成 AI オーケストレーションでの動作は完全には検証されません。 非アクティブ処理が重要な場合は、クラシック オーケストレーションが推奨される構成です。
  4. durationInSecondsが 604,800 を超していますか?

    • "はい" の場合、トリガーは自動的に無視されます。 604,800 以下に減らします。
  5. エージェントは、連携済みエージェントのセットアップで子エージェントですか?

    • "はい" の場合、子エージェントの非アクティブ トリガーはサポートされません。 ロジックを親エージェントに移動します。
  6. 非アクティブなトリガーが複数あるか。

    • それらは、継続時間が短い順に発射されます。 十分に長く待っていることを確認します。 すべてのユーザー メッセージは、すべてのタイマーをリセットします。
  7. トリガーには初期化されていない変数を参照する条件がありますか?

    • 条件がまだ設定されていない変数を参照している場合、トリガーは自動的に除外されます。 すべての条件変数に既定値があることを確認します。
  8. 会話が開始された後、エージェントは再発行されましたか?

    • 再発行により、アクティブなセッションの非アクティブ タイマーがリセットされる可能性があります。 新しい会話を開始し、もう一度テストします。

アクティブでないトリガーがまだ機能しない場合は、次のオプションを試してください。

  • 非アクティブなトピックに関する活動があるか、会話記録を確認します。 トピックが表示されていても、ユーザーにメッセージが表示されなかった場合、問題はチャネル固有の配信です。
  • トピックが無効になっていないか、アーカイブされていないことを確認します。
  • トリガーの種類が、フレーズ トリガーではなく "非アクティブな期間後" であることを確認します。

ベスト プラクティス

  • 公開されたチャネルで常にテストします。 デモ Web サイトを使用して、簡単なテストを行います。 テスト ウィンドウに依存しないでください。

  • ループを防ぐには、ガード変数を使用します。 Global.DeactivateInactivityを作成します (ブール値、既定のfalse)。 EndConversation を呼び出す前に、 true に設定します。 非アクティブなトピックが開始されるたびに確認してください。

  • 期間を妥当な範囲に抑えます。 最小 15 秒、最大 604,800 秒 (7 日間)。

  • 単位を確認します。 このプロパティは秒単位です。 5 分 = 300 ですが、5ではありません。

  • Dynamics 365 Customer Serviceの場合: EndConversationは常に Power Automate 経由で closeOmnichannelConversation とペアリングします。

  • マルチトリガー シナリオの場合: 質問 ノードを 1 つのトリガーに制限するか、共有トピック パターンを使用します。

  • カスタマー サービス担当者に転送する前に EndConversation 呼び出して、非アクティブ トリガーを非アクティブ化します。

  • 展開後に会話トランスクリプトを監視して、メッセージが予期した時刻に表示されていることを確認します。

FAQ

非アクティブ トリガーがテスト パネルで機能しないのはなぜですか?

タイマーは、設計によってテスト パネルで無効になります。 エージェントを発行し、ライブ チャネルでテストします。

動的な期間 (変数など) を使用できますか?

Yes. 期間フィールドは、Power Fx 式を受け入れます。 環境変数または計算値を使用できます。 式は、タイマーが設定されているときに実行時に評価されます。 変数が初期化され、有効な数値が含まれていることを確認します。

会話がアクティブな間に新しいエージェント バージョンを発行するとどうなりますか?

ランタイムは新しいバージョンを読み込みます。 トリガー ID が変更された (トピックが削除されて再作成された) 場合、システムは期間別の照合にフォールバックします。 ID または期間で一致するトリガーがない場合、保留中の非アクティブ イベントは削除されます。

Teams で非アクティブなトリガーを完全に停止するにはどうすればよいですか?

プラットフォーム レベルで停止することはできません。 ゲーティング変数パターンを使用します。会話が論理的に終了したときにブール値を設定し、非アクティブなトピックの開始時に早期に終了することを確認します。

非アクティブ トリガーは認証で機能しますか?

はい。ただし、長いセッション タイムアウト (24 時間など) の場合、トリガーが起動する前にユーザーの認証トークンが期限切れになる可能性があります。 エージェントが再認証を適切に処理していることを確認します。

非アクティブなトピックで長時間かかるコネクタが呼び出された場合はどうなりますか?

コネクタ呼び出しにはタイムアウト制限があります (既定では 30 秒、最大 60 秒)。 コネクタを最適化するか、タイムアウトを適切に処理します。