我需要为Alexa Skills Kit制作一个自定义技能,它应该是每个房间的一个回音设备.我需要为每个echo设备获取device_id.我听说这是不可能的,但也许它改变了,或者如果没有,还有其他办法.
alexa alexa-skill alexa-skills-kit alexa-voice-service alexa-slot
在使用Alexa技能套件测试我的交互模型时,我发现了一些奇怪的东西.
我定义了一个自定义插槽类型,如下所示:
CAR_MAKERS Mercedes | BMW | Volkswagen
Run Code Online (Sandbox Code Playgroud)
我的意图计划是这样的:
{
"intents": [
{
"intent": "CountCarsIntent",
"slots": [
{
"name": "CarMaker",
"type": "CAR_MAKERS"
},
...
Run Code Online (Sandbox Code Playgroud)
样本话语如:
CountCarsIntent Add {Amount} cars to {CarMaker}
Run Code Online (Sandbox Code Playgroud)
现在,在开发人员控制台中进行测试时,我注意到我可以编写如下内容:
"Add three cars to Ford"
Run Code Online (Sandbox Code Playgroud)
它实际上会解析这个!即使在交互模型中从未提及"福特"!lambda请求是:
"request": {
"type": "IntentRequest",
...
"intent": {
"name": "CountCarsIntent",
"slots": {
"CarMaker": {
"name": "ExpenseCategory",
"value": "whatever"
},
...
Run Code Online (Sandbox Code Playgroud)
这真的让我感到惊讶,因为有关自定义插槽类型的文档非常清楚,插槽只能采用交互模型中列出的值.
现在,似乎值也是动态解析的!这是一个新功能,还是我错过了什么?
如何接受自由文本作为输入/插槽?除了使用自定义插槽并提供大量列表之外,还有什么方法吗?由于不推荐使用文字槽类型,如何向 alexa 提供自由文本/字符串输入?
我正在为Google日历构建Alexa Skill。客户端代码可以在本地计算机上按预期工作,因为我可以使用链接对本地计算机进行身份验证。但是,当我在AWS Lambda上部署代码时,由于无法通过AWS控制台输入代码,因此无法进行身份验证。
当部署在AWS lambda上时,我无法设置Google Calendar API的身份验证。
本文档对我没有太大帮助 Google实施服务器端身份验证
我有一个 Python Lambda 函数,可以同时响应 IoT Button 和 Alexa 技能。
有没有办法读取event
或context
传递给处理程序函数以识别哪个服务触发了该函数(Alexa 或 IoT)?
我刚刚提交了一个新版本的认证,并希望开始在我的下一个版本上开发新功能.
但不知何故 - 由于我的技能处于认证模式,我无法启动新的开发版本.
在这个漫长的(4-7天)认证模式下,有没有办法开发新版本?
我目前正在尝试使用nghttp2
构建多部分消息.该消息应该如下所示.
我应该使用nghttp2_submit_request
(here)函数,nva
作为我的HTTP/2标头,以及nghttp2_data_provider *data_prd
我的数据.但是,我仍然不明白我究竟能创建两条消息(带有两个消息头).
更新:
我可以在源代码中描述我的想法吗?请看下面.在这里,我nghttp2_data_provider
用来打开一个音频文件,然后写入缓冲区.
ssize_t data_prd_read_callback(
nghttp2_session *session, int32_t stream_id, uint8_t *buf, size_t length,
uint32_t *data_flags, nghttp2_data_source *source, void *user_data)
{
printf("[INFO] C ----------------------------> S (DATA post body), length:%zu\n", length);
int fd = source->fd;
ssize_t r;
// writting my opened audio file into buffer
while ((r = read(fd, buf, length)) == -1 && errno == EINTR);
printf("stream_id:%d, nread:%zu\r\n", stream_id, r);
return nread;
}
void submit_postAudio(http2_session_data *session_data) {
int32_t …
Run Code Online (Sandbox Code Playgroud) 过去,我已经设置了两个用Java编写的独立AWS lambda.一个用于Alexa,一个用于Api.ai. 他们只是向每个助手api返回"Hello world".所以虽然它们很简单,但它们都有效 当我开始为每个代码编写越来越多的代码时,我开始看到我的java代码有多么相似,而我只是通过拥有两个单独的lambdas来重复自己.
快进到今天.
什么我现在工作的是有一个单一的 AWS拉姆达可从处理输入都 Alexa和Api.ai但我遇到了一些麻烦.目前,我的想法是,当运行lambda时,会有一个简单的if语句,如下所示:
以下不是真正的代码,只是我认为我可以做的事情
if (figureOutIfInputType.equals("alexa")){
runAlexaCode();
} else if (figureOutIfInputType.equals("api.ai")){
runApiAiCode();
}
Run Code Online (Sandbox Code Playgroud)
事情是现在我需要以某种方式告诉函数是否被alexa或api.ai调用.
这是我现在的实际java:
public class App implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
System.out.println("myLog: " + input.toString());
return "Hello from AWS";
}
Run Code Online (Sandbox Code Playgroud)
然后我从Alexa和Api.ai运行lambda来查看在java中生成的Object输入.
API.ai
{id=asdf-6801-4a9b-a7cd-asdffdsa, timestamp=2017-07-
28T02:21:15.337Z, lang=en, result={source=agent, resolvedQuery=hi how
are you, action=, actionIncomplete=false, parameters={}, contexts=[],
metadata={intentId=asdf-3a2a-49b6-8a45-97e97243b1d7,
webhookUsed=true, webhookForSlotFillingUsed=false,
webhookResponseTime=182, intentName=myIntent}, fulfillment=
{messages=[{type=0, speech=I have failed}]}, score=1}, status=
{code=200, errorType=success}, sessionId=asdf-a7ac-43c8-8ae8-
bc1bf5ecaad0}
Run Code Online (Sandbox Code Playgroud)
Alexa的
{version=1.0, …
Run Code Online (Sandbox Code Playgroud) 我正在创建自定义的Alexa技能,它需要收集用户所说的未知数量的名称。
我试图将名称存储在插槽中。我能够以这种方式获得一个名字,但不能多个。现在,我正在尝试向用户询问人数,然后询问用户名称。但是,我不知道如何使该解决方案起作用。另外,我试图将名称存储在会话属性中。
这是我到目前为止所拥有的
// Api call wrapped into a promise. Returns the person's email.
return findEmployee(sessionAttributes.client, givenName)
.then(attendee => {
let prompt = ''
if (attendee.value.length === 1) {
sessionAttributes.attendees = [...sessionAttributes.attendees, attendee.value[0]]
prompt = `${attendee.value.displayName} added to the meeting.`
return handlerInput.responseBuilder
.speak(prompt)
.reprompt(prompt)
.getResponse()
}
})
.catch(err => console.log(err))
Run Code Online (Sandbox Code Playgroud)
这个代码片段可以与一个人一起正常工作,但是我将如何重构它,以便Alexa会询问直到达到最终条件。
如何为Amazon Alexa APL技能设置背景颜色?这是我的.json文件的样子:https : //raw.githubusercontent.com/alexa-labs/skill-sample-nodejs-sauce-boss/master/lambda/custom/documents/recipeIntent.json
alexa ×10
alexa-skill ×2
alexa-slot ×2
aws-lambda ×2
javascript ×2
amazon-echo ×1
api-ai ×1
aws-iot ×1
http2 ×1
nghttp2 ×1
node.js ×1