我们有没有办法从Lambda函数向设备发送一条消息,这个函数是由Alexa Skill调用的。该消息包含一些由Lambda函数收集的值。所以基本上我想这样做:
在Java中有什么例子吗?
感谢你的指点/帮助。
-James
发布于 2018-05-30 09:19:22
Invoke Alexa device from lambda function是一个非常类似的问题,答案是:“还不可能”。
我会详细说明。您可以向技能的所有用户发送通知,但不能向调用函数的特定用户发送通知。
要向启用了通知的Alexa技能的所有用户发送通知,请参阅此design。
有关向特定用户发送通知的限制的详细信息,请参阅此thread。
发布于 2020-09-04 13:43:37
你所要求的是可以做到的。
首先,语音命令不是来自您的图表中的人类。一个设备在和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
}
https://stackoverflow.com/questions/50572672
复制相似问题