Intent ในตัว (Dialogflow)

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

  • Intent ในตัวของ"เล่นเกม": "Ok Google เล่นเกมทดสอบความจำ"
  • ความตั้งใจในตัวของ"รับคำทำนาย": "Ok Google ดูดวงของฉัน"

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

หากต้องการดูรายการ Intent ในตัวทั้งหมดที่ Assistant รองรับ รวมถึงพารามิเตอร์และตัวอย่างการค้นหาของผู้ใช้ โปรดดูข้อมูลอ้างอิง Intent ในตัว

ผสานรวม Intent ในตัว

มีหลายวิธีในการผสานรวม Intent ในตัว ทั้งนี้ขึ้นอยู่กับวิธีสร้างการดำเนินการของคุณ

Dialogflow

หากใช้ Dialogflow เพื่อสร้างการดำเนินการ คุณจะแนบ Intent ในตัวแบบกราฟิกได้จากคอนโซลของ Dialogflow

หากต้องการเชื่อมต่อ Intent ในตัวกับ Dialogflow ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิดคอนโซล Dialogflow เลือกตัวแทน จากนั้นไปที่หน้าจอ Intent
  2. สร้างหรือเลือก Intent ที่ Agent ทริกเกอร์เมื่อได้รับ Intent ในตัวที่เจาะจง เปิดส่วนเหตุการณ์ แล้วคลิกเพิ่มเหตุการณ์

    รูปที่ 1 การเพิ่มเหตุการณ์ Dialogflow ในคอนโซล Dialogflow
  3. ในช่องเหตุการณ์ ให้พิมพ์ชื่อเหตุการณ์ Intent ในตัวของ Agent (เช่น actions_intent_PLAY_GAME)

    รูปที่ 2 การแนบ Intent ในตัวกับ Agent ในคอนโซล Dialogflow
  4. คลิกบันทึก

Actions SDK

หากคุณใช้ Actions SDK เพื่อสร้างการดำเนินการ คุณต้องระบุการแมประหว่าง Intent ในตัวและ Actions ในแพ็กเกจ Action

หากต้องการเชื่อมต่อ Intent ในตัวกับ Actions SDK ให้ทำตามขั้นตอนต่อไปนี้

  1. ระบุ Intent ในตัวในช่องชื่อในคำจำกัดความ Action
  2. อัปโหลดแพ็กเกจการดำเนินการไปยังโปรเจ็กต์ Actions โดยใช้เครื่องมือ gactions ตามที่อธิบายไว้ในภาพรวมของ Actions SDK

เช่น ข้อมูลโค้ดต่อไปนี้แสดงวิธีเพิ่ม Intent ในตัวของ CHECK_AIR_QUALITY

{
   "actions":[
      {
         "description":"Default Welcome Intent",
         "name":"MAIN",
         "fulfillment":{
            "conversationName":"conversation_1"
         },
         "intent":{
            "name":"actions.intent.MAIN"
         }
      },
      {
         "description":"Check Air Quality",
         "name":"CHECK_AIR_QUALITY",
         "fulfillment":{
            "conversationName":"conversation_1"
         },
         "intent":{
            "name":"actions.intent.CHECK_AIR_QUALITY"
         }
      }
   ],
   "conversations":{
      "conversation_1":{
         "name":"conversation_1",
         "url":"https://example.com/fulfillment",
         "fulfillmentApiVersion":2
      }
   }
}

จัดการพารามิเตอร์ Intent ในตัว

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

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

เช่น สคีมาของ Intent ในตัวของ actions.intent.CHECK_AIR_QUALITY จะกำหนดพารามิเตอร์ที่ไม่บังคับ 4 ตัวดังนี้

ชื่อพารามิเตอร์ Type
attributes ค่าสตริง
location ออบเจ็กต์ schema.org/Place
temporalCoverage ออบเจ็กต์ schema.org/Duration
timeIndicator EnumeratedDuration (ส่วนขยายเฉพาะของ Google)

ข้อมูลโค้ดต่อไปนี้แสดงตัวอย่างคำขอเว็บฮุคการสนทนา (JSON) เมื่อผู้ใช้เรียกใช้การดำเนินการโดยพูดว่า "คุณภาพอากาศในซานฟรานซิสโกวันพรุ่งนี้เป็นอย่างไร"

"inputs":[
      {
         "intent":"actions.intent.CHECK_AIR_QUALITY",
         "rawInputs":[
            {
               "inputType":"VOICE",
               "query":"what is the air quality in san francisco tomorrow"
            }
         ],
         "arguments":[
            {
               "name":"location",
               "structuredValue":{
                  "geo":{
                     "longitude":-122.41941550000001,
                     "latitude":37.7749295
                  },
                  "@context":"https://schema.org",
                  "@type":"Place",
                  "name":"san francisco"
               }
            },
            {
               "name":"temporalCoverage",
               "rawText":"2018-04-25",
               "textValue":"2018-04-25"
            }
         ]
      }
   ]

ในตัวอย่างนี้ พารามิเตอร์จะใช้ค่าต่อไปนี้

  • พารามิเตอร์ location มีค่า schema.org/Place สำหรับ "ซานฟรานซิสโก"
  • พารามิเตอร์ temporalCoverage จะมีค่า schema.org/Duration สำหรับวันที่ของวันพรุ่งนี้ที่สัมพันธ์กับเวลาของคำขอ
  • ไม่มีค่าสำหรับพารามิเตอร์ attributes และ timeIndicator เนื่องจากวลีสำหรับเรียกใช้ของผู้ใช้ไม่มีข้อมูลดังกล่าว

หากใช้ไลบรารี Actions on Google Client สำหรับ Node.js คุณจะดึงค่าของพารามิเตอร์ตามที่แสดงในข้อมูลโค้ดต่อไปนี้ได้

app.intent('actions.intent.CHECK_AIR_QUALITY', (conv) => {
  const attributes = conv.arguments.get('attributes');
  const location = conv.arguments.get('location');
  const temporal_coverage = conv.arguments.get('temporalCoverage');
  Const time_indicator = conv.arguments.get('timeIndicator')

  // Your Action logic. If you need to use any of the parameter values,
  // you should check first that it is defined. Arguments.get returns
  // undefined if it can't find a value for a parameter.

});

ทดสอบการผสานรวมด้วย Intent ในตัว

ทําตามขั้นตอนต่อไปนี้เพื่อทดสอบการผสานรวม

  1. เปิดเครื่องจำลองการดำเนินการที่เปิดใช้การดำเนินการทดสอบ หรือเปิด Assistant ในอุปกรณ์
  2. พูดหรือพิมพ์คำค้นหาที่เชื่อมโยงกับ Intent ในตัวดังกล่าว ตัวอย่างเช่น “ฉันอยากเล่นเกม”
  3. จากกล่องโต้ตอบการเลือกแอปที่แสดงอยู่ ให้ค้นหาการดำเนินการของคุณ
  4. เลือกแอปเพื่อส่ง Intent ไปยังแอป
รูปที่ 3 กล่องโต้ตอบการเลือกการดำเนินการที่แสดงผล
จากวลี Intent ในตัว
รูปที่ 4 การเรียกใช้การดำเนินการที่แนบกับ Intent ในตัว

แนวทางปฏิบัติแนะนำในการใช้ Intent ในตัว

คุณควรทำตามแนวทางปฏิบัติแนะนำต่อไปนี้เมื่อใช้ Intent ในตัว

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