สร้าง LINE chatbot แสดงสภาพอากาศและฝุ่น(PM2.5)ด้วย Messaging API และ Cloud Functions for Firebase
โอมจงเงย ไม่อยากเงย แชทไลน์อยู่แต่อยากรู้สภาพดินฟ้าอากาศ ไม่อยากเปลี่ยนแอพไปเข้า Google งั้นมาทำ LINE chatbot ให้คอยดึงค่าสภาพอากาศจาก API ของ iqair มาไว้ใช้กันดีกว่า
ขั้นตอนการทำแบบสั้นๆ
- สร้าง Provider และ Channel
- ติดตั้ง Cloud Functions for Firebase
- สร้าง API Key ของ iqair
- สร้างฟังก์ชันการตอบกลับอัตโนมัติ (Reply)
1. สร้าง Provider และ Channel
สำหรับใครที่ยังไม่เคยสร้าง Provider และ Channel ให้เข้าไปทำตามพี่ Jirawatee ได้เลย
2. ติดตั้ง Cloud Functions for Firebase
ใครที่ไม่เคยใช้ Cloud Functions for Firebase ไปลองทำตามที่ลิ้งค์ด้านล่างก่อน
เพิ่มเติมสำหรับการใช้ Cloud Functions for Firebase หากจะ request API ที่อยู่ภายนอก Google จะต้องเปลี่ยนแพลนจาก Spark ไปเป็น Blaze ก่อน ซึ่งตอนนี้เราจะต้องไปเรียก Messaging API ของ LINE ก็ให้เปลี่ยนแพลนซะให้เรียบร้อย ระบบจะทดลองหักเงินจากบัตร debit/credit ที่เราไปผูก จำไม่ได้ว่าเท่าไหร่ และจะคืนให้ภายหลัง
3. สร้าง API Key ของ iqair
ไปที่ https://www.iqair.com และทำการ register เพื่อ generate API Key มาไว้ใช้งาน ให้เลือก Community แพลนเพื่อใช้งานได้ฟรี
หลังจาก register เสร็จแล้ว ให้ไป generate key โดยกดที่ NEW KEY เพียงแค่นี้เราก็จะได้ API Key มาไว้ใช้งานแล้ว
4. สร้างฟังก์ชันการตอบกลับอัตโนมัติ (Reply)
ขั้นตอนนี้เราจะพัฒนาระบบให้บอทตอบสนองกับผู้ใช้ เมื่อผู้ใช้ได้ส่ง Location ให้ Bot ก็จะมี Message event ซึ่ง message type จะเป็น location วิ่งเข้ามาที่ Webhook พร้อมกับ Object ซึ่งภายใน Object จะมี replyToken ที่ไว้สำหรับการตอบกลับได้ทั้งแบบ 1:1, group รวมถึง room
เริ่มเขียน code กันเลย สามารถ clone source code ได้จาก
เรามาดูคำอธิบาย code ส่วนหลักคร่าวๆดังนี้
- LINE_MESSAGING_API คือ URL สำหรับเรียก LINE MESSAGING API
- AQI_API_KEY คือ API Key ที่ได้จากข้อ 3. ให้เปลี่ยนจาก xxx เป็น Key ที่แต่ละคนได้มา
- ส่วนของ LINE_HEADER ให้เราเปลี่ยน YYY เป็น Chanel Access Token ของเรา
ต่อมาเป็นการสร้าง URL แบบ HTTPS ตาม code ด้านบน
- LineBotReply คือชื่อ path ที่ต่อท้าย URL ของ Cloud Functions
- https.onRequest() ใช้สร้าง Web API ของ Cloud Functions
- replyToken คือ Token สำหรับการตอบกลับไปยังผู้ใช้ ซึ่งจะถูกสร้างใหม่ทุกๆครั้ง ไม่สามารถใช้ซ้ำได้
- latitude, longtitude คือค่า Location ที่ได้จากการที่ผู้ใช้ส่ง Location มาในแชท
ส่วน code ที่เหลือจะเป็นการ Request API เพื่อดึงค่าต่างๆที่เราต้องการจะให้ chatbot ของเราแสดง โดยยังมีอีกหลายๆค่าหากอยากรู้เพิ่มเติม จิ้มตรงนี้ และส่วนสุดท้ายจะเป็น code ของการแสดงผลแบบ flex message ศึกษาเพิ่มเติมได้จากลิ้งค์ด้านล่าง
จัดการกับ code เสร็จเรียบร้อย ก็จัดการ deploy ไปยัง Cloud Fucntions ซะ
firebase deploy --only functions
ที่หน้า Firebase Functions เราก็จะได้ URL ของ Webhook ไปใส่ใน LINE Developer Console ในส่วนของ Webhook URL แล้ว
บทความนี้ไม่ได้อธิบายเนื้อหาเยอะมากนัก แต่ก็แปะลิ้งค์ของผู้เชี่ยวชาญไว้ให้ไปไล่ศึกษา เพราะเค้าอธิบายไว้ได้ละเอียดและเข้าใจง่ายมากๆ ส่วนใครมีคำถาม หรือข้อชี้แนะเพิ่มเติม Comment มาโลด บายยยย…..