您好,我在 Alexa Skill 中启用主动事件时遇到了困难。这是我已经完成的并且运行良好:
我的技能在开发阶段处于活跃状态,我可以通过它发现我的智能设备,使用该技能打开/关闭。我在帐户链接中使用 Google OAuth2 来实现 Alexa 技能。
为了启用主动事件,我转到 Alexa 开发者控制台 > 构建 > 权限 > 启用“发送 Alexa 事件”
然后我使用 Alexa CLI 并将其添加到我的 Skill.json 清单中:
"permissions": [
{
"name": "alexa::async_event:write"
},
{
"name": "alexa::devices:all:notifications:write"
}
我还在 lambda 函数中实现了事件处理程序,我可以看到 Alexa.Authorization / Alexa.AcceptGrant 请求进入我的 lambda 函数,以下是我在 Lambda 函数中处理指令的方式:
//AUTHORIZATION ACCEPT GRANT
async function handleAcceptGrant(request, context) {
console.log("REQUEST : ", request);
try {
// Build the response
const response = {
event: {
header: {
namespace: AUTHORIZATION,
name: AcceptGrant,
messageId: createMessageId(),
payloadVersion: '3'
},
payload: {}
},
}
console.log(response);
return response;
// If the directive is not Alexa.Authorization, return an error response
return createErrorResponse('INVALID_DIRECTIVE', 'This skill only supports Alexa.Authorization directives.');
}catch (error) {
console.error('Error handling directive:', error);
return createErrorResponse('INTERNAL_ERROR', 'An internal error occurred while handling the directive.');
}
响应,我的 lambda 函数正在发送:
{
event: {
header: {
namespace: 'Alexa.Authorization',
name: 'AcceptGrant',
messageId: 'e5c70465-c805-4b49-a3ca-33bee98b9fb3',
payloadVersion: '3'
},
payload: {}
}
}
但是,由于我进行了这些更改,我无法将 Alexa 应用程序中的帐户与我的技能相关联。我还尝试在 Postman 中使用以下字段对 https://api.amazon.com/auth/o2/token 进行后期调用:grant_type、client_id、client_secret 和范围。其中范围=“alexa::proactive_events”。我从亚马逊服务器得到的响应是“无效范围”。
我不知道如何继续并感到迷失。有人可以帮我吗?
这里的命名约定和术语可能会有点混乱,所以我完全理解你来自哪里。让我们先退后一步,描述与您列出的两个权限相关的功能。
skill.json
清单中的权限名称:alexa::async_event:write
创建智能家居技能时,切换“发送 Alexa 事件”权限开关会将
alexa::async_event:write
权限添加到您的技能清单中。此权限允许您主动发送ChangeReport、AddOrUpdateReport或DeleteReport事件到Alexa Event Gateway。
通过这种方式,您可以告诉 Alexa 客户何时将新设备添加到其设备云、删除设备或与设备交互,即使这些交互发生时客户没有直接与 Alexa 设备交互。
例如,如果我的客户在门上安装了接触传感器,并且他们实际打开了门,我可以向 Alexa 事件网关发送
ChangeReport
,报告 detectionState
属性已更改为 DETECTED
(打开)是 PHYSICAL_INTERACTION
的结果。主动报告设备属性的这些变化有多种好处,其中一大好处是您的客户可以使用设备状态的这些变化作为触发器在他们的 Alexa 应用程序中创建例程。
skill.json
清单中的权限名称:alexa::devices:all:notifications:write
创建自定义技能时,您可以选择启用“主动事件”。 主动事件 API 允许您进行 API 调用以向您的技能客户发送通知。这些通知必须符合多个预定义的主动事件模式之一。
例如,如果我有垃圾收集自定义技能,并且我想告诉我的客户下周一是垃圾收集日,我可以发送
AMAZON.TrashCollectionAlert.Activated
事件来通知他们。
以下建议基于以下假设:您确实正在使用智能家居技能,并且您的目标是将智能家居事件发送到“Alexa 事件网关”:
从智能家居技能清单中删除
alexa::devices:all:notifications:write
权限。智能家居技能不支持此权限。
调用
/auth/o2/token
端点以获取 access_token
和 refresh_token
删除之前添加的 alexa::proactive_events
范围。
作为参考,这是我自己的工作 Postman 请求的屏幕截图,其中我收到了
access_token
和 refresh_token
: