通过iOS SDK

时间:2017-07-20 20:07:54

标签: ios amazon-web-services aws-lambda aws-sdk amazon-lex

当我使用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会使用"一个"和"第一"对于这两个电话。

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

1 个答案:

答案 0 :(得分:0)

终于解决了!这是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进行了本地更改,问题已解决。