9|Page
Pre-defined intents
สะดวกสบาย เมื่อสรา้ ง Agent เสร็จแล้วเราจะพบกับ Default Intents มา 2 ตัวก็คือ Default Welcome
Intent และ Default Fallback Intent มาให้ ซ่งึ กค็ อื Pre-defined intents นน่ั เอง ซงึ่ นบั วา่ เป็นอกี หนึ่ง feature
ที่ Dialogflow ได้เตียมไว้ใหเ้ ราใชง้ านอย่างสะดวกสบาย
นอกจากนั้น ปัจุบัน Dialogflow ยังได้เตรียม Prebuilt Agents ซึ่งภายในประกอบด้วย Pre-defined
intents ไว้ให้เราสามารถ import มาเพ่ือใช้งานได้อีกด้วย (แต่สาหรับ Agent ภาษาไทย ยังมีให้เลือกใช้น้อยอยู่
ตา่ งจากภาษาอังกฤษทมี่ ี Agent หลายแบบใหเ้ ลือกใช)้
10 | P a g e
Creating your first intent
- STEP 3: สร้ำง Intent สอนนอ้ งบอทใหห้ ดั พดู
มำถงึ ตรงนี้ อยำกรู้แลว้ กนั ใช่ไหมครบั วำ่ แลว้ บอทของเรำจะพูดไดอ้ ย่ำงไร ? มำลองสรำ้ ง intent
กันเลยดกี ว่ำ…
คลิก Create Intent
เม่ือทาการกดสรา้ ง Intent ใหมข่ ึ้นมา ตวั หน้า console ก็จะใหเ้ รา config intent ใหมอ่ นั นไ้ี ด้ ตามใน
รปู ซงึ่ เบ้อื งต้นเราจะลองกาหนด ในส่วนของ Training Phrases และ Responses กันกอ่ น
11 | P a g e
- ชอื่ Intent : ในท่ีนีจ้ ะทดลองสร้าง intent สาหรับตอบคาถาม FAQ ดังนั้นจะต้ังชือ่ ว่า “menu.faq”
- Training phases: ตรงสว่ นนเ้ี ปน็ ตวั อยา่ งข้อความทผ่ี ใู้ ช้จะพิมพ์เข้ามา ซ่ึง Dialogflow จะเอาขอ้ ความ
เหลา่ นไ้ี ปทา Natural Language Understanding (NLU) เพอ่ื หารูปแบบข้อความอ่นื ๆที่ผู้ใชอ้ าจจะพมิ พ์
มาดว้ ย
12 | P a g e
- Responses: ตรงนี้ใหก้ รอกข้อความท่ีบอทตอบกลบั ไปหาผูใ้ ช้ ถา้ เรากรอกหลายๆแบบ บอทจะสุ่มเลอื ก
มา 1 ข้อความเพอื่ ตอบผู้ใช้ ทาให้คาตอบของบอทเปลย่ี นไปเรื่อยๆ ไมซ่ า้ ซากจาเจ
เมือ่ กรอกขอ้ มูลครบท้ัง 3 สว่ นแล้วกก็ ดปุม่ “SAVE” ตรงมุมขวาบน และ ทดสอบการทางานของ intent
ทเี่ ราสร้าง จะเหน็ วา่ บอทสามารถตอบโต้ไดด้ งั ภาพ
13 | P a g e
Creating a follow-up intent
สาหรบั ตัวอยา่ งนเี้ ราจะกาหนดใหผ้ ใู้ ช้ตอ้ งพมิ พ์คาวา่ “คาถามทพ่ี บบ่อย” กอ่ นเร่ิมใชง้ าน ดังนัน้ เราจะนา
intent menu.faq สาหรับ FAQ ท่ีเราไดส้ รา้ งไวแ้ ลว้ ข้นึ มาโดยกาหนดให้ Intent น้เี ป็น Trigger node สาหรบั
เรม่ิ กระบวนการสอบถาม FAQ โดยจะ Response ข้อความไปบอกให้ผู้ใช้ระบุ คาถามทต่ี อ้ งการ ซง่ึ จะทาการ
กาหนด Training phrases และ Responses สาหรับ Intent ประมาณน้ี
14 | P a g e
เลือก “Custom”
เมอ่ื สรา้ งสาเรจ็ ได้ followup intent ชอื วา่ “menu.faq - custom”
15 | P a g e
Input and Output context
Contexts : คือสิ่งทีช่ ่วยให้เรา pass ค่าต่างๆขา้ ม intent ไดก้ ็คอื context นี่เอง คลา้ ยๆกบั การใช้
memcached เวลาทา chatbot server เพ่ือเกบ็ ค่าของ user คนนนั้ ๆ ณ ช่วง session น้ัน
หากเปดิ เข้าไปตัง้ คา่ menu.faq – custom จะเหน็ ว่ามีการ กาหนดในสว่ นของ Contexts ทเ่ี ป็น input
context ขึ้นมาโดยอัตโนมตั ิ
ในขณะเดียวกนั หากเรากลับไปดทู ี่ intent : menu.faq ก็จะเห็นว่ามี การตัง้ คา่ Context ในสว่ นของ
output context ใหโ้ ดยอัตโนมัตเิ ชน่ กัน
ซ่งึ ก็คือการกาหนดให้ ท้ัง 2 intent สามารถ ส่ง – รับ ค่า พารามิเตอร์ หรือ สิง่ ที่ user พิมพเ์ ขา้ มาขา้ ม
intent กนั ไดน้ ่นั เอง
ทดลอง เปลีย่ นชือ่ ของ menu.faq – custom เป็น menu.faq – contact และ ตัง้ ค่าอน่ื ๆ ตาม
ตวั อย่าง แลว้ มาลองดูผลลพั ธ์ วา่ เป็นอยา่ งไร
16 | P a g e
17 | P a g e
Action and parameters
Action and parameter : Dialogflow สามารถ extract entity ออกมาจาก user input ได้เช่นกัน
ถา้ เรากาหนดตวั parameter ไว้ พร้อมระบชุ นดิ ของ entity เช่น เวลา,ช่อื ภาษา,ชือ่ ประเทศ,ช่อื หนว่ ยเงนิ เพื่อที่
เอาไปใช้ตอ่ ที่อื่นได้งา่ ยๆ โดยไมต่ ้องมาดักจับเอง
จากหวั ข้อก่อนหน้า เราไดร้ ูจ้ ักการทา Intent ในเบือ้ งตน้ ไปเรียบร้อยแล้ว แต่แชทบอทท่ที ามานน้ั ก็ทาได้
แคก่ ารโตต้ อบประโยคทผ่ี ใู้ ชท้ ักทายมาเท่าน้ัน อาจจะสามรถนาไปประยุกต์ใช้ในการถามตอบคาถามทวั่ ๆไป หรือ
FAQ ตา่ งๆได้ แตย่ งั ไมส่ ามารถรับเอา Action and parameters เพ่ือนาไปคดิ คานวน หรอื ใช้งานรว่ มกับ
application ภายนอกผ่าน webhook ได้
ในบทนเี้ ราจะมาเพมิ่ ความสามารถให้แชทบอทของเราเกง่ มากขึ้น โดยจะทดลอง ภายใต้ Requirement
ตอ่ ไปน้ี
- พูดทักทาย กับผู้ใช้ได้
- ผู้ใชต้ ้องพิมพ์คาวา่ “ตรวจสอบสานวนคดีกอ่ น” ถึงจะเข้ากระบวนการ
- รบั ข้อมูลทจี่ าเป็น
- ยืนยนั ข้อมลู ทีผ่ ู้ใช้กรอกเขา้ มา
- แสดงผลการตรวจสอบ
มาเริม่ กนั เลยดีกวา่
สร้าง Intent COJ.Tracking และกาหนดค่า Training phrases และ กาหนด Response เพ่อื รบั ค่า
สาหรบั นาไปใช้ใน followup intent ตามภาพ
18 | P a g e
เรยี บรอ้ ยแลว้ กดปุม่ “SAVE”
19 | P a g e
จากนั้น สรา้ ง followup intent และ Training phrases ตามภาพ
และแลว้ ก็ มาถึงชว่ งสาคญั ท่เี ราจะตอ้ งกาหนด Action and parameter โดยท่ีเราจะต้องเลอื กกาหนด
Entity ใหเ้ หมาะสมกบั ประเภทของข้อมลู ท่ีเราต้องการรบั มาใช้ โดยสามารถตรวจสอบได้ ท่ี
https://cloud.google.com/dialogflow/docs/reference/system-entities
ในทนี่ ีเ่ ราจะทดลองกาหนด ตามภาพ
20 | P a g e
ตรวจสอบช่อื และ รายละเอยี ดของ parameter ให้ถูกต้อง จากนัน้ Check Box REQUIRED และ
กาหนด PROMPTS ในกรณีท่ีต้องการบงั คับรับคา่ นัน้ ๆ
เมอื่ กาหนดการรับค่า Action and Parameter เรียบร้อยแลว้ กส็ ามารถนา Value ไปใชง้ านตอ่ ได้ ดงั
ตวั อยา่ งนี้ จะใช้ value $court , $casenumber และ $year ไปใช้ใน Responses
21 | P a g e
ทดสอบดจู ะเห็นวา่ สามารถ นาค่า parameter มาใชไ้ ดแ้ ล้ว
22 | P a g e
No follow-up intent
No follow-up intent ก็คือ follow-up intent ท่ี Dialogflow เตรยี มไว้ใหเ้ ราใช้ เป็น pre-defined
สาหรับรองรบั training phrases ซึ่งรองรบั ประโยคปฏเิ สธต่างๆ
23 | P a g e
ทาการสร้าง follow-up intent โดยให้เลอื กประเภท เปน็ “No”
จะเห็นวา่ เมอื่ สร้างได้แลว้ Dialogflow จะทาการสร้าง input Context ใหเ้ ราแลว้ โดยอัตโนมตั ิ แต่ในสว่ น
ของ output context น้ัน เราจะต้องกาหนด เพิ่มเข้าไป เพ่ือว่า เมื่อ user พิมพ์ no มาแล้ว ให้กระบวนการ
ย้อนกลับไปเป็น input ของ intent ก่อนหน้า ให้กรอกข้อมูล เข้ าม าให ม่ ซ่ึงในท่ีนี้คือ intent :
COJTracking.process ซง่ึ input context ก็ คอื COJTracking-followup นั่นเอง
24 | P a g e
จากนั้น ใหก้ าหนด Response เพ่ือรองรบั การกรอกข้อมลู เขา้ มาใหม่
เสร็จแลว้ จึงกดปมุ่ “SAVE” ตามลาดับ
25 | P a g e
Yes follow-up intent
เชน่ เดยี วกนั กับ No follow-up ซ่ึงเปน็ เปน็ pre-defined ท่ไี ด้ Dialogflow เตรยี มไว้ให้เราใชง้ าน แต่
คราวน้ีจะเปน็ สาหรบั คาตอบ ประเภทตอบรับ หรือ คอนเฟิรม์ นัน่ เอง
26 | P a g e
ในการทดลองน้ีเรา จะกาหนดให้ เม่อื user ตอบคอนเฟริ ์ม แลว้ เราจะให้ ตอบว่า “กรุณารอซักครู่ น้อง
บอทกาลงั ตรวจสอบสถานะสานวนคดใี หค้ ่ะ” เอาไวก้ ่อน นอกจากน้ีเรายังสามารถโยนคา่ พารามเิ ตอร์จาก
intent หน่งึ ไปใชใ้ น อีก intent หน่ึง หรือ ใน fulfilment กไ็ ด้อีกด้วย
27 | P a g e
Get parameters from previous intent
เราจะทาการกาหนดค่า ใน Action and Parameter เพ่ือรับค่าจาก Intent ก่อนหน้ามา โดยท่ีไม่ต้อง
กรอกข้อมูลเข้าใหม่ เพื่อท่ีจะเก็บไว้สาหรับโยนค่าไปใช้งานสาหรับ การทา Fulfillment ในบทถัดไป
ซึ่ ง ส า ม า ร ถ ก า ห น ด ไ ด้ โ ด ย ใ ช้ เ ค รื่ อ ง ห ม า ย #+ชื่ อ ข อ ง input Context ท่ี รั บ ม า + . ช่ื อ ตั ว แ ป ล
เช่น #COJTracking-Process-followup.court ในการกาหนดคา่ Value ดงั ภาพ
จากนั้นกดปุ่ม “SAVE” เพือ่ บันทกึ ตามปกติ
28 | P a g e
Integration with LINE
จากบทก่อนหน้านี้ เราได้ ทาการสร้าง Dialogflow สาหรับ Chatbot เป็นท่ีเรียบร้อยแล้ว
ต่อไป จะเปน็ การ Integrate Dialofflow เขา้ กับ LINE เพื่อให้ ทางานรว่ มกนั เป็น LINE Chatbot ได้นน่ั เอง
Dialogflow สามารถรองรับการ Integrate กับ แฟลตฟอร์มต่างๆไดห้ ลายอย่าง ซึ่งในที่นี้เราจะทาการ
กาหนดใหท้ างานร่วมกับ LINE โดย กาหนดคา่ ดงั นี้
29 | P a g e
ซงึ่ ค่าทตี่ ้องนามาใส่ใน 1 , 2 , 4 สามารถหาไดโ้ ดย ไปท่ี LINE Developer
(https://developers.line.biz/ ) เมื่อเข้าสู่งหนา้ Provider แลว้ ให้เปดิ ที่ tab Basic settings
30 | P a g e
จากน้ันเลือ่ นหน้าจอลงมา
และไปที่ tab Messaging API
31 | P a g e
เมอ่ื กรอกข้อมูลครบแลว้ ให้ คลกิ ท่ปี ุ่ม “START”
ถึงตอนนีเ้ ราจะได้ หมายเลข 4 webhook URL แล้ว ให้ ทาการ Copy URL น้ี และนาไปกาหนดคา่
ที่ LINE Developer > tab Messaging API > Webhook settings
32 | P a g e
เพียงเทา่ นเ้ี ราก็สามารถ ใช้ LINE ในการพดู คุย เปน็ Chatbot ร่วมกบั Dialogflow ไดแ้ ล้ว
33 | P a g e
Customize LINE message responses
เมอ่ื Integrate Dialogflow ไดเ้ รียบร้อยแลว้ จะขอแนะนา อีกรปู แบบหน่งึ ของ responses ที่ Dialogflow ได้
เตรยี มไวใ้ หเ้ ราใช้งาน รว่ มกบั LINE นนั่ กค็ ือ LINE message responses นั่นเอง
ตอนนใ้ี ห้เรากลบั มาท่ี การสร้าง followup intent อีกคร้ัง
ในครงั้ นีใ้ หเ้ ราสรา้ ง followup intent ตอ่ จาก menu.faq เป็น menu.faq – map เพ่ือทดลองให้ dialogflow
คืนค่าเปน็ ข้อความในรปู แบบของ LINE message responses โดยในตวั อยา่ งน้เี ราจะใช้ เป็น image และ
location
34 | P a g e
เม่อื คลิกท่ปี มุ่ “ADD RESPONSE” จะเหน็ วา่ มีตัวเลือก ให้เราเลอื กชนิดของ LINE message ท่ตี อ้ งการ
35 | P a g e
ซง่ึ Dialogflow ไดเ้ ตรยี ม UI งา่ ยๆในการใชง้ าน ไวใ้ หเ้ รา 3 ชนดิ คือ Image , Card , Quick Replies และ ชนดิ
ที่ 4 คอื Custom Payload ไว้สาหรบั เพ่ิม code ที่เป็น JSON format ง่ายๆ
ตามรูปแบบของ LINE message ชนิดอื่น ตามท่ีไดเ้ รียนรู้ไปแล้วในการอบรมวันแรก ทีผ่ า่ นมา
36 | P a g e
https://developers.line.biz/en/docs/messaging-api/message-types/
Text, Sticker, Image, Video, Audio
Location, Imagemap, Templates
Trick ! พอบอกว่า ต้อง code เป็น JSON หลายๆท่านอาจจะ เกรง็ ๆ เอ๊ะ เรา code ไม่เกง่ จะทายงั ไงดี ?
ไมต่ ้องตกใจไป เรามีทางออกนะครับ นัน่ กค็ ือ สามารถใช้ LINE Bot Designer ออกแบบ จากน้นั copy JSON
มาใชง้ านได้เลยครบั ^^
37 | P a g e
Image
Card
38 | P a g e
Quick replies
39 | P a g e
และ Custom Payload
โดยในตัวอยา่ งนเ้ี ราจะใช้ เปน็ image และ location
40 | P a g e
Trick !!
Image URL ตอ้ งเปน็ ลิงค์ทช่ี ี้ไปถึง ไฟล์ .jpg หรอื .png และ URL จะต้องเป็น https
เมื่อทาการ SAVE ก็ลองทดสอบการใช้งานผ่าน LINE จะเห็นว่า Dialogflow สามารถ ส่งข้อความในรปู แบบของ
LINE message ไดแ้ ลว้
41 | P a g e
What is "Fulfillment"?
Fulfillment : สว่ นเตมิ เตม็ ซ่ึงจะเตมิ เต็มดว้ ย webhook น่นั เอง ซง่ึ ในแทบ็ Fulfillment ส่วนนค้ี อื การโยน
intent นไ้ี ปให้ webhook ใน server ของเรา เพื่อทาการ customize อย่างอื่นๆ หรอื manipulate data ต่างๆ
กไ็ ด้ เช่นการ hook เข้ากบั firebase cloud functions หรอื nodejs server ปกตทิ ั่วๆไป
ซง่ึ แตล่ ะอนั จะมี Custom payload ใหเ้ ลอื กด้วย เพื่อทาการ customize response ดว้ ย JSON (Template ที่
เค้ามีให้จรงิ ๆแลว้ ก็คือ JSON ทีเ่ ขียนตาม API ของแตล่ ะ platform น่ันเอง(
Enabling Fulfillment
เปิดการใชง้ าน Fulfilment สาหรับ แต่ละ intent
จากนน้ั ใหม้ าท่ี menu Fulfilment เพ่อื ทาการเปิดใช้งาน Fulfilment โดย จะมกี ารทางานเปน็ 2 ส่วน นัน่ คอื ใช้
)1( webhook จากภายนอกซ่ึงเรา สามารถพฒั นาขนึ้ เองได้ , )2( Inline Editor ซง่ึ Dialogflow ได้จัดเตรยี ม
webhook กึ่งสาเรจ็ รปู เอาไว้ใหเ้ ราใชง้ านแล้ว โดย จะเปน็ nodejs นัน่ เอง
42 | P a g e
1. Webhook ในท่นี ี้ จะทาการทดลองการใช้ Webhook โดย เชอื่ มโยงกบั Google Sheet เพอ่ื ใช้เป็น
ฐานข้อมูลสาหรับ แชทบอท
ส่ิงทตี่ ้องเตรยี ม
- Line BOT บน Dialogflow
- Google Sheet ใชเ้ ป็นฐานขอ้ มูล
- Google App Script ใช้เขยี นเปน็ function ในการจัดการกับ Google Sheet และ public เปน็
Webhook นั่นเอง
43 | P a g e
ไปท่ี Google Drive และสร้าง Sheet ใหม่
จากน้ัน ตง้ั ช่อื เอกสาร ตงั้ ช่ือ Sheet และ สรา้ งข้อมลู ตามตวั อยา่ ง
44 | P a g e
เมือ่ ไดข้ ้อมลู เรียบรอ้ ยแลว้ ให้มาท่ี เมนู เครื่องมือ >> โปรแกรมแก้ไขสครปิ ต์ เพ่ือเข้าสู่ บรกิ าร google
app script
45 | P a g e
46 | P a g e
var ss = SpreadsheetApp.openByUrl("URL Google Sheet");
var sheet = ss.getSheetByName("ช่ือแผ่นงานsheet");
function doPost(e) {
var data = JSON.parse(e.postData.contents)
var userMsg = data.originalDetectIntentRequest.payload.data.message.text;
var values = sheet.getRange(2, 1, sheet.getLastRow(),sheet.getLastColumn()).getValues();
for(var i = 0;i<values.length; i++){
if(values[i][0] == userMsg ){
i=i+2;
var Data = sheet.getRange(i,2).getValue();
var result = {
"fulfillmentMessages": [
{
"platform": "line",
47 | P a g e
"type": 4,
"payload" : {
"line": {
"type": "text",
"text": Data
}
}
}
]
}
var replyJSON =
ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.Mim
eType.JSON);
return replyJSON;
}
}
}
Credit Code : nai golf @thiravut.golf
48 | P a g e
มาดู Code กนั ซักเล็กน้อย
ในสว่ นของ code 2 บรรทัดแรกใหเ้ ปลีย่ น เป็น URL ของ ไฟล์ ของเราเอง และ ชือ่ แผ่นงานที่ต้องการ
เข้าถึงข้อมลู
49 | P a g e
userMsg : รบั Response Message จาก Dialogflow
values : การหาช่วงตาแหนง่ รปู แบบ
→ getRange(row, column, numRows, numColumns)
วนลปู เพอ่ื คน้ หาตาแหน่งของคาทต่ี ้องการค้นหา
values[i][0] ← เลข 0 คอื ตาแหน่งของคอลัมน์ท่ีใช้คน้ หาให้ตรงกับ userMsg ที่ตอ้ งการ
เม่ือไดต้ าแหน่งแล้ว เราจะใช้ getValue() เพ่ือดึงข้อมูลจากคอลมั น์ท่ีตอ้ งการ
)i,2) ←i คือ row // คือ 2column
50 | P a g e
เมอ่ื ไดร้ ับข้อมูลที่คน้ หาแล้ว [Data] เราจะใชร้ ปู แบบในการ Response ค่ากลับไปยัง Webhook ของ
Dialogflow
จะเหน็ ว่า สามารถ นา LINE messaging Json มาใชง้ านในส่วนนไ้ี ด้เลย
51 | P a g e
เมื่อ กาหนด code เรียบรอ้ ยแล้ว ใหเ้ รา ทาการ SAVE จากน้นั ไปทีเ่ มนู Deploy >>> New
deployment พรอ้ มกาหนดค่าต่างๆ ตามข้นั ตอน เพ่ือใช้งานเป็น webhook ของเราน่ันเอง
52 | P a g e
จากนั้น กดปุ่ม “Deploy”
53 | P a g e
ในกรณีท่ีไม่เคยใชง้ าน google app script มาก่อน อาจจะตอ้ งทาการตรวจสอบสทิ ธ์ซิ ะก่อน
54 | P a g e
จากนั้นเราก็จะได้ URL สาหรับนาไปใชเ้ ป็น Webhook แล้วล่ะ
55 | P a g e
นา URL ทไี่ ด้ ไปกาหนดคา่ สาหรับ Webhook ใน Fulfilment ของ Dialogflow
มาถงึ ตอนน้เี รา จะมี Webhook พร้อมใช้งานแล้ว ดังน้นั ลองมาสรา้ ง Intent สาหรบั ใช้งาน ฐานข้อมลู บน
google sheet ของเรากันเลย
ใหเ้ รากลบั มาที่ การสร้าง followup intent อกี คร้งั
56 | P a g e
ในคร้ังนใ้ี หเ้ ราสรา้ ง followup intent ต่อจาก menu.faq เปน็ menu.faq – abbreviations เพ่อื ทดลองให้
dialogflow สามารถเปรียบเทียบ ได้ว่า อักษรย่อเกยี่ วกบั คดคี วามแตล่ ะตวั หมายความว่าอย่างไร โดยนา คาถาม
จาก training phrase ไปเปรียบเทียบกับข้อมูล บน google sheet ของเรา แล้วจึงนามาตอบผา่ ทาง LINE chat
bot ของเรานนั่ เอง
57 | P a g e
58 | P a g e
ทาการ SAVE และ กลับไปสร้าง Followup intent ต่อจาก menu.faq – abbreviations ใหช้ ่อื ว่า
menu.faq - abbreviations – case และ กาหนดคา่ ของ Training phrases ตาม อกั ษรยอ่ ทีเ่ รามีอยู่ ใน