在 dialogflow 聊天中用图像 + 按钮回答并实现
Answer with an image + button in dialogflow chat with fulfillment
我正忙于越来越多地了解 dialogflow 以及它必须提供的不同可能性,但我现在卡住了。
我现在有什么?
通过我的 dialogflow 代理,目前可以从荷兰政府那里请求到特定国家/地区的当前旅行建议。因此,当用户询问时:'give me the travel advice to Spain' 对话流将使用政府提供的当前旅行建议进行响应。
正在从 Google Sheet 导入数据。在这个 Google Sheet 我从政府网页上获取实时旅行建议数据。我用来向用户反馈旅行建议的代码是:
`function reisadviesHandler(agent) {
const bestemming = agent.parameters.bestemming;
return getSpreadsheetDataReisadvies().then(res => {
res.data.map(land => {
if(land.bestemming === bestemming)
agent.add(`Momenteel staat het reisadvies voor ${bestemming} op ${land.kleurcode}. Het Ministerie van Buitenlandse Zaken zegt verder: ${land.melding}. Is er nog iets anders waar ik je mee kan helpen?`);
});
});
}`
在电子表格(数据来源)中,我还在 D 列的旅行建议 (example) 的地图(图片)中添加了一个 url,名为 'mapimage'.使用 ${land.mapimage}
我可以将正确的 url 拉到特定国家/地区的正确图像(国家/地区是用户输入的动态值)。
我想做什么
当前答案后:
Momenteel staat het reisadvies voor ${bestemming} op
${land.kleurcode}. Het Ministerie van Buitenlandse Zaken zegt verder:
${land.melding}. Is er nog iets anders waar ik je mee kan helpen?
想问一下用户是否想看现在的旅游咨询图(图片)。如果他们回应/点击 'yes',聊天机器人必须发送目的地的图片(地图)。除此之外,我还想添加一个按钮,以便将用户转发到正确的政府网页以获取有关旅行建议的更多信息。
此时发送地图(图像)是主要问题,我不知道如何在我目前的实现代码中执行此操作。希望任何人都可以帮助/解释这一点,这样我就可以继续愉快地构建这个聊天机器人:) Thx!
根据您的 use-case 描述,follow-up intent could be used, since it is a child of its associated parent intent and is commonly used for replies like ‘yes’, ’no’ or ‘cancel’. Also, you could use one of the predefined follow-up intents 或创建一个自定义的。
此外,由于答案是用户给出的国家值的函数,所选国家的信息必须保存在 active context 中,因此可以在 [=38] 中使用=] 意图。为了将数据持久保存到活动上下文中,可以使用函数 agent.setContext(),方法是将数据作为参数添加到您的实现代码中,如下所示。
function reisadviesHandler(agent) {
const bestemming = agent.parameters.bestemming;
return getSpreadsheetDataReisadvies().then(res => {
res.data.map(land => {
if(land.bestemming === bestemming) {
agent.add(`Momenteel staat het reisadvies voor ${bestemming} op ${land.kleurcode}. Het Ministerie van Buitenlandse Zaken zegt verder: ${land.melding}. Is er nog iets anders waar ik je mee kan helpen?`);
agent.setContext({ name: 'your context name here', lifespan: 1, parameters: { [param-name]: land.mapimage , [param-name]: land.website }}); // You can use your current context name or a new one is created with the name provided.
}
});
});
}
通过使用 Dialogflow simulator 您可以看到在意图交互过程中哪些是上下文和活动参数。
为了在 follow-up 意图中访问以前的持久数据,请使用该信息配置 intent parameters pointing to the context parameters。
最后,您可以使用Dialogflow Card response发送图片或互动按钮,如下例。
function yes(agent) {
const mapimage = agent.parameters.mapimage;
const webpage = agent.parameters.webpage;
agent.add(new Card({
title: `Title: this is a card title`,
imageUrl: mapimage,
text: `This is the body text of a card.`,
buttonText: 'This is a button',
buttonUrl: webpage
})
);
}
请注意,follow-up 意图中的 fulfillment option 必须启用,而且在实现代码中,意图必须映射到函数。
intentMap.set('your intent name here', yourFunctionHandler);
我正忙于越来越多地了解 dialogflow 以及它必须提供的不同可能性,但我现在卡住了。
我现在有什么? 通过我的 dialogflow 代理,目前可以从荷兰政府那里请求到特定国家/地区的当前旅行建议。因此,当用户询问时:'give me the travel advice to Spain' 对话流将使用政府提供的当前旅行建议进行响应。
正在从 Google Sheet 导入数据。在这个 Google Sheet 我从政府网页上获取实时旅行建议数据。我用来向用户反馈旅行建议的代码是:
`function reisadviesHandler(agent) {
const bestemming = agent.parameters.bestemming;
return getSpreadsheetDataReisadvies().then(res => {
res.data.map(land => {
if(land.bestemming === bestemming)
agent.add(`Momenteel staat het reisadvies voor ${bestemming} op ${land.kleurcode}. Het Ministerie van Buitenlandse Zaken zegt verder: ${land.melding}. Is er nog iets anders waar ik je mee kan helpen?`);
});
});
}`
在电子表格(数据来源)中,我还在 D 列的旅行建议 (example) 的地图(图片)中添加了一个 url,名为 'mapimage'.使用 ${land.mapimage}
我可以将正确的 url 拉到特定国家/地区的正确图像(国家/地区是用户输入的动态值)。
我想做什么 当前答案后:
Momenteel staat het reisadvies voor ${bestemming} op ${land.kleurcode}. Het Ministerie van Buitenlandse Zaken zegt verder: ${land.melding}. Is er nog iets anders waar ik je mee kan helpen?
想问一下用户是否想看现在的旅游咨询图(图片)。如果他们回应/点击 'yes',聊天机器人必须发送目的地的图片(地图)。除此之外,我还想添加一个按钮,以便将用户转发到正确的政府网页以获取有关旅行建议的更多信息。
此时发送地图(图像)是主要问题,我不知道如何在我目前的实现代码中执行此操作。希望任何人都可以帮助/解释这一点,这样我就可以继续愉快地构建这个聊天机器人:) Thx!
根据您的 use-case 描述,follow-up intent could be used, since it is a child of its associated parent intent and is commonly used for replies like ‘yes’, ’no’ or ‘cancel’. Also, you could use one of the predefined follow-up intents 或创建一个自定义的。
此外,由于答案是用户给出的国家值的函数,所选国家的信息必须保存在 active context 中,因此可以在 [=38] 中使用=] 意图。为了将数据持久保存到活动上下文中,可以使用函数 agent.setContext(),方法是将数据作为参数添加到您的实现代码中,如下所示。
function reisadviesHandler(agent) {
const bestemming = agent.parameters.bestemming;
return getSpreadsheetDataReisadvies().then(res => {
res.data.map(land => {
if(land.bestemming === bestemming) {
agent.add(`Momenteel staat het reisadvies voor ${bestemming} op ${land.kleurcode}. Het Ministerie van Buitenlandse Zaken zegt verder: ${land.melding}. Is er nog iets anders waar ik je mee kan helpen?`);
agent.setContext({ name: 'your context name here', lifespan: 1, parameters: { [param-name]: land.mapimage , [param-name]: land.website }}); // You can use your current context name or a new one is created with the name provided.
}
});
});
}
通过使用 Dialogflow simulator 您可以看到在意图交互过程中哪些是上下文和活动参数。
为了在 follow-up 意图中访问以前的持久数据,请使用该信息配置 intent parameters pointing to the context parameters。
最后,您可以使用Dialogflow Card response发送图片或互动按钮,如下例。
function yes(agent) {
const mapimage = agent.parameters.mapimage;
const webpage = agent.parameters.webpage;
agent.add(new Card({
title: `Title: this is a card title`,
imageUrl: mapimage,
text: `This is the body text of a card.`,
buttonText: 'This is a button',
buttonUrl: webpage
})
);
}
请注意,follow-up 意图中的 fulfillment option 必须启用,而且在实现代码中,意图必须映射到函数。
intentMap.set('your intent name here', yourFunctionHandler);