1

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

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

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

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

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

即如果在呼叫#1 我发送

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

在电话#2我发送

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

Lex 将对这两个调用使用“one”和“first”。

是否有一些我不知道的缓存?或者我是否需要对“AWSLexSwitchModeResponse”做一些事情来更新会话属性?

4

1 回答 1

0

终于解决了!这是 AWS Lex iOS 开发工具包中的一个错误,这是来自 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 进行了本地更改,问题已解决。

于 2017-08-17T23:01:49.713 回答