В настоящее время я работаю над простой обработкой сеанса в облачной функции как выполнение Dialogflow. В моем скрипте я храню различные переменные, либо введенные пользователем, либо полученные из внешних API. Для обработки сеансов я сохраняю переменные данные в базе данных Firestore. Однако, когда два разных пользователя общаются с ботом одновременно, сеансы по-прежнему перезаписывают переменные друг друга, что приводит к прерыванию разговора.
Прямо сейчас у меня следующий рабочий процесс:
- при обнаружении намерения искать существующие данные сеанса в Firestore (идентификатор сеанса Dialogflow, заданный внешним триггером, используется в качестве ключа хранения)
- если уже есть какие-либо данные, загрузите данные переменных в глобальные переменные внутри скрипта
- обрабатывать код намерения на основе загруженных переменных
- генерировать вывод для пользователя на основе переменных
- после
agent.add(...)
сохраните данные обратно в базу данных Firestore
Для меня это все еще выглядит логичным. Кроме того, загрузка и сохранение в базу данных проверены и работают по назначению. Но каким-то образом, если два или более пользователя общаются одновременно, данные между ними перезаписываются. Как я могу предотвратить это? И не должны ли облачные функции иметь возможность «масштабироваться» сами по себе, что для меня означает, что функции работают для тысячи пользователей одновременно без каких-либо условий гонки?