У вас есть несколько вариантов, в зависимости от ваших конкретных потребностей.
Простой: userStorage
Google предоставляет объект userStorage
который сохраняется в разговорах , когда он может идентифицировать пользователя .Это позволяет вам хранить свой собственный идентификатор, когда вам нужно отслеживать, когда пользователь возвращается.
Самый простой способ сделать это - проверить объект userStorage
на наличие идентификатора при вызове вашего webhook.Если он не существует, создайте его, используя что-то вроде UUID v4, и сохраните его в объекте userStorage
.
Если вы используете библиотеку actions-on-google, код может выглядеть примерно так:
let userId;
// if a value for userID exists un user storage, it's a returning user so we can
// just read the value and use it. If a value for userId does not exist in user storage,
// it's a new user, so we need to generate a new ID and save it in user storage.
if (userId in conv.user.storage) {
userId = conv.user.storage.userId;
} else {
// Uses the "uuid" package. You can get this with "npm install --save uuid"
var uuid = require('uuid/v4');
userId = uuid();
conv.user.storage.userId = userId
}
Если вы используете библиотеку диалоговых потоков, вы можете использовать вышеуказанное, но сначала вам понадобится эта строка:
let conv = agent.conv();
Если вы используете multivocal библиотека, она выполняет все вышеперечисленное для вас и предоставит идентификатор пользователя в среде по пути User/Id
.
Если вы работаете с JSON напрямую, и вы используетеПротокол Dialogflow v2 позволяет получить объект userStorage, изучив originalDetectIntentRequest.payload.user.userStorage
в объекте запроса JSON.Вы зададите объект payload.google.userStorage
в ответе JSON.Код похож на приведенный выше и может выглядеть примерно так:
let userStorage = body.originalDetectIntentRequest.payload.user.userStorage || {};
let userId;
// if a value for userID exists un user storage, it's a returning user so we can
// just read the value and use it. If a value for userId does not exist in user storage,
// it's a new user, so we need to generate a new ID and save it in user storage.
if (userId in userStorage) {
userId = userStorage.userId;
} else {
// Uses the "uuid" package. You can get this with "npm install --save uuid"
var uuid = require('uuid/v4');
userId = uuid();
userStorage.userId = userId
}
// ... Do stuff with the userID
// Make sure you include the userStorage as part of the response
var responseBody = {
payload: {
google: {
userStorage: JSON.stringify(userStorage),
// ...
}
}
};
Обратите внимание на первую строку кода - если userStorage
не существует, используйте пустой объект.Он не будет существовать до тех пор, пока вы не отправите ответ, включающий в себя сохранение чего-либо в нем в первый раз, что произойдет в последних нескольких строках этого кода.
Дополнительно: привязка учетной записи
Вы можете попросить пользователей выполнить вход в свое действие с помощью входа в Google .Это можно сделать, просто используя голосовую связь в самых простых случаях, и это приведет к прерыванию потока только в первый раз.
После этого вашему действию присваивается JWT, содержащий его идентификатор Google, который вы можете использовать в качестве идентификатора.
Если вы используете библиотеку actions-on-google, вы можете получить идентификатор из декодированного JWT со строкой, такой как:
const userId = conv.user.profile.payload.sub;
В многофакторной библиотеке идентификаториз декодированного JWT доступен в среде по пути User/Profile/sub
устарел: идентификатор анонимного пользователя
Здесь вы найдете ответы на StackOverflow, которые ссылаются наID анонимного пользователя.Google устарел этот идентификатор, который не всегда был надежным способом проверки возвращающихся пользователей, и будет удалять его 1 июня 2019 года.
Этот код еще отправляется, но он будет удален с 1 июня 2019 года..