通过 iOS SDK 发布更新 Lex sessionAttributes

Issue updating Lex sessionAttributes via iOS SDK

当我使用 iOS sdk 时,我的 sessionAttributes 没有在 Lex 中更新。

我将会话属性发送给 Lex,如下所示:

self.interactionKit?.text(inTextOut: chatTextField.text!, 
    sessionAttributes: ["stage" : getStage() , "bot" : getBot()])

其中 getStage() 和 getBot() 是 return 字符串的函数。

我的问题是,当我为 "stage" 和 "bot" 发送一组会话属性时,Lex 将这些值用于所有后续调用,无论我发送什么更新值。

即如果在呼叫 #1 我发送

["stage" : "one" , "bot" : "first"]

并在呼叫 #2 中发送

 ["stage" : "two" , "bot" : "second"]

Lex 将使用 "one" 和 "first" 进行两次调用。

是否有一些我不知道的缓存?或者我需要用 "AWSLexSwitchModeResponse" 做些什么来更新会话属性吗?

终于解决了!这是 AWS Lex iOS SDK 中的一个错误,这是来自 AWS 论坛,AWS 资源在其中回答了这个问题:

“我在 SDK 中发现了问题。在:

https://github.com/aws/aws-sdk-ios/blob/master/AWSLex/AWSLexInteractionKit.m

正如您推测的那样,会话属性正在被缓存。

问题是 textInTextOut 和 textInAudioOut 方法中传入的属性是先添加传入的属性,然后再添加缓存的属性,如果有任何冲突,将覆盖您尝试时传入的属性去做。

SDK 修复是颠倒顺序:

目前:

[attributes addEntriesFromDictionary:sessionAttributes];
[attributes addEntriesFromDictionary:self.sessionAttributes];

应该是:

[attributes addEntriesFromDictionary:self.sessionAttributes];
[attributes addEntriesFromDictionary:sessionAttributes];

这将在下一版本的 SDK 中修复。"

我已经在我的项目中对 SDK 进行了本地更改,问题已解决。