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

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

กำหนดการสนทนาของคุณ

เมื่อคุณกำหนดการทำงานแล้ว คุณสามารถ การสนทนาที่เกี่ยวข้องสำหรับการดำเนินการเหล่านั้น คุณดำเนินการนี้โดย การสร้าง Intent ของ Dialogflow ที่กำหนดไวยากรณ์หรือสิ่งที่ผู้ใช้ต้องการ ที่จะพูดเพื่อเรียก Intent และดำเนินการ Fulfillment ที่เกี่ยวข้อง ความตั้งใจในการทริกเกอร์

คุณสามารถสร้าง Intent ต่างๆ ได้มากเท่าที่ต้องการเพื่อกำหนดการสนทนาทั้งหมด ไวยากรณ์

สร้าง Intent

คลิกเครื่องหมาย + ข้างรายการเมนู Intent ใน Dialogflow การนำทางด้านซ้าย เครื่องมือแก้ไข Intent จะปรากฏขึ้นเพื่อให้คุณป้อนข้อมูลต่อไปนี้

  • ชื่อ Intent คือชื่อของ Intent ที่แสดงใน IDE
  • บริบทช่วยให้คุณกำหนดขอบเขตการทริกเกอร์ความตั้งใจไปยังกรณีที่เฉพาะเจาะจงได้ อ่านเอกสารประกอบของ Dialogflow เกี่ยวกับบริบท เพื่อดูข้อมูลเพิ่มเติม
  • เหตุการณ์จะเรียกใช้ Intent โดยผู้ใช้ไม่จำเป็นต้องพูดอะไร หนึ่ง เหตุการณ์ตัวอย่างคือ GOOGLE_ASSISTANT_WELCOME ซึ่งทำให้ระบบ Assistant เพื่อเรียกใช้การดำเนินการของคุณ เหตุการณ์นี้ใช้ในการดำเนินการ default Action โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับ Intent ของตัวช่วยในตัวในเอกสารประกอบของเรา
  • วลีการฝึกกำหนดสิ่งที่ผู้ใช้ต้องพูด (ไวยากรณ์) เพื่อทริกเกอร์ ความตั้งใจ พิมพ์วลี 2-3 วลีที่นี่ (5-10) สิ่งที่ผู้ใช้พูดเพื่อเรียกให้แสดง ความตั้งใจ Dialogflow จะจัดการรูปแบบธรรมชาติของตัวอย่างให้โดยอัตโนมัติ วลีที่คุณระบุ
  • การดำเนินการและพารามิเตอร์จะกำหนดข้อมูลที่จะส่งไปยัง Fulfillment หาก Fulfillment เปิดใช้งานสำหรับ Intent นี้ ซึ่งรวมถึงข้อมูลที่แยกวิเคราะห์จาก ข้อมูลผู้ใช้และชื่อที่คุณสามารถใช้ใน Fulfillment เพื่อตรวจหา เรียกใช้ Intent แล้ว คุณจะใช้ชื่อนี้ในภายหลังเพื่อจับคู่ความตั้งใจกับ ตรรกะการดำเนินการตามคำสั่งซื้อที่สอดคล้องกัน ดูการกระทำและพารามิเตอร์ ในเอกสารประกอบของ Dialogflow เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดการดำเนินการ

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

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

การสร้างคำตอบใน Dialogflow

สำหรับบาง Intent คุณอาจไม่จำเป็นต้องให้ Fulfillment แสดงการตอบกลับ ในกรณีเหล่านี้ คุณสามารถใช้เครื่องมือสร้างคำตอบใน Dialogflow เพื่อสร้าง คำตอบ

ในส่วนคำตอบ ให้ป้อนข้อความตอบกลับที่คุณต้องการกลับไปที่ ผู้ใช้ คำตอบข้อความเริ่มต้นคือคำตอบข้อความ TTS แบบง่ายๆ ที่สามารถทำงาน การผสานรวม Dialogflow หลายรายการ มีการอธิบายคำตอบสำหรับ Google Assistant ในหน้าการตอบกลับ

การสร้างการตอบกลับการดำเนินการตามคำสั่งซื้อ

รหัสการดำเนินการตามคำสั่งซื้อโฮสต์อยู่ในตรรกะการดำเนินการตามคำสั่งซื้อเว็บฮุคสำหรับการดำเนินการ ตัวอย่างเช่น ในตัวอย่าง Silly Name Maker ตรรกะนี้พบได้ใน index.js สําหรับ Cloud Function สำหรับ Firebase

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

เราขอแนะนำให้คุณใช้ไลบรารีของไคลเอ็นต์ Node.js ในการดำเนินการตามคำขอ และแสดงการตอบกลับ กระบวนการทั่วไปในการใช้ไลบรารีของไคลเอ็นต์มีดังนี้

  1. เริ่มต้นออบเจ็กต์ Dialogflow ออบเจ็กต์นี้จะจัดการฟังคำขอและแยกวิเคราะห์โดยอัตโนมัติ เพื่อประมวลผลสินค้าเหล่านั้นในการดำเนินการตามคำสั่งซื้อ
  2. สร้างฟังก์ชันเพื่อจัดการคำขอ ฟังก์ชันเหล่านี้จะประมวลผลอินพุตของผู้ใช้และองค์ประกอบอื่นๆ ของ Intent และ สร้างการตอบสนองเพื่อกลับไปยัง Dialogflow

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

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

Node.js
'use strict';

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

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

app.intent('Default Welcome Intent', (conv) => {
  // Do things
});
exports.yourAction = functions.https.onRequest(app);
Java
public class DfFulfillment extends DialogflowApp {
  private static final Logger LOGGER = LoggerFactory.getLogger(DfFulfillment.class);

  @ForIntent("Default Welcome Intent")
  public ActionResponse welcome(ActionRequest request) {
    // Do things
    // ...
  }

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

เมื่อผู้ใช้พูดวลีที่กระตุ้นความตั้งใจ คุณจะได้รับคำขอจาก Dialogflow ที่คุณจัดการด้วยฟังก์ชันในการดําเนินการตามคําสั่งซื้อ ด้วยวิธีนี้ ให้ทำสิ่งต่างๆ ต่อไปนี้

  1. ใช้ตรรกะที่จำเป็นในการประมวลผลอินพุตของผู้ใช้
  2. สร้างการตอบสนองเพื่อตอบสนองต่อ Intent ที่ทริกเกอร์ โดยคำนึงถึง แสดงต่อผู้ใช้ของคุณเพื่อสร้างคำตอบที่เหมาะสม โปรดดู ความสามารถสำหรับ ข้อมูลเพิ่มเติมเกี่ยวกับวิธีรองรับคำตอบในแพลตฟอร์มต่างๆ
  3. เรียกใช้ฟังก์ชัน ask() ด้วยการตอบกลับของคุณ

โค้ดต่อไปนี้แสดงวิธีสร้างการตอบกลับ TTS 2 รายการที่จัดการ ความตั้งใจในการเรียกใช้ (input.welcome) และ Intent ของกล่องโต้ตอบ (input.number) ที่ ต้อนรับผู้ใช้สู่การดำเนินการของคุณ และพูดตัวเลขที่ผู้ใช้เคยพูด Intent ของ Dialogflow โดยใช้ชื่อดังนี้

Node.js
const app = dialogflow();
app.intent('Default Welcome Intent', (conv) => {
conv.ask('Welcome to number echo! Say a number.');
});
app.intent('Input Number', (conv, {num}) => {
// extract the num parameter as a local string variable
conv.close(`You said ${num}`);
});
Java
@ForIntent("Default Welcome Intent")
public ActionResponse defaultWelcome(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  rb.add("Welcome to number echo! Say a number.");
  return rb.build();
}

@ForIntent("Input Number")
public ActionResponse inputNumber(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  Integer number = (Integer) request.getParameter("num");
  rb.add("You said " + number.toString());
  return rb.endConversation().build();
}

หมายเลขที่ป้อนของ Intent ที่กำหนดเองซึ่งมีร่วมกับโค้ดข้างต้นจะใช้โอเปอเรเตอร์ @sys.number เอนทิตีที่จะดึงตัวเลขจากเสียงพูดของผู้ใช้ จากนั้น Intent ส่งพารามิเตอร์ num ซึ่งมีตัวเลขจากผู้ใช้ไปยังฟังก์ชัน ใน Fulfillment

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

Node.js
const WELCOME_INTENT = 'Default Welcome Intent';
const NUMBER_INTENT = 'Input Number';
const NUMBER_PARAMETER = 'num';
// you can add a fallback function instead of a function for individual intents
app.fallback((conv) => {
 // intent contains the name of the intent
 // you defined in the Intents area of Dialogflow
 const intent = conv.intent;
 switch (intent) {
   case WELCOME_INTENT:
     conv.ask('Welcome! Say a number.');
     break;
   case NUMBER_INTENT:
     const num = conv.parameters[NUMBER_PARAMETER];
     conv.close(`You said ${num}`);
     break;
 }
});
Java
// you can add a fallback function instead of a function for individual intents
@ForIntent("Default Fallback Intent")
public ActionResponse fallback(ActionRequest request) {
  final String WELCOME_INTENT = "Default Welcome Intent";
  final String NUMBER_INTENT = "Input Number";
  final String NUMBER_ARGUMENT = "num";
  // intent contains the name of the intent
  // you defined in the Intents area of Dialogflow
  ResponseBuilder rb = getResponseBuilder(request);
  String intent = request.getIntent();
  switch (intent) {
    case WELCOME_INTENT:
      rb.add("Welcome! Say a number.");
      break;
    case NUMBER_INTENT:
      Integer num = (Integer) request.getParameter(NUMBER_ARGUMENT);
      rb.add("You said " + num).endConversation();
      break;
  }
  return rb.build();
}

การแสดงข้อความแจ้งซ้ำที่ไม่ตรงกัน

เมื่อ Dialogflow ไม่สามารถจับคู่ไวยากรณ์การป้อนข้อมูลใดๆ ที่กำหนดไว้ใน Intent ของคุณ วลีการฝึก ทริกเกอร์ Intent สำรอง โดยปกติ Intent สำรอง แจ้งเตือนผู้ใช้อีกครั้งเพื่อป้อนอินพุตที่จำเป็นสำหรับการดำเนินการของคุณ คุณสามารถ สร้างวลีซ้ำโดยระบุวลีในส่วนคำตอบของ Intent สำรองหรือคุณจะใช้เว็บฮุคเพื่อแสดงคำตอบก็ได้

เมื่อคำตอบของผู้ใช้ไม่ตรงกับวลีการฝึกของการดำเนินการของคุณ Google Assistant จะพยายามจัดการอินพุต ลักษณะการทำงานเช่นนี้ช่วยให้ผู้ใช้เปลี่ยน การทำงานในระหว่างการสนทนา เช่น ผู้ใช้ถามว่า "ภาพยนตร์แนวไหน สัปดาห์นี้เข้าฉายสัปดาห์นี้ไหม" แล้วเปลี่ยนบริบทระหว่างการสนทนา: "อะไรคือ สภาพอากาศวันพรุ่งนี้เป็นอย่างไร" ในตัวอย่างนี้ เนื่องจาก "สภาพอากาศในวันพรุ่งนี้จะเป็นอย่างไร" ไม่ใช่คำตอบที่ถูกต้องสำหรับการสนทนาที่ทริกเกอร์จากพรอมต์เริ่มต้น Assistant จะพยายามจับคู่โดยอัตโนมัติและย้ายผู้ใช้ไปไว้ใน การสนทนาที่เหมาะสม

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

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

วิธีสร้าง Intent สำรอง

  1. คลิก Intent ในเมนูการนำทางของ Dialogflow
  2. คลิก ⋮ ข้างสร้างความตั้งใจและเลือก สร้าง Intent สำรอง (หรือมิฉะนั้น ให้คลิก รูปแบบสำรองเริ่มต้น ตั้งใจเพื่อแก้ไข)
  3. ระบุวลีซ้ำเพื่อพูดตอบผู้ใช้ วลีเหล่านี้ควรเป็น พูดคุยอย่างเป็นกันเองและมีประโยชน์มากที่สุดตามบริบทปัจจุบันของผู้ใช้

    หากต้องการดำเนินการโดยไม่มีการดำเนินการตามคำสั่งซื้อ: ให้ระบุวลีในพื้นที่คำตอบ ความตั้งใจของคุณ Dialogflow สุ่มเลือกวลีจากรายการนี้มาพูด กลับไปยังผู้ใช้จนกว่าจะมีการเรียกใช้ Intent ที่เฉพาะเจาะจงมากขึ้น

    หากต้องการดำเนินการด้วย Fulfillment ให้ทำดังนี้

    1. สลับเปิดใช้การเรียกเว็บฮุคสำหรับ Intent นี้ในส่วนการดำเนินการตามคำสั่งซื้อของ Intent
    2. ในตรรกะการดำเนินการตามคำสั่งซื้อ ให้จัดการ Intent สำรองเช่นเดียวกับอื่นๆ Intent ตามที่อธิบายไว้ในสร้างฟังก์ชันเพื่อจัดการคำขอ

    ตัวอย่างเช่น ฟังก์ชันต่อไปนี้ใช้ออบเจ็กต์ conv.data (an เพย์โหลดข้อมูลที่กำหนดเองที่คุณสามารถใช้เพื่อรักษาสถานะ) จาก ไลบรารีของไคลเอ็นต์ Node.js ที่จะจัดเก็บ ตัวนับที่ติดตามจำนวนครั้งที่มีการเรียกใช้ Intent สำรอง หากเป็น ถูกเรียกใช้มากกว่า 1 ครั้ง การดำเนินการจะหยุดลง แม้ว่าจะไม่แสดงใน คุณควรทำให้ Intent อื่นๆ รีเซ็ตตัวนับนี้เป็น 0 เมื่อมีการเรียกใช้ Intent ที่ไม่ใช่วิดีโอสำรอง (โปรดดู ตัวอย่าง Genie เกี่ยวกับตัวเลข เพื่อดูรายละเอียดวิธีดำเนินการ)

    Node.js
    app.intent('Default Fallback Intent', (conv) => {
     conv.data.fallbackCount++;
     // Provide two prompts before ending game
     if (conv.data.fallbackCount === 1) {
       conv.contexts.set(DONE_YES_NO_CONTEXT, 5);
       conv.ask('Are you done playing Number Genie?');
     } else {
       conv.close(`Since I'm still having trouble, so I'll stop here. ` +
         `Let's play again soon.`);
     }
    });
    Java
    @ForIntent("Default Fallback Intent")
    public ActionResponse defaultFallback(ActionRequest request) {
      final String DONE_YES_NO_CONTEXT = "done_yes_no_context";
      ResponseBuilder rb = getResponseBuilder(request);
    
      int fallbackCount =
          request.getConversationData().get("fallbackCount") == null
              ? 0
              : (Integer) request.getConversationData().get("fallbackCount");
      fallbackCount++;
      request.getConversationData().put("fallbackCount", fallbackCount);
    
      if (fallbackCount == 1) {
        rb.add(new ActionContext(DONE_YES_NO_CONTEXT, 5));
        rb.add("Are you done playing Number Genie?");
      } else {
        rb.add("Since I'm still having trouble, so I'll stop here. Let's play again soon")
            .endConversation();
      }
      return rb.build();
    }

การใช้บริบท

ใช้บริบทหากต้องการให้ Dialogflow ทริกเกอร์ Intent สำรองเฉพาะในบางโอกาส เท่านั้น การทำเช่นนี้มีประโยชน์ในกรณีที่คุณต้องการ Intent ทางเลือกที่แตกต่างกันสำหรับ สถานการณ์ที่ไม่ตรงกันต่างๆ

  • หากคุณไม่ได้ตั้งค่าบริบทใน Intent สำรอง จะถือว่าเป็น Intent สำรองส่วนกลางที่ Dialogflow ทริกเกอร์เมื่อไม่มี Intent อื่น ตรงกัน คุณควรกําหนดค่าไว้เพียงรายการเดียวหากเลือกใช้
  • หากคุณตั้งค่าบริบทอินพุตใน Intent สำรอง Dialogflow จะทริกเกอร์ Intent สำรองเมื่อข้อมูลต่อไปนี้เป็นจริง

    • บริบทปัจจุบันของผู้ใช้เป็นชุดของบริบทที่กำหนดไว้ใน Intent
    • ทั้งนี้ไม่มี Intent อื่นที่ตรงกัน

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

  • หากคุณตั้งค่าบริบทเอาต์พุตใน Intent สำรอง คุณจะต้องให้ผู้ใช้อยู่ใน บริบทเดียวกันหลังจากเรียกและประมวลผล Intent สำรอง

โปรดดูข้อมูลเพิ่มเติมที่บริบทของ Dialogflow

การแสดงข้อความแจ้งซ้ำโดยไม่ต้องป้อนข้อมูล

ดูรายละเอียดเกี่ยวกับวิธีดำเนินการที่หน้าการตอบกลับ ที่ต้องจัดการเมื่อผู้ใช้ไม่ได้ป้อนข้อมูลเพิ่มเติมในอุปกรณ์เสียง เช่น Google Home ที่ต้องมีการโต้ตอบอย่างต่อเนื่อง