Watson Assistant にあらかじめ情報を渡す方法


環境

IBM Cloud 上の node-red で開発しています
Assistant を利用して LINE bot との会話を構成します

やりたいこと

Assistant で会話を始める前に Assistant に情報を渡したい
例えば今回は、LINE bot に画像を投稿して、Watson Visual Recognition で画像を認識させて、その結果を Assistant の会話で利用する必要がありました

方法

Assistant ノードの前に function ノードを追加して以下を記述します

//watson assistant の準備
msg.params = {};
msg.params.endpoint = "https://gateway.watsonplatform.net/assistant/api";
msg.params.username = "xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx"; //Assistant の資格情報
msg.params.password = "xxxxxxxxxxxx"; //Assistant の資格情報
msg.params.workspace_id = "xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx"; //Assistant で呼び出したい Workspace の Workspace-id

//渡したい情報を context にセットする
msg.params.context.color= "red";
msg.params.context.size= "big";

msg.payload = {};
msg.payload = "bot に投げるメッセージ";

return msg;

備忘

会話はこちらからのメッセージに対して、bot が一回返答する形になります
次のメッセージをこちらから投げる時には前の msg はクリアされていて、値を保持しておけません

Assistant は継続した会話として値を保持してくれているようですので、context に入れておけば持っておけます

その後は、会話を新たに始める際に context をクリアしています