背景
会社で以下質問を受けたので試してみた記録
ボット変数のリセット方法が分かりますか? トピックA⇒C、トピックB⇒C で動かすと、トピックA⇒Cで動かしたときの結果が残ってるんです。
分かったこと
「質問する」を追加することで作成する。
Create a variable によると、
In the bot authoring canvas, add a question node by choosing Ask a question. A variable will be automatically created within the node.
他に生成方法が無いかと探したけど、現状見つからず・・。上記マニュアルの通りかな、と
変数の設定
- トピック:対象トピック内だけで利用可能。
「別のトピックにリダイレクトする」を利用することで、以下が効いてくる- 他のトピックから・・:他のトピックから受け取ることが可能。と言いつつ、質問で上書きされるので意味不明
- 値を元のトピックに・・:Return して結果を返すことが可能
- ボット:トピック間で利用可能
- 外部ソース・・:外部(Power Automate とか)で設定することが可能
他のトピックから・・・
渡す値が、変数と整合取れていれば普通に渡せるが、不整合の場合はエラー
※以下の場合、選択肢外の変数を入れているからエラーが出てると認識
で、参照元から渡されてる場合、質問が省略される。
故に、複数のトピックからリダイレクトした場合、Call元の値をそのまま利用することが可能そう
しかしながら、同一トピックへの複数リダイレクトの場合は、二回目以降では、引数は利用されず質問されることになる。
値を元のトピックに・・・
変数の初期化タイミング
Life Cycle によると、最初からやり直す場合と、変数の生成トピックを呼び出された時。
The value is only cleared when the bot user is redirected to the Start over system topic, or when the user triggers this topic directly (for example, by typing Start over). In this case, all bot variables will be reset and won't have any values.
変数が初期化されてなかった場合の動作
initialization によると、参照トピックが呼び出された際に未初期化だった場合、変数の生成トピックが事前に呼び出されることになる。
If a bot variable is triggered before it has been initialized (or "filled in"), the bot will automatically trigger the part of the topic where the bot variable is first defined—even when it's in a different topic—before returning to the original topic. This allows the bot to have all the variables filled in without interrupting the conversation.
考察
- 変数のリセット方法は無い
- 複数のトピックの結果を共通して利用することは可能。
- 同一トピックを複数回リダイレクトすることがあると問題はあるけどそんな使い方はたぶんしない筈
- Bot変数を利用すると、必須質問をトピックにまとめておくことで、必要な時に勝手に呼ばれるように出来そう
- Automateからの受取もまた便利そうね
いい感じで使えそうなことが見えてきた。
あとは、もうちょいメンテしやすい仕組みにしてくれるとありがたいなぁ