2017-09-18 7 views
1

ボットステートサービス(.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値を持つプロパティが含まれているため、明らかにした:

そして、いくつかの時間前に、類似した私は、同様のエラーを得ました。しかし、同じこと、私はボットを正常な状態に戻すことができませんでした。ボットが状態を取得しようとするたびに、新しいメッセージがすべて例外になるため、新しいメッセージを作成する必要がありました。

これについてのご意見はありますか?

ありがとうございます!

答えて

1

状態が壊れている場合、ボットに"/ deleteProfile"というメッセージが送信され、ボットはそのユーザーの状態を消去します。

プロダクションボットにはデフォルト状態のクライアントを使用することはお勧めしません。このブログの投稿を確認してください。https://blog.botframework.com/2017/07/18/saving-state-azure-extensions/

activity.GetStateClient()がデフォルト状態のクライアントです。状態と対話するにはIDialogContextメソッドを使用する必要があります。あなたは "それは何も保存していない"と言います。何故なの?

ヌルプロパティを状態に保存できます。それは問題ではありません。状態のnullプロパティに関して見たエラーは修正されたバグでした。

+0

答えていただきありがとうございます。残念ながら、私は、SDKをプログラム的に使用して、言及したように、/ deleteProfileをボットに送信するなど、さまざまな方法で状態を削除しようとしたことを忘れていました。また、IDialogContextメソッドはPriveUserConversationDataにのみ保存され、1つのメッセージ(状態が空だった次のメッセージ)が持続しました。 –

+0

私はbotフレームワークのドキュメントでprodで使用するつもりはないと読みましたが、私は単純なテストを行っていました。グレートブログ記事! –

+0

IDialogContextメソッドを再度使用してみてください。問題が発生した場合は、StackOverflowに質問を投稿してください。バグが見つかったと思われる場合は、githubリポジトリに投稿してください:https://github.com/Microsoft/BotBuilder –

関連する問題