DialogFlow中的动作和参数示例是什么?

时间:2018-08-06 14:50:54

标签: chatbot dialogflow

我试图了解如何在DialogFlow中使用动作和参数。是否需要在DialogFlow中具有操作名称?我们可以仅使用参数并将“操作”字段留空吗?

2 个答案:

答案 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中有一个简单的示例。