เชื่อมต่อ Realtime DB และ Firestore จาก Dialogflow เพื่อให้ LINE Bot ของคุณเจ๋งกว่าเดิม

Jirawatee
LINE Developers Thailand
3 min readOct 8, 2018

--

จากบทความที่แล้วที่ผมเล่าถึงวิธีการสร้าง BMI Bot จากการ Integrate ตัว Dialogflow และ Cloud Functions for Firebase เข้ากับ LINE นั้น ปรากฏว่าได้รับการตอบรับที่ดี และนักพัฒนาหลายคน ก็ขอให้ผมช่วยเล่าวิธีการเชื่อมต่อไปยัง Firebase Realtime Database และ Cloud Firestore ทั้งจาก LINE Developers Thailand และ Firebase Thailand

ซึ่งผมเอง ก็หมกเม็ด ไม่ปล่อยบทความนี้ เพราะหวังจะโชว์เรื่องนี้ที่งาน Firebase Dev Day ที่ผ่านมา(กลัวปล่อยไปก่อน คนในงานจะไม่ตื่นเต้น)

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

ส่วนถ้าใครอ่านแล้ว ผมก็จะขอเอาตัวอย่างของบทความภาคแรก ซึ่งก็คือ BMI Bot มาแก้ไขโค้ดใน Fulfillment ของ Dialogflow เพื่อเตรียมพร้อมการเชื่อมต่อ database ผ่าน 2 ขั้นตอน

1. แก้ไขโค้ดในฟังก์ชัน bodyMassIndex

ขั้นตอนนี้ให้เราเปลี่ยนจากผลลัพธ์ในภาคแรกมาเป็นตัวแปรที่จะส่งไป query แทน

let result = 'none';if (bmi < 18.5) {
result = 'xs';
} else if (bmi >= 18.5 && bmi <= 22.9) {
result = 's';
} else if (bmi >= 23 && bmi <= 24.9) {
result = 'm';
} else if (bmi >= 25 && bmi <= 29.9) {
result = 'l';
} else if (bmi > 30) {
result = 'xl';
}

2. เพิ่ม Firebase-Admin เข้ามา เพื่อเข้าถึง database ของ Firebase

const admin = require('firebase-admin');
admin.initializeApp({
credential: admin.credential.applicationDefault(),
databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
});

DATABASE_NAME ปกติคือชื่อเดียวกับ PROJECT_ID ที่อยู่ใน URL ตามภาพด้านล่างนี้

DATABASE_NAME กับ PROJECT_ID จะแตกต่างในกรณีที่เราจะใช้งาน database ตัวที่ไม่ใช่ตัวหลักใน Realtime Database

เชื่อมต่อ Firebase Realtime Database

ก่อนจะทำการเชื่อมต่อ นักพัฒนาควรรู้จัก Firebase Realtime Database ซะก่อน ถ้าหากยังไม่รู้จักก็สามารถอ่านบทความด้านล่างนี้ได้ครับ

สำหรับใครที่รู้จัก Realtime Database อยู่แล้ว มาต่อตรงนี้ได้เลย เริ่มจากออกแบบ database ตามรูปด้านล่างนี้ ใน Firebase Console ซึ่งจะต้องเป็น Project เดียวกันกับที่เราเชื่อมต่อ Dialogflow

ออกแบบเสร็จแล้ว ให้กลับมาที่ Dialogflow เข้าไปเมนู Fulfillment เพิ่มโค้ดเพื่อเชื่อมต่อ Realtime Database ตามโครงสร้างด้านบน โดยส่งค่า result ที่ได้เข้าไปเพื่อ query

return admin.database().ref('bmi').child(result).once('value')
.then(snapshot => {
agent.add(snapshot.val());
});

เอา gist ไปดูเต็มๆด้วยเลย กันเหนียว

เสร็จแล้วก็กด deploy ผ่าน Fulfillment โลด

เชื่อมต่อ Cloud Firestore

ก่อนจะทำการเชื่อมต่อ นักพัฒนาควรรู้จัก Cloud Firestore ซะก่อน ถ้าหากยังไม่รู้จักก็สามารถอ่านบทความด้านล่างนี้ได้ครับ

สำหรับใครที่รู้จัก Cloud Firestore อยู่แล้ว มาต่อตรงนี้ได้เลย เริ่มจากออกแบบ database ตามรูปด้านล่างนี้ ใน Firebase Console ซึ่งจะต้องเป็น Project เดียวกันกับที่เราเชื่อมต่อ Dialogflow

ออกแบบเสร็จแล้ว ให้กลับมาที่ Dialogflow เข้าไปเมนู Fulfillment เพิ่มโค้ดเพื่อเชื่อมต่อ Cloud Firestore ตามโครงสร้างด้านบน โดยส่งค่า result ที่ได้เข้าไปเพื่อ query

return admin.firestore().collection('bmi').doc(result).get()
.then(doc => {
agent.add(doc.data().description);
});

แถม gist ให้แบบเต็มๆ

เสร็จแล้วก็กด deploy ผ่าน Fulfillment โลด

สรุป

ง่ายเนอะ ชีวิตดี๊ดีของการสร้าง LINE Bot ผ่าน Dialogflow และ Firebase หวังว่าทุกคนจะ surprise กับโค้ดที่สั้น และเชื่อว่าบทความนี้ จะมาช่วยปลดล๊อคความสามารถ LINE Bot ของทุกคนให้เจ๋งมากขึ้น สามารถสร้าง use case ได้หลากหลายขึ้น ผ่านการเชื่อมต่อ Realtime Database หรือ Cloud Firestore

และสำหรับใครที่อยากจะส่งข้อความรูปแบบอื่นๆที่นอกเหนือจาก text ก็ให้อ่านบทความภาคต่อด้านล่างนี้เลยครับ

สำหรับวันนี้ขอตัวลาไปก่อน แล้วพบกันบทความหน้า…ราตรีสวัสดิ์ นักพัฒนาชาวไทย

--

--

Jirawatee
LINE Developers Thailand

Technology Evangelist at LINE Thailand / Google Developer Expert in Firebase