タスクBotコマンドを利用した子ボット実行時のデータ受け渡し
ボットを開発するうえでメンテナンス性を高めるために、特定の処理を一つのタスクボットとして開発し、
それを他のタスクボットから呼び出すといった処理を良く実装するかと思います。
イメージとしてはこんな感じ。
どうやってデータを渡す?
ここで問題になってくるのが、どうやったら親タスクボットから子タスクボットにデータを渡せるのか。
そして、その逆に、子タスクボットからのデータを親タスクボットに戻すことが出来るのか。
ちょっと分かりづらいので、開発の流れをで書いていきます。
手順1. 子ボットで変数を作る。
まず、子ボットの中で変数を作ります。
変数名は何でもよいのですが、ここでは「Input変数」という名前で変数を作成し、「入力として使用」にチェックを入れました。
これが、親ボットからの入力を受ける変数となります。
次に、「Output変数」という名前の変数を作成し、「出力として使用」にチェックを入れました。
こうすることで、子ボットでこの変数に設定した値が親ボットへ戻されることになります。
子ボットとしては、親からの入力をメッセージボックスで表示し、文字列を「Output変数」に設定する単純なものを作りました。
手順2. 親ボットを作る
次に、親ボットから子ボットを呼び出す処理を作ります。
パラメータで子ボットを選択すると、子ボットの中で「入力として使用」にチェックを入れた変数が表示されますので、
ここで渡したい値を設定します。
そして、パラメータの一番下の部分で、ディクショナリ型の変数を作成して割り当てます。
子ボットからの戻りはこのディクショナリ型変数に入ります。
今回は、どの様に戻ってきているのかを確認しやすいよう、Bot StoreからダウンロードしたJavaFXパッケージを利用してディクショナリ変数の値を表示します。
手順3. 実行してみます。
親ボットを実行すると、子ボットが呼び出されメッセージボックスに親ボットで設定した値が表示されます。
そして、その次に、親ボットのJavaFXパッケージのDictionary Viewで子ボットから戻ってきた内容が表示されます。
Keyとして変数名、Valueとして子ボットで変数に設定した値が入っていることが確認できます。
まとめ
公式のドキュメントを見ても少し分かりづらい部分なのですが、
- 子ボットの中で設定したインプット用変数に親ボットからの入力が渡る
- 子ボットの中で設定したアウトプット用変数に親ボットに渡したいデータを設定する
- 親ボットでは、ディクショナリ変数で子ボットからの戻りを受ける
という形になります。