我正在创建alexa应用,为此,我有权使用用户的位置和客户的名字。我的第一个问题是客户的名字是用户的名字,还是不同的名字。但是,如果要输入用户的名字,那么请先获取该名字。对于位置信息,我们使用ConsentToken
,是否有任何方法可以删除用户名?
我可以询问用户名并存储它,然后可以问候用户。但是我必须问用户每次启动该应用程序。我正在使用php。
答案 0 :(得分:0)
首先,用户必须将其帐户与您的技能相关联并接受许可 (您需要在技能配置中进行设置)
用户登录后,您将只能使用访问/刷新令牌从Alexa输出中获取用户名
答案 1 :(得分:0)
除了Neryuk's answer正确地指出文档之外,我还在NodeJS中提供了一些代码示例。
假设您已经从Alexa Skill Developer Portal授予了所有必需的权限,则可以通过以下方式在意向处理程序中要求用户信息:
const PERMISSIONS = ['alexa::profile:name:read', 'alexa::profile:email:read', 'alexa::profile:mobile_number:read'];
const MyIntentHandler = {
canHandle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
// checks request type
return request.type === 'LaunchRequest'
|| (request.type === 'IntentRequest'
&& request.intent.name === 'MyIntent');
},
async handle(handlerInput) {
const { requestEnvelope, serviceClientFactory, responseBuilder } = handlerInput;
const requestAttributes = handlerInput.attributesManager.getRequestAttributes();
const consentToken = handlerInput.requestEnvelope.context.System.apiAccessToken;
if (!consentToken) {
return responseBuilder
.speak('Missing permissions')
.withAskForPermissionsConsentCard(PERMISSIONS)
.getResponse();
}
const client = serviceClientFactory.getUpsServiceClient();
const userName = await client.getProfileName();
const userEmail = await client.getProfileEmail();
const userMobileNumber = await client.getProfileMobileNumber();
console.log('Name successfully retrieved '+ userName);
console.log('Email successfully retrieved '+ userEmail);
console.log('PhoneNumber successfully retrieved '+ JSON.stringify(userMobileNumber));
const speakOutput = 'The username is '+userName;
return handlerInput.responseBuilder
.speak(speakOutput)
.withSimpleCard('MyFavSkill')
.getResponse();
},
};
请注意,您必须将 handlerInput 代码声明为 async ,因为您正在调用异步请求,因此必须在方法内等待。 代码缺少“ try-catch”块以简化其读取,但是您应该管理意外的错误。 希望这会有所帮助。