无法在 Google 上的操作中以 basic_card 响应
Unable to respond with basic_card on Actions on Google
我正在使用 Api.ai 构建一个应用程序,其中我需要通过基本卡片响应名为 Login 的 Intent。我在没有实现 webhook 的情况下尝试这个。
通过 Api.ai 尝试部分我的查询 returns 这个:
{
"id": "bb09aa94-a2d0-48d5-8c7f-62fc688d17b1",
"timestamp": "2017-07-06T13:19:30.776Z",
"lang": "en",
"result": {
"source": "agent",
"resolvedQuery": "login",
"action": "Login",
"actionIncomplete": false,
"parameters": {},
"contexts": [],
"metadata": {
"intentId": "39842aa0-53c4-4d47-b3b7-61ba0fc6d80c",
"webhookUsed": "false",
"webhookForSlotFillingUsed": "false",
"intentName": "account.login"
},
"fulfillment": {
"speech": "You should visit http://www.curlpad.com for login.",
"messages": [
{
"type": "basic_card",
"platform": "google",
"title": "Login to Curlpad",
"subtitle": "",
"formattedText": "Visit this link to login to your account",
"image": {
"url": "http://www.curlpad.com/favicons/apple-icon.png"
},
"buttons": [
{
"title": "Curlpad",
"openUrlAction": {
"url": "http://www.curlpad.com"
}
}
]
},
{
"type": 1,
"platform": "telegram",
"title": "Curlpad | Login",
"subtitle": "Click on login button to continue",
"imageUrl": "http://www.curlpad.com/favicons/apple-icon.png",
"buttons": [
{
"text": "Login",
"postback": "http://www.curlpad.com/"
}
]
},
{
"type": 0,
"speech": "Open this url http://www.curlpad.com"
}
]
},
"score": 1
},
"status": {
"code": 200,
"errorType": "success"
},
"sessionId": "7ba9cd11-239c-4467-8c3f-2d79d867ba18"
}
电报卡在我的电报机器人上运行良好,但在 Google 上的操作上出错。
这是 Actions Simulator 上的响应:
其他查询在该模拟器上运行良好。
任何人都可以帮助完成这项工作吗?
我还有一个意图搜索使用 webhook fulfillment 工作的用户,在返回 basic_card.
时我也遇到了同样的问题
尝试 api.ai 时的意向响应屏幕截图:
如果您没有使用webhook,您需要按照循环执行以下3个步骤
在下面的屏幕截图中启用基本卡响应。如果您没有看到 ACTION ON GOOGLE 选项卡,请单击 + 号添加它。
如果您使用的是网络钩子,下面是适用于我的示例代码。您也可以按照下面的 google 文档进行操作。
google basic card documentation
'use strict';
const express = require('express')();
const router = require('express').Router();
const bodyParser = require('body-parser');
const ApiAiApp = require('actions-on-google').ApiAiApp;
express.use(bodyParser.json({type: 'application/json'}));
router.post('/card', (req, res) => {
const app = new ApiAiApp({request: req, response: res});
const WELCOME_INTENT = 'input.welcome';
const actionMap = new Map();
actionMap.set(WELCOME_INTENT, welcomeIntent);
app.handleRequest(actionMap);
});
function welcomeIntent(app){
app.ask(app.buildRichResponse()
// Create a basic card and add it to the rich response
.addSimpleResponse('Math and prime numbers it is!')
.addBasicCard(app.buildBasicCard(`42 is an even composite number. It
is composed of three distinct prime numbers multiplied together. It
has a total of eight divisors. 42 is an abundant number, because the
sum of its proper divisors 54 is greater than itself. To count from
1 to 42 would take you about twenty-one…`)
.setTitle('Math & prime numbers')
.addButton('Read more')
.setImage('https://example.google.com/42.png', 'Image alternate text')
)
);
}
express.use('/example', router);
express.listen('8081', function () {
console.log('Example app is running')
})
问题是 'basic_card' 在没有 'basic response' 的情况下不受支持,因此我们需要先设置 'basic response' 或使用默认选项卡中的响应作为第一个响应。
Basic Response is Compulsory for basic_card
我正在使用 Api.ai 构建一个应用程序,其中我需要通过基本卡片响应名为 Login 的 Intent。我在没有实现 webhook 的情况下尝试这个。 通过 Api.ai 尝试部分我的查询 returns 这个:
{
"id": "bb09aa94-a2d0-48d5-8c7f-62fc688d17b1",
"timestamp": "2017-07-06T13:19:30.776Z",
"lang": "en",
"result": {
"source": "agent",
"resolvedQuery": "login",
"action": "Login",
"actionIncomplete": false,
"parameters": {},
"contexts": [],
"metadata": {
"intentId": "39842aa0-53c4-4d47-b3b7-61ba0fc6d80c",
"webhookUsed": "false",
"webhookForSlotFillingUsed": "false",
"intentName": "account.login"
},
"fulfillment": {
"speech": "You should visit http://www.curlpad.com for login.",
"messages": [
{
"type": "basic_card",
"platform": "google",
"title": "Login to Curlpad",
"subtitle": "",
"formattedText": "Visit this link to login to your account",
"image": {
"url": "http://www.curlpad.com/favicons/apple-icon.png"
},
"buttons": [
{
"title": "Curlpad",
"openUrlAction": {
"url": "http://www.curlpad.com"
}
}
]
},
{
"type": 1,
"platform": "telegram",
"title": "Curlpad | Login",
"subtitle": "Click on login button to continue",
"imageUrl": "http://www.curlpad.com/favicons/apple-icon.png",
"buttons": [
{
"text": "Login",
"postback": "http://www.curlpad.com/"
}
]
},
{
"type": 0,
"speech": "Open this url http://www.curlpad.com"
}
]
},
"score": 1
},
"status": {
"code": 200,
"errorType": "success"
},
"sessionId": "7ba9cd11-239c-4467-8c3f-2d79d867ba18"
}
电报卡在我的电报机器人上运行良好,但在 Google 上的操作上出错。
这是 Actions Simulator 上的响应:
其他查询在该模拟器上运行良好。 任何人都可以帮助完成这项工作吗? 我还有一个意图搜索使用 webhook fulfillment 工作的用户,在返回 basic_card.
时我也遇到了同样的问题尝试 api.ai 时的意向响应屏幕截图:
如果您没有使用webhook,您需要按照循环执行以下3个步骤 在下面的屏幕截图中启用基本卡响应。如果您没有看到 ACTION ON GOOGLE 选项卡,请单击 + 号添加它。
如果您使用的是网络钩子,下面是适用于我的示例代码。您也可以按照下面的 google 文档进行操作。 google basic card documentation
'use strict';
const express = require('express')();
const router = require('express').Router();
const bodyParser = require('body-parser');
const ApiAiApp = require('actions-on-google').ApiAiApp;
express.use(bodyParser.json({type: 'application/json'}));
router.post('/card', (req, res) => {
const app = new ApiAiApp({request: req, response: res});
const WELCOME_INTENT = 'input.welcome';
const actionMap = new Map();
actionMap.set(WELCOME_INTENT, welcomeIntent);
app.handleRequest(actionMap);
});
function welcomeIntent(app){
app.ask(app.buildRichResponse()
// Create a basic card and add it to the rich response
.addSimpleResponse('Math and prime numbers it is!')
.addBasicCard(app.buildBasicCard(`42 is an even composite number. It
is composed of three distinct prime numbers multiplied together. It
has a total of eight divisors. 42 is an abundant number, because the
sum of its proper divisors 54 is greater than itself. To count from
1 to 42 would take you about twenty-one…`)
.setTitle('Math & prime numbers')
.addButton('Read more')
.setImage('https://example.google.com/42.png', 'Image alternate text')
)
);
}
express.use('/example', router);
express.listen('8081', function () {
console.log('Example app is running')
})
问题是 'basic_card' 在没有 'basic response' 的情况下不受支持,因此我们需要先设置 'basic response' 或使用默认选项卡中的响应作为第一个响应。
Basic Response is Compulsory for basic_card