Copilot Studioの「すべてのトピックを終了する」ノードと「会話の終了」ノードの違いがいまいち判らず、問い合わせをしたのでその内容をメモ。
問い合わせ結果だけ先に書くと、『「会話の終了」で会話を終了すると、チャネルごとに固有の動作が実行される』のが違いとのこと。
※ただしチャネルによっては固有の動作が存在しない場合もある。
トピック
Copilot Studioにおける会話は、基本的に「トピック」単位で管理する。


このトピック毎に「トリガー」があって、例えば「フレーズトリガー」で作ったトピックは、ユーザーのメッセージがフレーズに合致しているときにトピックが起動し、Copilotとの会話が始まる。
※フレーズトリガー以外にもリダイレクト専用のトリガーとかもある

※フレーズトリガー以外にもリダイレクト専用のトリガーとかもある

トピックの終了
この会話の単位である「トピック」を終了するノードは、以下2つがある。
- 現在のトピックを終了する
- すべてのトピックを終了する
ノード「現在のトピックを終了する」
この2つの違いはわかりやすくて、例えばこんな感じで「呼び出す側のトピック」から、「呼び出される側のトピック」を呼び出すときに、


呼び出される側のトピックで「現在のトピックを終了する」を使用すると、


呼び出される側のトピックが終了した後、呼び出す側のトピックの続き(「親トピック終了」メッセージ送信)が実行される。


ノード「すべてのトピックを終了する」
対して、呼び出される側のトピックで「すべてのトピックを終了する」を使用すると、


呼び出される側のトピックが終了した後、呼び出す側のトピックの続きは実行されず、会話が終了する。


ここまではわかりやすい。
ノード「会話の終了」
もう一つ、トピック(というより会話)の終了に関わるノードに「会話の終了」ノードがある。


こちらもノード「すべてのトピックを終了する」と同様に、呼び出される側のトピックで実行すると、


呼び出す側のトピックの続きは実行されず、会話が終了する。


「すべてのトピックを終了する」と「会話の終了」ノードの違い
この「すべてのトピックを終了する」と「会話の終了」ノードの動作の違いは、Copilot Studioのテスト実行だけだと全くわからない。
※公式には以下の通り、「すべてのトピックを終了」ノードの前に「会話を終了」ノードを追加する、と書かれているけど、
// 公式(日本語)
会話が終了したことをユーザーに知らせるには、すべてのトピックを終了 ノードの 前 に 会話を終了 ノードを追加します。// 公式(英語)
To let the user know that the conversation is over, add an End Conversation node before the End all topics node.公式より抜粋
会話の終了が呼ばれた時点でトピックは終了してしまうので、後ろの「すべてのトピックを終了する」ノードは呼ばれない。。


そこで、この2つのノードの違いをMicrosoftに問い合わせたところ、(問い合わせ時点では)「会話の終了」で会話を終了したときに『そのチャネルに応じた固有の動作』が実行されることが違いとのこと。
※この固有の動作以外は動作の違いはないらしい。

※この固有の動作以外は動作の違いはないらしい。

ここの「チャネルに固有の動作」とは、例えば「テレフォニー(音声対応)」の場合は「通話が終了する」みたいな、チャネルごとの動作のこと。
ちなみにTeamsは特に固有の動作はないため、「すべてのトピックを終了する」と「会話の終了」との間に動作の違いはないらしい。
※残念ながらこの「固有の動作」をまとめているリファレンスはないとのことなので、新しいチャネルにCopilotを展開する際に「会話の終了」ノードを使う場合は、必ず動作テストをする必要がありそう。
おまけ:システムトピックの「会話の終了」
システムトピックにも「会話の終了」が存在して、最初は「会話の終了」ノードを呼ぶとこのシステムトピックが自動で起動するのかと勝手に思っていた。


ついでに聞いてみたところ、このトピックが自動で呼び出されることはないらしく、このシステムトピックを使用したい場合は明示的に呼び出す(リダイレクトする)必要があるらしい。
※中を見ると「会話の終了」が使われている。

※中を見ると「会話の終了」が使われている。

コメント