Баг: Проблема "диалог не отвечает"

Взаимодействуем с диалогом.

Затем, если это, например, мобильное приложение, закрываем окно чата с диалогом, ну или просто сворачиваем приложение не выходя из навыка.

Затем, после какого-то периода времени (зачастую длинного, т.е. это часы, а не минуты) открываем приложение.

Запускаем "чаты" и возвращаемся к навыку. Вместо продолжения диалога с навыком слышим "диалог не отвечает".

Хотя это не так. Навык не только ответил, но и ответил очень быстро.

Довольно долго наблюдал за подобным и в итоге обнаружил, что происходит вот что:

Сначала в навык прилетает новая сессия (новый session_id), навык отвечает, но это все равно приводит к "диалог не отвечает".

А затем, при повторном запросе пользователя к навыку, прилетает запрос, но session_id предыдущий, т.е. который уже был ранее и в нем даже session.new равен false.

Так что я почти уверен, что причина проблемы в том, что при повторной активации (после длительного простоя) чата с навыком

диалоги/приложение ждут ответ на другой номер сессии (старую сессию).

И конечно его не дожидаются, т.к. в навык приходит новый номер сессии, на который он и отвечает.

А вот повторный запрос в навык исправляет ситуацию, т.к. номер сессии уже возвращается к старому номеру и сессия спокойно продолжается.

Если отслеживать по сессиям, то получается примерно следующее:

Разработчики навыков могут видеть подобную ситуацию и у себя. Проанализировав свои логи обращая внимания на сессии, в которых new равен true,

а так же user_id, который уже был в навыке до этого,

но кроме входа в навык в этой сессии больше ничего нет и не будет, т.е. на этом эта новая сессия и заканчивается.

Для понимания сути, вот последний пример по логам:

Открываем окно с чатом навыка, который мы использовали некоторое время назад: В навык приходит запрос с session_id c2bd4150-f2c0-4536-b20a-e546fb1ae083:

[26.04.2020 08:37:03.1306] [sid: c2bd4150-f2c0-4536-b20a-e546fb1ae083] Request from 37.140.152.243
{"meta":
{"locale":"ru-RU","timezone":"Europe\/Moscow","client_id":"ru.yandex.searchplugin\/10.61 (HUAWEI ANE-LX1; android 9)",
"interfaces":{"screen":[],"payments":[],"account_linking":[]}},
"session":{"message_id":0,"session_id":"c2bd4150-f2c0-4536-b20a-e546fb1ae083",
"skill_id":"xxxxxxxx-yyyy-zzzz-zzzz-yyyyyyyyyyyy","
user_id":"XXXXXYYYYYYY0FCEC19F874513BF660AB15B5786803BE7E0F19F2XXXXXYYYYYYY",
"user":{"user_id":"ZZZZZZZZZZ9999999FFF1A2FFFFFFFFCAAC0459AC9EB8B218C7046ZZZZZZZZZZ"},
"application":{"application_id":"XXXXXYYYYYYY0FCEC19F874513BF660AB15B5786803BE7E0F19F2XXXXXYYYYYYY"},"new":true},
"request":{"command":"","original_utterance":"","nlu":{"tokens":[],"entities":[],"intents":[]},"markup":{"dangerous_context":false},"type":"SimpleUtterance"},"version":"1.0"}

[26.04.2020 08:37:03.2827] [sid: c2bd4150-f2c0-4536-b20a-e546fb1ae083] Reply time [0.2142] sec.

Слышим "диалог не отвечает" и не смотря на то, что навык дал ответ на session_id c2bd4150-f2c0-4536-b20a-e546fb1ae083.

Cнова шлем навыку что-то, например "ку". Навык получает запрос, но session_id предыдущий/старый/который был ДО c2bd4150-f2c0-4536-b20a-e546fb1ae083 :

[26.04.2020 08:37:10.8482] [sid: 86075f95-b260-4f5c-b295-8a64781914af] Request from 37.140.152.236
{"meta":
{"locale":"ru-RU","timezone":"Europe\/Moscow","client_id":"ru.yandex.searchplugin\/10.61 (HUAWEI ANE-LX1; android 9)",
"interfaces":{"screen":[],"payments":[],"account_linking":[]}},
"session":{"message_id":28,"session_id":"86075f95-b260-4f5c-b295-8a64781914af",
"skill_id":"xxxxxxxx-yyyy-zzzz-zzzz-yyyyyyyyyyyy","user_id":"XXXXXYYYYYYY0FCEC19F874513BF660AB15B5786803BE7E0F19F2XXXXXYYYYYYY","user":{"user_id":"ZZZZZZZZZZ9999999FFF1A2FFFFFFFFCAAC0459AC9EB8B218C7046ZZZZZZZZZZ"},
"application":{"application_id":"XXXXXYYYYYYY0FCEC19F874513BF660AB15B5786803BE7E0F19F2XXXXXYYYYYYY"},"new":false},
"request":{"command":"ку","original_utterance":"ку","nlu":{"tokens":["ку"],"entities":[],"intents":[]},"markup":{"dangerous_context":false},"type":"SimpleUtterance"},"version":"1.0"}

И только вот тут пользователь слышит ответ от навыка, а НЕ "диалог не отвечает".