Javascript 谷歌助手的事实应用程序

Javascript 谷歌助手的事实应用程序,javascript,firebase,dialogflow-es,actions-on-google,google-home,Javascript,Firebase,Dialogflow Es,Actions On Google,Google Home,我在谷歌主页上乱搞,创建了一个可以读取树懒信息的应用程序。我已经使用API.AI创建了代理,我在Firebase上托管我的函数,并通过webhook将其连接到API.AI。你让谷歌告诉你一个关于树懒的事实,它会回答你是想听到一个“有趣的事实”还是一个“科学事实”。你的回答决定了谷歌会为你读出什么样的事实 在API.AI上进行测试时,我得到了默认的失败响应,不过当我看一看JSON时,它显然是在解析事实类别。我的javascript代码基于他们的教程使用的谷歌示例“关于谷歌的事实”应用程序。下面是来

我在谷歌主页上乱搞,创建了一个可以读取树懒信息的应用程序。我已经使用API.AI创建了代理,我在Firebase上托管我的函数,并通过webhook将其连接到API.AI。你让谷歌告诉你一个关于树懒的事实,它会回答你是想听到一个“有趣的事实”还是一个“科学事实”。你的回答决定了谷歌会为你读出什么样的事实

在API.AI上进行测试时,我得到了默认的失败响应,不过当我看一看JSON时,它显然是在解析事实类别。我的javascript代码基于他们的教程使用的谷歌示例“关于谷歌的事实”应用程序。下面是来自API.AI测试的JSON以及我的
tellFact()
函数

如果JSON清楚地显示它正在解析一个正确的类别,为什么我会到达我的failure子句

JSON
{
“id”:“2b920a5b-0d17-4c5a-9ac1-18071f078464”,
“时间戳”:“2017-07-13T20:43:33.307Z”,
“郎”:“恩”,
“结果”:{
“来源”:“代理人”,
“resolvedQuery”:“告诉我一些关于树懒的科学知识”,
“行动”:“说出事实”,
“ActionComplete”:错误,
“参数”:{
“事实类别”:“科学”
},
“上下文”:[
{
“名称”:“谷歌上的行动”,
“参数”:{
“事实类别.原创”:“科学”,
“事实类别”:“科学”
},
“寿命”:100
}
],
“元数据”:{
“intentId”:“ca4fa7f1-aceb-4867-b7c3-cf16d1ce4d79”,
“webhookUsed”:“true”,
“webhookForSlotFillingUsed”:“false”,
“webhookResponseTime”:195,
“意向名称”:“告知事实”
},
“履行”:{
“演讲”:“对不起,我不明白。我可以告诉你关于树懒的有趣事实或科学事实。你想听哪一个?”,
“信息”:[
{
“类型”:0,
“演讲”:“对不起,我不明白。我可以告诉你关于树懒的有趣事实或科学事实。你想听哪一个?”
}
],
…

index.js
const-App=require('actions-on-google')。APIAApp;
const functions=require('firebase-functions');
const TELL_FACT='TELL.FACT';
//API.AI参数名称
常量CATEGORY_参数='CATEGORY';
常量事实类型={
乐趣:“乐趣”,
科学:“科学”
};
const FUN_FACTS=新集合([…]);
const SCIENCE_FACTS=新集合([…]);
...
exports.factsAboutSloths=functions.https.onRequest((请求,响应)=>{
const-app=新应用程序({request,response});
log('Request headers:'+JSON.stringify(Request.headers));
log('Request body:'+JSON.stringify(Request.body));
//向用户致意并引导他们进入下一轮
功能未处理的深度链接(应用程序){
if(应用程序HasurfaceCapability(应用程序SurfaceCapabilities.SCREEN_输出)){
app.ask(app.buildrichsresponse()
.addSimpleResponse(`欢迎了解树懒的事实!我真的不想谈论${app.getRawInput()}。`+
`你不想谈谈树懒吗?我可以告诉你一个关于树懒的有趣的事实或科学事实+
`你想听什么?`。添加建议(['Fun','Science');
}否则{
ask(`欢迎了解树懒的事实!我真的不想谈论${app.getRawInput()})。`+
`你不想谈谈树懒吗?我可以告诉你一个关于树懒的有趣的事实或科学事实+
`你想听哪一个?`,没有输入);
}
}
//说出事实
函数tellFact(应用程序){
让funFacts=app.data.funFacts?新集合(app.data.funFacts):有趣的事实;
让scienceFacts=app.data.scienceFacts?新集合(app.data.scienceFacts):科学事实;
if(funFacts.size==0&&scienceFacts.size==0){
app.tell('事实上你好像都听到了。谢谢你的收听!');
返回;
}
让factCategory=app.getArgument(CATEGORY\u参数);
if(factCategory==FACT\u TYPE.FUN){
让事实=getRandomFact(funFacts);
如果(事实===null){
if(应用程序HasurfaceCapability(应用程序SurfaceCapabilities.SCREEN_输出)){
让建议=[‘科学’];
app.ask(app.buildrichsresponse()
.addSimpleResponse(noFactsLeft(应用程序、事实类别、事实类型、科学))
.添加建议(建议));
}否则{
应用程序询问(noFactsLeft(应用程序、事实类别、事实类型、科学),无输入);
}
返回;
}
让factPrefix='当然,这是一个有趣的事实';
app.data.funFacts=Array.from(funFacts);
if(应用程序HasurfaceCapability(应用程序SurfaceCapabilities.SCREEN_输出)){
让图像=getRandomImage(树懒图像);
app.ask(app.buildrichsresponse()
.addSimpleResponse(factPrefix)
.addBasicCard(应用程序buildBasicCard(事实)
.addButton(链接出文本,维基链接)
.setImage(图像[0],图像[1]))
.addSimpleResponse(下一个事实指令)
.添加建议(确认建议);
}否则{
应用程序询问(事实前缀+事实+下一个事实指令,无输入);
}
返回;
}else if(factCategory==事实类型科学){
让事实=获取随机事实(科学事实);
如果(事实===null){
if(应用程序HasurfaceCapability(应用程序SurfaceCapabilities.SCREEN_输出)){
让建议=[‘有趣’];
app.ask(app.buildrichsresponse()
.addSimpleResponse(noFactsLeft(应用程序、factCategory、事实类型.FUN))
.添加建议(建议));
}否则{
app.ask(noFactsLeft(app,factCategory,facttype.FUN),无输入);
}
返回;
}
让factPrefix='好吧,这是一个科学事实';
app.data.scienceFacts=Array.from(scienceFacts);
if(应用程序HasurfaceCapability(应用程序SurfaceCapabilities.SCREEN_输出)){
让图像=getRandomImage(树懒图像);
app.ask(app.buildrichsresponse()
.addSimpleResponse(factPrefix)
.addBasicCard(附录B)
 let factCategory = app.getArgument(CATEGORY_ARGUMENT);
 const CATEGORY_ARGUMENT = 'category';