Проблема с обновлением Lex sessionAttributes через iOS SDK

Мои атрибуты sessionAttributes не обновляются в Lex, когда я использую iOS sdk.

Я отправляю атрибуты сеанса Лексу следующим образом:

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

где getStage() и getBot() — функции, возвращающие строки.

Моя проблема заключается в том, что когда я отправляю набор атрибутов сеанса для «этапа» и «бота», эти значения используются Лексом для всех последующих вызовов, независимо от того, какие обновленные значения я отправляю.

т.е. если на Call #1 я отправлю

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

и по звонку №2 отправляю

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

Лекс будет использовать «один» и «первый» для обоих вызовов.

Есть ли какое-то кэширование, о котором я не знаю? Или мне нужно что-то сделать с «AWSLexSwitchModeResponse», чтобы обновить атрибуты сеанса?


person AndyOS    schedule 20.07.2017    source источник


Ответы (1)


Наконец решил! Это была ошибка в 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 в своем проекте, и проблема решена.

person AndyOS    schedule 17.08.2017