Dialogflow es 使用DialogFlow时如何创建购物车并计算总金额?
最近,我开始用DialogFlow创建比萨饼订购聊天机器人,但不知道如何用它创建购物车,也不知道如何计算订单总额加上用户必须支付的总金额。 这里有一些我一直在做但不起作用的东西,“basket”参数似乎是空的 这里有一些东西可以为您提供有关我的DialogFlow中发生的事情的更多信息。所以我有一个意向名称“item.confirm.yes”。该脚本是当客户要求比萨饼时,他们必须在意向中填写3个值:大小、类型和数量 “item.start”-此意图将包含两个上下文,分别是“item”和“item confirm”,以表示“item.confirm.yes”。此时,如果客户确认订单,“item.confirm.yes”意图将显示上下文“basket” 这里有一些关于“意向”项的日志记录。确认。是的 索引jsonDialogflow es 使用DialogFlow时如何创建购物车并计算总金额?,dialogflow-es,Dialogflow Es,最近,我开始用DialogFlow创建比萨饼订购聊天机器人,但不知道如何用它创建购物车,也不知道如何计算订单总额加上用户必须支付的总金额。 这里有一些我一直在做但不起作用的东西,“basket”参数似乎是空的 这里有一些东西可以为您提供有关我的DialogFlow中发生的事情的更多信息。所以我有一个意向名称“item.confirm.yes”。该脚本是当客户要求比萨饼时,他们必须在意向中填写3个值:大小、类型和数量 “item.start”-此意图将包含两个上下文,分别是“item”和“item
'use strict';
const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });
console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
console.log('Dialogflow Request body: ' + JSON.stringify(request.body));
let intentMap = new Map();
function showBasket(agent) {
if (agent.context.get('basket') != null) {
const basket = agent.context.get('basket'),
basketItems = basket.parameters.items,
itemKeys = Object.keys(basketItems);
var basketOutput = `So far you've got: `;
for (let i = 0; i < itemKeys.length; i++) {
let item = basketItems[itemKeys[i]];
if ((i < 0) && (i === itemKeys.length - 1)) {
basketOutput += ` and `;
}
else if (i > 0) {
basketOutput += `, `;
}
basketOutput += `${item.amount} ${item.type} in ${item.size}`;
}
agent.add(basketOutput);
}
else {
agent.add(`There's nothing in your basket`);
}
}
function confirmItem(agent) {
const item = agent.context.get('item'),
amount = item.parameters.amount,
size = item.parameters.size,
type = item.parameters.type;
var basketContext = {'name': 'basket', 'lifespan':50, 'parameters': {}},
items = {};
if (agent.context.get('basket')) {
items = agent.context.get('basket').parameters.item;
}
item[request.body.responseId] = {
"type": type,
"size": size,
"amount": amount
};
basketContext.parameters.items = items;
console.log(JSON.stringfy(basketContext));
agent.context.set(basketContext);
agent.add(`Confirming ${amount} ${type} pizza in ${size}. Anything else ?`);
}
intentMap.set('order.showbasket', showBasket);
intentMap.set('item.confirm.yes', confirmItem);
agent.handleRequest(intentMap);
});
当我想把篮子拉出来的时候
诊断信息
{
"responseId": "bcad0d74-58ae-4f7a-9e00-532ae296b7e6-dd2bbea9",
"queryResult": {
"queryText": "basket",
"parameters": {},
"allRequiredParamsPresent": true,
"fulfillmentMessages": [
{
"text": {
"text": [
""
]
}
}
],
"outputContexts": [
{
"name": "projects/pizzadelivery-gyahra/agent/sessions/7180f8e2-a871-a1d5-694b-44f8395c6c30/contexts/basket",
"lifespanCount": 1
}
],
"intent": {
"name": "projects/pizzadelivery-gyahra/agent/intents/fef12ceb-ba15-4b84-9a5f-406aa648c5c8",
"displayName": "order.showbasket"
},
"intentDetectionConfidence": 1,
"diagnosticInfo": {
"webhook_latency_ms": 4988
},
"languageCode": "en"
},
"webhookStatus": {
"code": 4,
"message": "Webhook call failed. Error: DEADLINE_EXCEEDED."
},
"alternativeQueryResults": [
{
"queryText": "basket",
"languageCode": "en"
}
]
}
我点了一个大的意大利香肠披萨,确认了吗
{
"responseId": "04942abf-da3c-4074-9b5b-2fcaf97c053a-9aa0e9ed",
"queryResult": {
"queryText": "yes",
"parameters": {},
"allRequiredParamsPresent": true,
"fulfillmentText": "Great, anything else ?",
"fulfillmentMessages": [
{
"text": {
"text": [
"Great, anything else ?"
]
},
"platform": "FACEBOOK"
},
{
"text": {
"text": [
"Great, anything else ?"
]
}
}
],
"outputContexts": [
{
"name": "projects/pizzadelivery-gyahra/agent/sessions/498ae696-5e2e-589e-7402-4fd1b803579f/contexts/basket",
"lifespanCount": 1,
"parameters": {
"amount": 1,
"type": "Pepperoni",
"size": "large",
"type.original": "pepperoni",
"amount.original": "one",
"size.original": "large"
}
},
{
"name": "projects/pizzadelivery-gyahra/agent/sessions/498ae696-5e2e-589e-7402-4fd1b803579f/contexts/item",
"lifespanCount": 4,
"parameters": {
"amount": 1,
"type": "Pepperoni",
"size": "large",
"type.original": "pepperoni",
"amount.original": "one",
"size.original": "large"
}
},
{
"name": "projects/pizzadelivery-gyahra/agent/sessions/498ae696-5e2e-589e-7402-4fd1b803579f/contexts/item-confirm",
"lifespanCount": 4,
"parameters": {
"size.original": "large",
"amount": 1,
"type": "Pepperoni",
"size": "large",
"type.original": "pepperoni",
"amount.original": "one"
}
}
],
"intent": {
"name": "projects/pizzadelivery-gyahra/agent/intents/0723f0a9-9f7e-4c04-a57d-0218c2c3ecf9",
"displayName": "item.confirm.yes"
},
"intentDetectionConfidence": 1,
"diagnosticInfo": {
"webhook_latency_ms": 4992
},
"languageCode": "en"
},
"webhookStatus": {
"code": 4,
"message": "Webhook call failed. Error: DEADLINE_EXCEEDED."
},
"alternativeQueryResults": [
{
"queryText": "yes",
"outputContexts": [
{
"name": "projects/pizzadelivery-gyahra/agent/sessions/498ae696-5e2e-589e-7402-4fd1b803579f/contexts/basket",
"lifespanCount": 4,
"parameters": {
"size.original": "large",
"amount": 1,
"type": "Pepperoni",
"size": "large",
"type.original": "pepperoni",
"amount.original": "one"
}
},
{
"name": "projects/pizzadelivery-gyahra/agent/sessions/498ae696-5e2e-589e-7402-4fd1b803579f/contexts/item",
"lifespanCount": 4,
"parameters": {
"amount": 1,
"type": "Pepperoni",
"size": "large",
"type.original": "pepperoni",
"amount.original": "one",
"size.original": "large"
}
},
{
"name": "projects/pizzadelivery-gyahra/agent/sessions/498ae696-5e2e-589e-7402-4fd1b803579f/contexts/item-confirm",
"lifespanCount": 4,
"parameters": {
"size": "large",
"type.original": "pepperoni",
"amount.original": "one",
"size.original": "large",
"amount": 1,
"type": "Pepperoni"
}
}
],
"languageCode": "en"
}
]
}
虽然如果我们能看到生成的所有日志记录会很有帮助,但有几件事情可以指出正在发生的事情的方向 需要特别注意的是,
outputContext
设置为
"outputContexts": [
{
"name": "projects/pizzadelivery-gyahra/agent/sessions/7180f8e2-a871-a1d5-694b-44f8395c6c30/contexts/basket",
"lifespanCount": 1
}
],
这表明,至少当我们看到这个调试时,basket
上下文的寿命为1,并且没有参数。这显然与您在confirItem(agent)
中尝试执行的操作不同,因此查看与触发该意图相关联的日志可能很有用
但是,它确实解释了调用showBasket(代理)
处理程序时发生的情况。因为没有任何参数,所以您的行
basketItems = basket.parameters.items,
正在导致错误,因为篮子。参数未定义。由于它会导致错误,并且您没有任何catch
部分,因此整个函数会在不发送响应的情况下出错。由于没有发送响应,Dialogflow最终会超时等待,如错误所示
"message": "Webhook call failed. Error: DEADLINE_EXCEEDED."
感谢您花时间帮助我了解代码中发生了什么。这里有一些东西可以为您提供有关我的DialogFlow中发生的事情的更多信息。所以我有一个意向名称“item.confirm.yes”。脚本是当客户要求比萨饼时,他们必须在意向“item.start”中填写3个值:大小、类型和数量-此意向将包含两个上下文,即“item”和“item confirm”到意向“item.confirm.yes”。此时,如果客户确认他们的订单,“item.confirm.yes”意图将显示上下文“basket”。下面是一些关于intent“item.confirm.yes”的日志:“name”:“projects/pizzaderygyahra/agent/sessions/498ae696-5e2e-589e-7402-4fd1b803579f/contexts/basket”,“lifespanCount”:5,“parameters”:{“原版尺寸”:“大”、“数量”:2,“类型”:“辣香肠”,“大小”:“大”、“类型.原版”:“辣香肠”,“数量.原版”:“2”}`如果你有额外的信息,你应该更新你原来的问题,然后评论你已经这样做了。在评论中加入详细的信息和代码是很难阅读的,一般来说没有什么用处。嘿,我更新了我的问题,请检查并给我你的意见,非常赞赏。你说它不起作用是什么意思k?您特别有哪些错误/困难?
"message": "Webhook call failed. Error: DEADLINE_EXCEEDED."