2017-07-20 32 views
1

當我使用iOS sdk時,我的sessionAttributes在Lex中沒有更新。通過iOS SDK更新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"] 

萊克斯將採用 「一」 和 「第一」 的兩個電話。

有沒有我不知道的緩存?或者,我需要使用「AWSLexSwitchModeResponse」來更新會話屬性嗎?

回答

0

終於解決了!這是在AWS萊克斯的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進行了本地更改,問題已解決。