我在发现具有Alexa智能家居技能的设备时遇到问题。
可行的步骤:
我的问题: 从“发现设备”任务返回Alexa技能后,Alexa技能中将看不到新设备。
当我使用示例中的代码(不发生任何对外部Rest API的请求)时,在执行Alexa发现任务后,该设备就可以在Alexa技能中看到。
var https = require('https');
const AWS = require('aws-sdk');
exports.handler = function(request, context) {
var options = {
method: 'GET',
hostname: 'xyz.azurewebsites.net',
path: '/devices',
headers: {
Authorization: 'Bearer ' + request.directive.payload.scope.token,
'Content-Type': 'application/json'
}
};
var req = https.get(options, (response) => {
var data = '';
response.setEncoding('utf8');
response.on('data', function(x) { data += x; } );
response.on('error', console.error);
response.on('end', () => {
var dataObj = JSON.parse(data);
console.log("Retrieved response: " + JSON.stringify(dataObj.items));
const payload = {
"endpoints": []
};
dataObj.items.forEach(item => {
const device = {
"endpointId": item.id,
"manufacturerName": item.manufacturer,
"friendlyName": item.displayName,
"description": item.description,
"displayCategories": ["SWITCH"],
"cookie": {
"key1": "arbitrary key/value pairs for skill to reference this endpoint.",
"key2": "There can be multiple entries",
"key3": "but they should only be used for reference purposes.",
"key4": "This is not a suitable place to maintain current endpoint state."
},
"capabilities":
[
{
"type": "AlexaInterface",
"interface": "Alexa",
"version": "3"
},
{
"interface": "Alexa.PowerController",
"version": "3",
"type": "AlexaInterface",
"properties": {
"supported": [{
"name": "powerState"
}],
"retrievable": true
}
}
]
};
payload.endpoints.push(device);
});
console.log('payload ' + JSON.stringify(payload));
var header = request.directive.header;
header.name = "Discover.Response";
console.log("DEBUG", "Discovery Response: ", JSON.stringify({ header: header, payload: payload }));
//NEXT LINE IS EXECUTED WITHOUT ANY ERROR
context.succeed({ event: { header: header, payload: payload } });
});
});
req.on('error', (e) => {
console.log('problem with request: ' + e.message);
});
};
答案 0 :(得分:1)
我发现了问题... 属性“ endpointId”的值包含“ @”。然后我将名称更改为仅字母,并且可以正常工作。 尽管在this article中说可以使用'@',但是发现设备存在问题。 希望这个答案可以帮助其他人避免浪费时间...
答案 1 :(得分:0)
我发现了相同症状的另一个原因:对于实体的AdditionalAttributes(制造商,模型等),不能使用非英文字符。实际上,您可以使用32到126之间的任何字符ASCII(空格到波浪号),但是不能使用反斜杠。因此,不允许使用任何重音符号(国际或扩展ASCII)。
另一方面,我可以在其endpointId中包含一个带有“ @”的实体。我无法解释为什么你不能。