我已将google助手与我的dialogflow代理集成。我需要获得调用intent的用户。
例如,如果用户帐户“ABC”有权通过Google助手应用程序调用我的代理,则欢迎意图我必须发送“欢迎ABC”等回复。如何通过Google助手应用实现这一目标是我的终点。
先谢谢。
答案 0 :(得分:6)
这里有两个问题:如何获取用户的姓名以及如何获取他们的身份。
首先要注意的是,此信息被视为个人身份信息(PII),因此未经用户许可,Google不会将此信息提供给您。您如何要求获得该许可以及如何将其提供给您,取决于您的一些确切需求。
用户ID
过去,您可以获取助理帐户的匿名用户ID。这与下面提供的Google用户ID不同,并且是一个持久性标识符,因此您可以跟踪返回的用户。
This has been deprecated,如果这就是您所需要的,那么您可以创建自己的标识符并将其保存为userStorage的一部分。
请求用户信息
获取其姓名的传统方式是向用户请求permission to access their information。如果您正在使用google上的操作库,则可以使用Permission
对象执行此操作,如下所示:
const options = {
// We just want permission to get their name
permissions: ['NAME'],
// Prompt them why we want the information
context: 'To address you by name'
};
conv.ask(new Permission(options));
如果用户授予权限,则结果将在conv.user.name
中提供。您应该将其保存在userStorage中,因为权限不是持久的。所以这可能看起来像:
var userStorageStr = conv.user.userStorage || '{}';
var userStorage = JSON.parse( userStorageStr );
var name = conv.user.name || userStorage.name;
userStorage.name = name;
// ...
conv.user.userStorage = JSON.stringify( userStorage );
使用多重库,您可以指示User/Name
环境属性是您想要的操作或意图的Requirements
之一。所以这可能在你的配置中
Local: {
en: {
Requirements: {
"Action.multivocal.welcome": "User/Name"
}
}
}
该名称将在User/Name
下的环境中提供。
如果您正在使用JSON,则需要使用user information helper。对于Dialogflow,这将属于payload.google.systemIntent
属性,而对于Actions SDK,这将属于expectedInputs[0].possibleIntents[0]
。您可以指定以下内容:
{
"intent": "actions.intent.PERMISSION",
"inputValueData": {
"@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec",
"optContext": "To address you by name",
"permissions": [
"NAME"
]
}
}
如果您使用Dialogflow并且originalDetectIntentRequest.payload.user.profile
用于Action SDK,则名称将位于user.profile
字段下。
所有这一切似乎都很多,只是为了得到一个名字。如果你想要的话,你也无法获得电子邮件地址。但还有其他选择。
申请其Google个人资料
他们的Google个人资料包含他们唯一的Google ID,他们的全名(在"名称"字段,given_name,last_name,以及一般其他一些信息,例如他们的电子邮件地址(电子邮件地址不是&#39) ; t保证,因为他们可以从他们的个人资料中省略这个,但通常在那里。)你可以使用Google Sign-In for the Assistant来请求这些信息。有一些configuration required in the Action console,然后你会请求获得使用它的权限sign-in helper。
使用google上的操作库,该行将类似于:
conv.ask(new SignIn());
用户授予后,您可以在
中获取其个人资料conv.user.profile.payload
他们的名字在
conv.user.profile.payload.name
和他们的电子邮件,你猜对了,
conv.user.profile.payload.email
请注意,与要求提供用户信息不同,该配置文件将在以后的所有活动中提供。你不需要存储它。
对于multiocal,您会说User/IsAuthenticated
环境设置是您想要的操作或意图的Requirements
之一。所以这可能在你的配置中
Local: {
en: {
Requirements: {
"Action.multivocal.welcome": "User/IsAuthenticated"
}
}
}
该个人资料将在User/Profile
下的环境中显示,名称将位于User/Profile/name
中,电子邮件位于User/Profile/email
中。
如果您正在使用JSON,则需要使用sign-in helper。对于Dialogflow,这将属于payload.google.systemIntent
属性,而对于Actions SDK,这将属于expectedInputs[0].possibleIntents[0]
。您可以指定以下内容:
{
"intent": "actions.intent.SIGN_IN",
"inputValueData": {}
}
如果您使用Dialogflow并且originalDetectIntentRequest.payload.user.idToken
用于Action SDK,您将在user.idToken
字段中获取该用户的身份令牌。你需要validate and decode这个JWT。 (google和multiocal动作库会为您处理此步骤。)
答案 1 :(得分:3)
最简单的方法是使用Google登录助理:https://developers.google.com/actions/identity/google-sign-in