Node.js Alexa智能家居技能:发现设备的问题

Node.js Alexa智能家居技能:发现设备的问题,node.js,aws-lambda,alexa,alexa-skill,Node.js,Aws Lambda,Alexa,Alexa Skill,我在发现Alexa智能家居技术的设备时遇到了问题 有效的步骤: 激活Alexa技能 OAuth登录屏幕出现。成功登录后,将触发设备发现 在lambda函数中,我获得了用于调用…/devices端点的承载令牌 我从REST端点获取设备,并按照中所述构造有效负载 有效负载(与示例中的结构相同)提供给context.success 我的问题是: Alexa技能从发现设备任务返回后,在Alexa技能中看不到新设备。 当我使用示例中的代码时(没有发生对外部RESTAPI的请求),在完成Alexa发现任

我在发现Alexa智能家居技术的设备时遇到了问题

有效的步骤:

  • 激活Alexa技能
  • OAuth登录屏幕出现。成功登录后,将触发设备发现
  • 在lambda函数中,我获得了用于调用…/devices端点的承载令牌
  • 我从REST端点获取设备,并按照中所述构造有效负载
  • 有效负载(与示例中的结构相同)提供给context.success
我的问题是: Alexa技能从发现设备任务返回后,在Alexa技能中看不到新设备。

当我使用示例中的代码时(没有发生对外部RESTAPI的请求),在完成Alexa发现任务后,设备在Alexa skill中是可见的

var https=require('https');
const AWS=require('AWS-sdk');
exports.handler=函数(请求、上下文){
变量选项={
方法:“GET”,
主机名:“xyz.azurewebsites.net”,
路径:'/devices',
标题:{
授权:'Bearer'+request.directive.payload.scope.token,
“内容类型”:“应用程序/json”
}
};
var req=https.get(选项,(响应)=>{
var数据=“”;
response.setEncoding('utf8');
on('data',函数(x){data+=x;});
响应.on('error',console.error);
响应。在('end',()=>{
var dataObj=JSON.parse(数据);
log(“检索到的响应:+JSON.stringify(dataObj.items));
常数有效载荷={
“端点”:[]
};
dataObj.items.forEach(item=>{
常数设备={
“endpointId”:item.id,
“manufacturerName”:item.manufacturer,
“friendlyName”:item.displayName,
“说明”:项目说明,
“显示类别”:[“开关”],
“饼干”:{
“key1”:“skill引用此端点的任意键/值对。”,
“键2”:“可以有多个条目”,
“键3”:“但它们只能用于参考目的。”,
“key4”:“这不是保持当前端点状态的合适位置。”
},
“能力”:
[
{
“类型”:“接口”,
“接口”:“Alexa”,
“版本”:“3”
},
{
“接口”:“Alexa.PowerController”,
“版本”:“3”,
“类型”:“接口”,
“财产”:{
“支持”:[{
“名称”:“powerState”
}],
“可检索”:正确
}
}
]
};
有效载荷。端点。推送(设备);
});
log('payload'+JSON.stringify(payload));
var header=request.directive.header;
header.name=“Discover.Response”;
log(“调试”,“发现响应:”,JSON.stringify({header:header,payload:payload}));
//执行下一行时没有任何错误
success({event:{header:header,payload:payload}});
});	
});
请求开启('错误',(e)=>{
log('请求问题:'+e.message);
});
};我发现了问题。。。
属性“endpointId”的值包含“@”。然后我把名字改成只写字母,结果成功了。
尽管其中说可以使用“@”,但设备的发现仍然存在问题。

希望这个答案能帮助其他人避免浪费时间……

我发现了导致相同症状的另一个原因:对于实体的附加属性(制造商、型号等),不能使用非英语字符。实际上,您可以使用32到126(空格到波浪号)之间的任意ASCII字符,但不能使用反斜杠。因此,不允许使用重音字符(国际或扩展ASCII)

另一方面,我可以在端点ID中包含一个带有“@”的实体。我无法解释你为什么不能