我们是否可以通过Alexa Skill调用的Lambda函数向设备发送消息。该消息包含Lambda函数收集的一些值。 所以基本上我想这样做:
Java中是否有任何示例?
感谢任何指针/帮助。
-James
答案 0 :(得分:0)
Invoke Alexa device from lambda function是一个非常相似的问题,答案是:"它不可能YET"
我会详细说明。您可以向技能的所有用户发送通知,例如新功能,但是,您无法向调用功能的特定用户发送通知。
要向已启用通知的Alexa技能的所有用户发送通知,请参阅此design。
有关向特定用户发送通知的限制的详细信息,请参阅此thread。
答案 1 :(得分:0)
您的要求可以完成。
首先,语音命令不是来自图中的人。 设备与Alexa通话。 Alexa调用或触发Lambda。 Lambda功能消息设备。
Lambda内部的函数为http
或https
。如果您的设备可以处理https或TLS加密,那就很好。但是大多数设备很小,并且计算能力有限,因此您最终将使用http。截至2020年,AWS允许使用http,但由于联邦法规的限制,一年后要求您使用https或TLS 1.3。但是直到发生时我们才知道。
以下是NodeJS中Lambda http
帖子的示例。触发数据来自request
。因此,您应该知道将使用哪种JSON,并使用if
语句从JSON中提取数据。
NodeJS网站上有很好的http范例。
现在您的设备是服务器。它必须预见Lambda请求并进行处理,并在需要时回复Lambda。
现在您的设备开始通话并接收信息。
const http = require('http');
exports.handler = async (request, context) => {
if (request.directive.header.namespace === 'FromAlexaSkill') {
httpost("This is your data to device", "192.168.1.2");
}
//**********************************************
let httpPost =async (postData, servername) => {
let dataString = '';
const response = await new Promise((resolve, reject) => {
const options = {
hostname: servername,
port: 1777,
path: '/dim',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(postData)
}
};
const req = http.request(options, (res) =>
{
res.setEncoding('utf8');
res.on('data', chunk => {
dataString += chunk;
});
res.on('end', () => {
resolve({
"body":dataString
});
});
});//http.request
req.on('error', (e) => {
console.error("problem with request: "+e.message);
reject({
statusCode: 500,
body: 'Something went wrong!'
});
});
// Write data to request body
req.write(postData);
req.end();
}); //Promise
return response;
};//httpPost
}