我试图了解如何在DialogFlow中使用动作和参数。是否需要在DialogFlow中具有操作名称?我们可以仅使用参数并将“操作”字段留空吗?
答案 0 :(得分:1)
是的,您可以将action字段保留为空,但这会导致应用程序设计不正确。
让我举一个例子,说明如何使用它将Dialogflow Intent映射到我的类和方法。
假设您有以下意图:
Get.Transactions
:此目的是要从支持的应用中获取所有交易。假设它的动作名称为all.transactions
。Get.Transactions.Followup.Breakdown
:此意图是第一个意图的跟进意图,应根据特定条件细分所有交易。假设它的动作名称为breakdown.transactions
。现在,这两个意图相关,并且在相似的数据集上工作以产生不同的结果。
首先,我的应用程序从数据库中获取所有事务,并将其呈现给用户。第二个意图是,根据用户提供的某些标准,将相同的交易列表细分为不同的集合。最好将两个功能都包含在同一个类中。
因此,我将两个意图都映射到相同的类,但是基于actions参数值调用不同的方法。这样,我的代码将类似于:
public class Transaction {
public WebhookResponse performAction(WebhookRequest webhookRequest) {
String actionName = webhookRequest.getAction();
switch (actionName) {
case "all.transactions":
List<Transaction> transactions = fetchAllTransactions(webhook.getParams("userId"));
// make response
break;
case "breakdown.transactions":
List<Transaction> transactions = breakdownTransaction(webhook.getParams("userId"), webhook.getParams("breakdownCriteria")));
// make response
break;
default:
// default response
break;
}
return response;
}
private List<Transaction> fetchAllTransactions(int userId) {
// connect to the database
// fetch all transactions
// return the result in a form of list
}
private List<Transaction> breakdownTransaction(int userId, String breakdownCriteria) {
List<Transaction> transactions = fetchAllTransactions(userId);
// loop transactions
// breakdown transactions based on some criteria
// return list of transactions
}
}
这是在后端将两个不同的Intent映射到同一个类的方法。
我已经将类似的设计架构推入了git。您可以在以下链接中引用代码:https://github.com/vslala/ChatbotDemo/tree/external_intent_mapping (如果您有任何疑问,请告诉我)
注意:该示例已使用JAVA语言给出。
答案 1 :(得分:0)
是的,您可以根据需要将其保留为空。它仅用于识别您在每个意图中正在执行的操作。
documentation中有一个简单的示例。