สร้างการดำเนินการตามคำสั่งซื้อ (Dialogflow)

Fulfillment จะกำหนดอินเทอร์เฟซแบบสนทนาสำหรับโปรเจ็กต์ Actions ของคุณเพื่อรับ ข้อมูลจากผู้ใช้และตรรกะเพื่อประมวลผลอินพุตและดำเนินการตามการดำเนินการในที่สุด

ภาพรวม

การดำเนินการตามคำสั่งซื้อจะได้รับคำขอจาก Assistant, ดำเนินการตามคำขอ และ ตอบสนอง คำขอและกระบวนการตอบกลับนี้ช่วยผลักดัน การสนทนาไปข้างหน้าได้จนกว่าคุณจะทำตามคำขอเริ่มต้นของผู้ใช้

ขั้นตอนต่อไปนี้อธิบายวิธีสร้าง Fulfillment โดยใช้การดำเนินการ SDK ที่มี Node.js หรือไลบรารีไคลเอ็นต์ Java/Kotlin ดังนี้

  1. เริ่มต้นออบเจ็กต์ ActionsSdkApp
  2. สร้างฟังก์ชันเพื่อจัดการคำขอในตรรกะการดำเนินการตามคำสั่งซื้อ

กำลังสร้างกล่องโต้ตอบ

เริ่มต้นออบเจ็กต์ ActionsSdkApp

อินสแตนซ์ของโค้ดต่อไปนี้ ActionsSdkApp และตั้งค่า Node.js แบบ Boilerplate สำหรับ Google Cloud Functions หรือไม่

Actions SDK (Node.js)
'use strict';

const {actionssdk} = require('actions-on-google');
const functions = require('firebase-functions');

const app = actionssdk({debug: true});

app.intent('actions.intent.MAIN', (conv) => {
  conv.ask('Hi!');
});

// More intent handling if needed
exports.myFunction = functions.https.onRequest(app);
Actions SDK (Java)
ResponseBuilder responseBuilder = getResponseBuilder(request).add("Hi!");
return responseBuilder.build();
JSON
{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "Hi!"
              }
            }
          ]
        }
      },
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT"
        }
      ]
    }
  ],
  "conversationToken": "{\"data\":{}}",
  "userStorage": "{\"data\":{}}"
}

สร้างฟังก์ชันเพื่อจัดการคำขอ

เมื่อผู้ใช้พูดวลี คุณจะได้รับคำขอจาก Google Assistant ถึง ตอบสนอง Intent ที่มาในคำขอ สร้างฟังก์ชันที่จัดการ Intent ที่ทริกเกอร์

วิธีจัดการคำขอ

  1. ใช้ตรรกะที่จำเป็นในการประมวลผลอินพุตของผู้ใช้

  2. เรียกใช้ฟังก์ชัน conv.ask() ที่ส่งผ่านคำตอบที่คุณต้องการแสดง เป็นอาร์กิวเมนต์

โค้ดต่อไปนี้แสดงวิธีสร้างคำตอบอย่างง่าย

Actions SDK (Node.js)
conv.ask(`Hi! Say something, and I'll repeat it.`);
Actions SDK (Java)
ResponseBuilder responseBuilder =
    getResponseBuilder(request).add("Hi! Say something, and I'll repeat it.");
return responseBuilder.build();
JSON
{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "Hi! Say something, and I'll repeat it."
              }
            }
          ]
        }
      },
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT"
        }
      ]
    }
  ],
  "conversationToken": "{\"data\":{}}",
  "userStorage": "{\"data\":{}}"
}

ความตั้งใจในการจัดการ

เมื่อคุณมีฟังก์ชันทั้งหมดในการจัดการ Intent ที่ทริกเกอร์แล้ว ให้ใช้ app.intent เพื่อ กำหนดตัวแฮนเดิลให้กับ Intent

Actions SDK (Node.js)
app.intent('actions.intent.TEXT', (conv) => {
  // handle text intent.
});
app.intent('actions.intent.MAIN', (conv) => {
  // handle main intent.
});
Actions SDK (Java)
@ForIntent("actions.intent.MAIN")
public ActionResponse main(ActionRequest request) {
  // handle main intent
  // ...
}

@ForIntent("actions.intent.TEXT")
public ActionResponse text(ActionRequest request) {
  // handle text intent
  // ...
}

กำลังจบการสนทนา

เมื่อคุณไม่ต้องการให้ผู้ใช้ตอบกลับอีกต่อไปและต้องการสิ้นสุดการสนทนา เรียกฟังก์ชัน conv.close() ฟังก์ชันนี้จะบอกให้ Google Assistant พูดตอบข้อความให้ผู้ใช้ และจบการสนทนาด้วยการปิดไมโครโฟน

การจัดการความตั้งใจในการเรียกใช้หลัก

เมื่อผู้ใช้เรียก Intent app.intent.action.MAIN โดยปกติคุณจะไม่ ต้องดำเนินการประมวลผลข้อมูลอินพุตจากผู้ใช้ หากแพ็กเกจการดำเนินการของคุณมี ดำเนินการต่างๆ และครอบคลุมกรณีการใช้งานมากมาย คุณควรแนะนำผู้ใช้โดยบอก ให้พวกเขาทำสิ่งเหล่านี้ได้

  1. เรียกใช้ฟังก์ชัน conv.ask() ที่ส่งการตอบกลับของคุณเป็นอาร์กิวเมนต์ Google Assistant จะพูดสิ่งที่คุณตอบกับผู้ใช้ จากนั้น รอให้ผู้ใช้เรียกใช้ Intent หนึ่งที่คุณระบุ

ข้อมูลโค้ดต่อไปนี้แสดงวิธีจัดการกับจุดประสงค์ในการต้อนรับแบบง่ายๆ

Actions SDK (Node.js)
// handle the initialTrigger
function handleMainIntent(conv, input) {
  conv.ask(input);
}
Actions SDK (Java)
private ActionResponse handleMainIntent(ResponseBuilder rb, String input) {
  return rb.add(input).build();
}

สถานะการสนทนา

ถ้าคุณใช้ API ของเว็บฮุค HTTP/JSON สำหรับการสนทนา คุณสามารถคง สถานะการสนทนาของคุณด้วยออบเจ็กต์รูปแบบ JSON (conversationToken) เมื่อมีการส่งไปมาระหว่างคุณและ Google Assistant หากคุณ โดยใช้ไลบรารีของไคลเอ็นต์ Node.js สามารถเขียนและอ่านจากฟิลด์ conv.data ได้โดยตรง ฟิลด์นี้ จะส่งผ่านไปมาโดยอัตโนมัติระหว่างคำขอและการตอบกลับ

Actions SDK (Node.js)
conv.data = {something: 10};
let value = conv.data.something;
Actions SDK (Java)
ResponseBuilder rb = getResponseBuilder(request);
rb.getConversationData().put("something", 10);
Object value = rb.getConversationData().get("something");