สร้าง LINE chatbot แสดงสภาพอากาศและฝุ่น(PM2.5)ด้วย Messaging API และ Cloud Functions for Firebase

Anu Sakpibal
3 min readMar 10, 2021

โอมจงเงย ไม่อยากเงย แชทไลน์อยู่แต่อยากรู้สภาพดินฟ้าอากาศ ไม่อยากเปลี่ยนแอพไปเข้า Google งั้นมาทำ LINE chatbot ให้คอยดึงค่าสภาพอากาศจาก API ของ iqair มาไว้ใช้กันดีกว่า

ขั้นตอนการทำแบบสั้นๆ

  1. สร้าง Provider และ Channel
  2. ติดตั้ง Cloud Functions for Firebase
  3. สร้าง API Key ของ iqair
  4. สร้างฟังก์ชันการตอบกลับอัตโนมัติ (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 มาโลด บายยยย…..

--

--

Anu Sakpibal

I’m miscellaneous developer. Work with Javascipt, C#, Python, iot @Dectre <code ’n’ craft lover/> https://github.com/nuSapb