Day28-介接 API(番外篇 III)Dialogflow ES 之 Fulfillment 与 Events

大家好~
今天会用实作的方式去认识 Dialogflow ES 的 Fulfillment 与 Events,
Fulfillment 会用 Webhook 去使用我们写好的 API 服务,
Events 的部分会用 Fulfillment 去调用 Events 的方式进行。

Fulfillment


Fulfillment 流程

  1. Dialogflow 会对使用者输入的句子与 Intent 配对。
  2. Intent 配对成功後,Dialogflow 会对我们设置好的 Inline Editor 或 Webhook 发送 Request。
  3. Intent 会参考 Response 後再回覆使用者。

不过 Inline Editor 目前仅支援 Node.js,
有兴趣可以参考这篇官方文件
接下来就是用 Fulfillment 的 Webhook 来进行实作罗~

Webhook service

点击 Fulfillment 设定 Webhook 的 URL 与一些验证身份相关的资料。

然後到要启用 Webhook 的 Intent,
Enable webhook call for this intent 启用。

Webhook response

Webhook 可用的 Response 具有以下种类:

  • Text response
  • Card response
  • Google Assistant response
  • Context
  • Event
  • Session entity

官方有在文件内提供各个 Webhook response 的范例喔~
先复制一个 Text response 测试看看。

public function test(Request $request)
{
    // 顺便把 Request body log 出来看一下
    Log::info($request->all());
    
    $jsonResponse = [
        "fulfillmentMessages" => [
            [
                "text" => [
                    "text" => [
                        "Text response from webhook"
                    ]
                ]
            ]
        ]
    ];
    return $jsonResponse;
}

成功~
DEFAULT RESPONSE 的 Response 是我们刚刚复制的 Text response
至於刚刚 Log 出来的 Request body 如下:

{
  "responseId": "daaa8ea0-c010-4320-8c2c-838a0fa80e0c-87175b38",
  "queryResult": {
    "queryText": "我要测试 Fulfillment",
    "parameters": [],
    "allRequiredParamsPresent": true,
    "fulfillmentMessages": {
      "0": {
        "text": {
          "text": {}
        }
      }
    },
    "outputContexts": {
      "0": {
        "name": "projects/ironman2021-328402/locations/asia-northeast1/agent/sessions/e4de3606-4f99-1204-f7d2-3abfd0c11bd5/contexts/__system_counters__",
        "parameters": {
          "no-input": 0,
          "no-match": 0
        }
      }
    },
    "intent": {
      "name": "projects/ironman2021-328402/locations/asia-northeast1/agent/intents/5f0a7fd1-5349-4044-be2e-5dd1ef8d0bb3",
      "displayName": "Fulfillment - Test"
    },
    "intentDetectionConfidence": 0,
    "languageCode": "zh-tw",
    "sentimentAnalysisResult": {
      "queryTextSentiment": {
        "score": 0,
        "magnitude": 0
      }
    }
  },
  "originalDetectIntentRequest": {
    "source": "DIALOGFLOW_CONSOLE",
    "payload": []
  },
  "session": "projects/ironman2021-328402/locations/asia-northeast1/agent/sessions/e4de3606-4f99-1204-f7d2-3abfd0c11bd5"
}

之後篇章再去使用 Request body 的内容做应用,
这里先认识一下 Fulfillment 如何使用。

Events

Events 有两种:

  • Platform events
    • Integrations 所提供的 Events。
  • Custom events
    • 可以使用 Fulfillment 或 API 调用 Events。

Custom events

Event 流程

  1. Dialogflow 将使用者输入的句子与 Intent A 配对。
  2. Intent A 配对成功後会发送 Webhook request。
  3. Webhook 的 Response 内用 Event 去调用 Intent B 做回应。

实作环节~
建立一个新的 Intent,
等等我们用 Event response 去调用这个 Intent 做回覆。

在 Intent 的 Events 内新增一个 Custom events,
直接键入你所想要的 Event 名称就好。

设定一个 Text Response,
等等会看到这个 Response~

复制 Event Response 来修改。

public function test()
{
    Log::info($request->all());
    $jsonResponse = [
        "followupEventInput" => [
            "name" => "Custom-event-test",
            "parameters" => [
                "parameter1" => "这是第一个 Parameter",
                "parameter2" => "这是第二个 Parameter"
            ],
            "languageCode" => "zh-TW"
        ]
    ];
    return $jsonResponse;
}

name 的 Value 是我们要调用的 Event 名称,
parameters 的 Value 则写入刚刚在 Intent 的 Response 内调用的 $parameter1$parameter2

测试一下~

成功~

今天先这样啦!
若文章有任何问题,
还请大家不吝赐教!
大家明天见!

参考资料:


<<:  Day29 DOM 介绍

>>:  Day28 Gin with SMTP Server

前言-零基础接触 IT 领域的思路准备

学习一个新领域时,因为还不了解全貌,通常会不知道该怎麽『正确』下关键字的搜寻方向,因此迷失在庞大的...

Day 30:案例探讨2 - Use Cases (Uber/Github/Facebook)

Elasticsearch在Uber的Marketplace Dynamics核心数据系统中扮演着关...

Advanced Customization

SuiteFlow SuiteFlow 可以用来客制化不同的工作流程(workflow). Work...

[C#] 使用记忆体快取 MemoryCache 增加回应速度

在应用程序中有许多向资料库读取资料的动作,为了增加程序效能, 有 2 个方向可以调整。 第 1 种是...

刷题後的归纳与淬链 - 常见的解题技巧「模板」

为什麽要刷题? 在经历过了二十天左右的刷题练习经验,我们从不同的题目中尝试了各种有趣的程序题目。 ...