[USECASE-Part2] มาลองทำ Chatbot ดึงราคา Cryptocurrency จาก Bitkub และ Satang Pro ด้วย Messaging API

⚠️[บทความนี้ ไม่มีส่วนในการชี้นำการลงทุน หรือซื้อเหรียญใดๆ]⚠️

สวัสดีครับทุกท่าน จากบทความคราวที่แล้วต้องขออภัยที่ต้องปล่อยให้รอคอยนานนะครับ สำหรับเพื่อนๆที่ยังไม่ได้อ่านบทความก่อนหน้าเชิญด้านนี้เลยครับ

สำหรับท่านใดที่เตรียม Part 1แล้วมาต่อกัน มาดูว่ามีอะไรบ้าง ตามนี้เลย

  1. Deploy Firebase Cloud Function
  2. Cloud Firestore
  3. ตั้งค่าเหรียญที่จะดึงข้อมูลจาก Collection เพื่อนำไปทำ Schedule
  4. ตั้ง Schedule ตามเวลาที่กำหนด

หมายเหตุ ท้ายบทความจะมี Code ทั้งหมด

1. Deploy Firebase Cloud Function

จากชุด Code ก่อนหน้านี้ ผมได้มีการปรับจูน Code ไปบ้างโดยจะมีเพิ่มเรื่องของ axios ครับ และปรับส่วนของการ Reply ครับสามารถ Copy ใหม่ตามด้านล่างนี้ได้เลย

npm i axios --save

เพื่อนๆ สามารถใช้คำสั่ง

firebase deploy --only functions

หมายเหตุ ท่านต้องผูกบัตรและปรับ Package เป็น Blaze ก่อนนะครับถึงจะเปิดใช้งาน ส่วนนี้ได้

จะได้ Function ซึ่งสามารถ Copy ไปตั้งค่าที่ Webhook ได้เลยครับ

 https://us-central1-line-cryptocurrency.cloudfunctions.net/Chatbot1 

2. Connect Cloud Firestore

ขั้นตอนนี้เราจะใช้ Cloud Firestore ซึ่งเป็น Database ครับโดยที่ผมจะให้ import ที่ชื่อว่า “firebase-admin” แล้วก็จะทำการ initializeApp

const admin = require("firebase-admin");admin.initializeApp();

และใน functions ของ Chatbot1 ผมจะลองเพิ่มการ Insert ของข้อมูลที่ได้จาก Event Webhook มาเพื่อทดสอบ

admin.firestore().collection('line').doc(event.message.id).set({event: request.body.events[0]});

ผมจะใช้ชื่อ Collection ว่า line แล้วให้ document เป็น Message ID

คำถามคือผมจะทดสอบยังไงโดยยังไม่ต้อง Deploy

มาลองใช้ firestore จาก Firebase emulator กันสักเล็กน้อยให้โดยจะให้ทวนคำสั่งตามนี้ครับ

  1. ติดตั้ง Firebase Emulator
firebase init emulators

เลือกติดตั้ง Functions และ Firestore

ซึ่ง Port ที่ได้จะเป็นดังนี้ Functions Port 5001 / Firestore Port 8080

2. สั่ง Start Emulator

firebase emulators:start

ทดสอบโดยการเข้าไปที่ http://localhost:4002/firestore จะได้หน้าตาสวยๆแบบนี้เลย

โดยหลังจากนี้จะให้ทำการเอา Webhook Ngrok ผมทดสอบไปลองยิง Message ดูครับจะได้รู้ว่าเข้าไม่เข้า

มาแล้วววววแปลว่าแบบนี้เอาขึ้นได้แน่นวล!!! ซึ่งผมก็ได้ทำการลองโดยการ

firebase deploy --only functions

สลับไปใช้ Webhook จาก Cloud Functions ก็ได้เรียบร้อย

3. ตั้งค่าเหรียญที่จะดึงข้อมูลจาก Collection เพื่อนำไปทำ Schedule

ก่อนจะเริ่มเขียน Code ผมอยากให้เพื่อนๆ ใส่ข้อมูลผมตาม Collection ตามนี้

โดย

Collection ชื่อ “schedule”

Document เก็บค่า “coin”

Field Key. “coin” Value “eth” << ชื่อเหรียญสำหรับที่เราจะแจ้งเตือน

เรามาเริ่ม Coding กันโดยเราจะเริ่มขั้นตอนดังนี้

  1. เพิ่มส่วนของการ Code ตั้งเวลา schedule
  2. เพิ่ม API broadcast สำหรับยิงข้อความ
  3. Deploy Functions และรอการแสดงผล

หมายเหตุ ณ ตอนนี้ firebase emulator ยังไม่มีให้ทดสอบการแจ้งเตือน

  1. เพิ่มส่วนของการ Code ตั้งเวลา schedule ซึ่งการตั้งเวลา พี่ตี๋ของเราก็มีบทความเกี่ยวกับการตั้งเวลาแจ้งเตือนกันแบบ 7.8 ริเตอร์ที่บทความนี้

ส่วนของ Code จะได้หน้าตาประมาณนี้

ซึ่งเราสามารถแก้ช่วงเวลาที่เป็น **** ได้ดังนี้

schedule('* * * * *') >>> ทุกๆ 1 นาที"every 1 mins" = ทุกนาที"every 1 hours" = ทุก 1 ช.ม"every day 00:00" = ทุกวันตอนเที่ยงคืน"every mon 09:00" = ทุกวันจันทร์ เวลา 09:00"every 5 mins from 10:00 to 14:00" = ทุก 5นาที ตั้งแต่ 10:00-14:00"1,3,5 of month 09:00" = ทุกวันที่ 1, 3, 5 ของเดือน เวลา 09:00"1st,3rd fri of month 12:00" = ศุกร์แรกและศุกร์ที่สามของเดือนเวลาเที่ยง"1st wed of mar,apr 12:00" = พุธแรกของเดือน มี.ค และ เม.ย เวลาเที่ยง"1 of jan,july 00:00" = ทุกวันที่ 1 ของเดือน ม.ค และ ก.ค เวลาเที่ยงคืน

Cradit : สร้าง Cron Job ด้วย Cloud Functions for Firebase ง่ายนิดเดียว

มันก็คือตัวแทนเรื่องวันเวลาของเราโดยสามารถกดคำนวนดูได้จาก Crontab

https://crontab.guru/

และใน Function Coin1 มีการ Query Data จาก Firestore โดยชื่อเราต้องตรงกัน คือ

Collection schedule และ Document coin เมื่อผม Query มาแล้วจะใช้คำสั่ง .data() เพื่อดูค่าที่ response ซึ่งจะได้ coin : eth ที่เราจะนำไปใช้นั้นเองครับ

2. เพิ่ม API broadcast สำหรับยิงข้อความ

ส่วนนี้ผมแค่ Copy ของ Reply ครับ แล้วแก้เป็น Broadcast ซึ่งผมตั้งชื่อว่า push

โดยจะพบว่าที่ schedule มีการเรียกใช้ด้วยเรียบร้อยแล้ว

3. Deploy Functions และรอการแสดงผล

ไม่รอช้าพอตั้งเวลาจนพอใจก็สั่ง

firebase deploy --only functions

เมื่อสำเร็จจะแสดงดังนี้

และเมื่อถึงเวลาที่เราตั้งไว้ก็รอรับ Message ได้เลยครับ

เรียบร้อยยยยิงรัวๆกันมาเลยทีเดียวครับ

สรุป Code ทั้งหมดครับ

จบแล้วกับ Part ที่สองครับโดยเพื่อนๆจะได้ทักษะการตั้งเวลาแจ้งเตือนการเรียกใช้ API จากแหล่งอื่นๆ ซึ่งคาดหวังเป็นอย่างยิ่งที่จะได้เป็นส่วนหนึ่งในการต่อยอดและการพัฒนาระบบให้ดีขึ้น สำหรับ Usecase ต่างๆ ผมจะพยามแชร์จากที่มีคนสอบถามมาเป็น Tips และการประยุกต์ใช้นะครับ แล้วพบกันใหม่ครับ ^^

--

--

Closing the distance. Our mission is to bring people, information and services closer together

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store