ボットステートサービス(.NET Bot Builder SDKを使用)で状態を保存して取得したいボットを構築していました。 IDialogContextのPrivateConversationDataまたはUserDataのプロパティで保存として(それが何かを保存していなかった)働いていなかった、私がやったことは、ダイアログ内で、次のようなコードの断片を書くことだった:ボットフレームワークステートサービスでオブジェクトを保存しようとした後に一貫性のない状態
List<Value> valuesToStore = GetSomeValuesToStore();
StateClient stateClient = ((Activity)context.Activity).GetStateClient();
BotData userData = await stateClient.BotState.GetUserDataAsync(context.Activity.ChannelId, context.Activity.Conversation.Id);
if (userData != null && userData.GetProperty<List<Value>>(VALUES_NAME) != null)
{
DoSomethingWithUserData(userData);
}
else
{
//save values in state
userData.SetProperty(VALUES_NAME, valuesToStore);
await stateClient.BotState.SetUserDataAsync(context.Activity.ChannelId, context.Activity.Conversation.Id, userData);
}
その後コードは一度だけ実行されて、私は新しいメッセージが私のボットに到着したときは、次の例外を取得して開始しました:
Azureストレージ接続に関連したものになるように見えた"Settings must be of the form \"name=value"\."
(私は推測の状態を保存するために使用するものボットフレームワーク) 。ボットフレームワークデベロッパーポータルで新しいボットを作成し、自分で状態を保存していた唯一の解決策は、矛盾した状態でボットを取得したことです。
"Null properties cannot be encrypted. Please assign a default value to the property if you wish to encrypt it.";
私が店にしようとしていたオブジェクトがnull値を持つプロパティが含まれているため、明らかにした:
そして、いくつかの時間前に、類似した私は、同様のエラーを得ました。しかし、同じこと、私はボットを正常な状態に戻すことができませんでした。ボットが状態を取得しようとするたびに、新しいメッセージがすべて例外になるため、新しいメッセージを作成する必要がありました。
これについてのご意見はありますか?
ありがとうございます!
答えていただきありがとうございます。残念ながら、私は、SDKをプログラム的に使用して、言及したように、/ deleteProfileをボットに送信するなど、さまざまな方法で状態を削除しようとしたことを忘れていました。また、IDialogContextメソッドはPriveUserConversationDataにのみ保存され、1つのメッセージ(状態が空だった次のメッセージ)が持続しました。 –
私はbotフレームワークのドキュメントでprodで使用するつもりはないと読みましたが、私は単純なテストを行っていました。グレートブログ記事! –
IDialogContextメソッドを再度使用してみてください。問題が発生した場合は、StackOverflowに質問を投稿してください。バグが見つかったと思われる場合は、githubリポジトリに投稿してください:https://github.com/Microsoft/BotBuilder –