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

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

สวัสดีครับทุกท่าน ช่วงนี้คงไม่มีใครไม่รู้จักคำว่า Cryptocurrency แน่ๆ หรือ ท่านที่ไม่ได้เล่นก็คงต้องได้ยิน Bitcoin กันบ้างใช่มั้ยครับ จากสถานการณ์ ณ ขณะ ผมกำลังเขียนบทความนี้ ก็เป็นช่วง To The Hell 📈 ของทุกเหรียญเลยละครับฮาๆ ก็เกิดเป็นคำถามช่วงที่ทุกคนรู้จัก Cryptocurrency

บทความนี้จึงเป็นตัวอย่างในการใช้ Messging API มาทำการดึงข้อมูลด้วย API ของ Exchange Cypto ชื่อดังทั้งสอง อย่าง Bitkub และ Satang Pro กันครับ

เพื่อนๆ ไม่จำเป็นต้องสมัครก็สามารถใช้ API Public ได้ หรือ ในอนาคตต่อยอดไปถึงระดับทำ Auto Trad Bot หรือดึงกระเป๋าส่วนตัวจำเป็นสมัคร เนื่องจากต้องใช้ API Key เพื่อเรียก API Private

Part 1 เราจะทำขั้นตอนกันดังนี้

  1. สร้าง LINE Official Account และ Channel Messaging API
  2. เตรียมความพร้อมโดย พัฒนา LINE Chatbot ด้วย Cloud Function for Firebase
  3. เตรียม API Document จาก Bitkub และ Satang Pro
  4. ดึงข้อมูล API Document จาก Bitkub และ Satang Pro
  5. รายงานผลผ่าน Flex Message

ซึ่งถ้าเพื่อนๆ สร้าง Project Cloud Functions. ได้แล้วข้ามไปข้อ 3 ดึงข้อมูล API Document จาก Bitkub และ Satang Pro ได้เลย

Part2 (ขั้นตอนนี้ต้องผูกบัตรเพื่อปรับ Package เป็น Blaze)

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

1. สร้าง LINE Official Account และ Channel Messaging API

สำหรับท่านที่กำลังจะเริ่มพัฒนาทาง LINE Community ก็มีหลายบทความที่ท่านจะได้เริ่มต้น แต่สำหรับผม แนะนำ บทความที่ดีที่สุดด้านล่างนี้ครับ

หรือสามารถอ่านบทความทั้งหมดของ LINE DEV ได้ที่

2. เตรียมความพร้อมโดย พัฒนา LINE Chatbot ด้วย Cloud Function for Firebase

บทความนี้จะเป็นจักรวาลเริ่มต้นของการสร้าง Cloud Functions fot Firebase

โดยสรุปขั้นตอนดังนี้

2.1. ไปที่ https://firebase.google.com/

2.2. กดปุ่ม Create Project หรือสร้าง Project เพิ่ม ตั้งชื่อ “line-cryptocurrency”

2.3. ตั้งค่า Project Set Default resource location เลือก asia-northeast1(Tokyo)

หมายเหตุ เป็นข่าวดีของเราที่ LINE Server มี Location อยู่ที่โตเกียวแล้วซึ่งใกล้เรามากยิ่งขึ้น และแน่นอนเราต้องตั้งค่าที่ Cloud Functions for firebase ด้วย

2.4. สร้าง Project ตามขั้นตอนนี้

mkdir line-crypto
cd line-crypto
firebase init functions

เลือก “Use an existing project”

เลือก Project “line-cryptocurrency”

ผมเลือกพัฒนาด้วยภาษา JavaScript

ให้ทำการ Enter ยาวๆ ครับ

  • สังเกตุว่า ESLint ให้เลือกเป็น No แล้วแต่ท่านที่จะ เทส Bug
  • และ ติดตั้งDependencies ให้เลือกเป็น Yes
cd functions
npm install

2.5. เปิด index.js ทำการเปิด Comment ดังรูป

โดยการ Deploy Functions จะมีสองทางเลือก

  1. ท่านจะต้อง ผูกบัตร และ Upgrade Plan เป็น Blaze ก่อน ครับถึงจะ Firebase Deploy เพื่อให้ได้ Cloud Functions
  2. ท่านสามารถใช้ ngrok + Firebase Emulators ในการ ทำ Mockup Functions ได้

โดยผมจะใช้วิธีที่ 2 ซึ่งในส่วนวิธีที่ 2 ผมมีบทความก่อนหน้านี้ ข้อที่ 5 และ 6 จะช่วยให้เล่น ngrok และมาประยุกต์ได้

ก็เริ่มลุยกันเลยด้วยสองคำสั่งนี้ (Port ผมจะ Start ที่ 5001)

firebase emulators:start

และทำการเปิด ngrok ด้วยคำสั่งนี้ (ให้นำ port 5001 มาใช้งาน)

./ngrok http 5001

เรียบร้อย

ท่านสามารถเปิด Firebase Emulator Suite => Logs Console ได้ที่

http://localhost:4000/functions

หมายเหตุ ถึงขั้นตอนนี้ เป็นการเตรียมความพร้อมของ Project เราเท่านั้น

3. เตรียมข้อมูล API Document จาก Bitkub และ Satang Pro

เริ่มจาก Exchange อันดับหนึ่งของประเทศไทย Bitkub ครับ ซึ่งเพื่อนๆที่ ไม่มีกระเป๋าหรือยังไม่ต้องสมัคร ก็สามารถเล่น API ได้แต่เพียงไม่สามารถใช้งาน API ระดับ Private เท่านั้นครับ และถ้าใครมีกระเป๋าอยู่แล้วก็สามารถตามภาพได้เลยครับ

https://coinmarketcap.com/th/rankings/exchanges/

เลือกที่รูปคนจะเห็นเมนู API

เมื่อคลิกเข้ามาแล้วจะเจอ API Document ก็กดโลดดดดเลยครับ

จะพบกับ Github ซึ่งในนั้นจะมี Example Code เป็นภาษาPython ครับและ ตัวอย่างการใช้ API แต่ละเส้นซึ่งจะประกอบด้วยดังนี้

  1. restful-api.md < เราใช้อันนี้เป็น Restful API
  2. websocket-api.md < ข้อมูล Realtime ใช้ Websocket
https://github.com/bitkub/bitkub-official-api-docs

กดเข้ามาที่ restful-api.md

https://github.com/bitkub/bitkub-official-api-docs/blob/master/restful-api.md

เลื่อนลงมาจะพบกับ API Public เป็น Method GET ซึ่งเราสามารถใช้ได้เลยไม่ต้อง Authen Application Key

THB_ETH ครับ

https://api.bitkub.com/api/market/ticker?sym=THB_ETH

ซึ่งค่าที่ได้ออกมาจะมีดังนี้

{"THB_ETH": {  // ชื่อเหรียญ"id": 2,  // ID ของเหรียญ"last": 95561.12,  // ราคาล่าสุด"lowestAsk": 95798.94, // ราคาที่ซึ้อ"highestBid": 95561.12, // ราคาขาย"percentChange": -4.44, // เปอร์เซนที่มีการเปลี่ยนแปลงการซื้อขาย"baseVolume": 13676.81258657,"quoteVolume": 1210713176.74,"isFrozen": 0,"high24hr": 100500, // ราคาสูงสุด"low24hr": 71000, // ราคาที่ต่ำสุด"change": -4438.88, // ค่าการเปลี่ยนแปลง"prevClose": 95561.12, //ราคาสุดท้ายตอนปิด"prevOpen": 100000 // ราคาแรกตอนเปิด}}

ก็ทำการทดสอบผ่าน Postman จะได้ดังภาพ

ไม่ต้องเหนื่อยไป ผมได้รวบรวมมาให้เรียบร้อยแล้ว สามารถนำไป Import ใน Postman ได้เลยครับ

https://www.getpostman.com/collections/e81a4eadb2bc979f09a6

และมาถึงคิวของ Exchange อันดับหนึ่งในดวงใจของผมเป็น ซึ่งเหตุผลมีหลายประการ แต่ที่แน่นอนคือ To The Moon นั้นคือ

Satang Pro

ให้เลื่อนลงมาด้านล่างครับเพื่อนๆ จะเจอคำว่า “API Document” ให้คลิกโลดดด

https://docs.satangcorp.com/

ให้ไปที่ APIs V3 ส่วนของ Public ครับ ซึ่งจะเป็นส่วนที่เราใช้ได้โดยไม่ต้องมีกระเป๋า

ซึ่งในครั้งนี้เราจะใช้ API ที่ชื่อ Ticker/24 ครับ เพื่อให้เพื่อนๆได้ ราคา ณ ปัจจุบันของเหรียญนั้นๆโดยเราใช้. Query ชื่อ. symbol เหรียญนั้นๆได้เช่น THB_ETH ครับ

https://satangcorp.com/api/v3/ticker/24hr

ก็นำมาลองทำสอบผ่าน Postman จะได้ดังนี้

เหมือนเดิมไม่ต้องเหนื่อยไป ผมได้รวบรวมมาให้เรียบร้อยแล้ว สามารถนำไป Import ใน Postman ได้เลยครับ

https://www.getpostman.com/collections/e81a4eadb2bc979f09a6

สรุปการเตรียม API นี้เราจะได้ ราคา ของเหรียญมาแล้วซึ่ง Object ที่เราจะนำไปใช้มีดังนี้

  1. ราคาเหรียญล่าสุด
  2. ราคาเหรียญสูงสุด
  3. ราคาเหรียญต่ำสุด
  4. เปอร์เซนการเปลี่ยนแปลงของเหรียญ

ซึ่งทั้งสอง Exchange มีเหมือนกันครับ และ ก็เรียบร้อยแล้วสำหรับเตรียม API มาเริ่มลงมือเขียน function กันครับ

4.ดึงข้อมูล API Document จาก Bitkub และ Satang Pro

ถึงเวลาที่จะมาลองดึงข้อมูลกันสักหน่อยแล้วโดยให้เพื่อๆที่กำลังลองทำตามดังนี้ครับ

4.1 สร้าง Function ชื่อ Chatbot นะครับ หรือจะสร้างชื่ออะไรก็ได้ แต่ตอนที่นำไปใช้ที่ Webhook ให้ตรงกันครับ สร้างรอไว้ก่อนนะ เดี๋ยวเรียกมาใช้

เพิ่มเติมนะครับ จะสังเกตุว่าผมเพิ่ม location เป็น asia-northeast1 นั้นเพราะ LINE ได้มีการเพิ่ม Server มาที่โตเกียวแล้ว เพราะฉะนั้น จะช่วยให้การ Call ไปหา LINE Server จะเร็วปรูดปร๊าดขึ้นครับ

4.2 นำ Webhook ผูกกับ LINE Chatbot และทดสอบกันสักนิดนะครับ

ได้แบบนี้ก็มาถูกทางแล้วครับไปต่อกันเลยครับ

4.2 สร้าง Function สำหรับ Get API ทั้ง Bitkub และ Satang Pro

ลองเรียกใช้ทดสอบดูครับว่าได้ค่าที่เราอยากได้หรือยัง โดยเงื่อนไขของ Function ของผมมีหน้าที่ส่ง Message เป็นชื่อเหรียญครับ

4.5 เราต้องใช้ออกมาเพื่อเทียบราคาดังนี้

ราคาเหรียญล่าสุด , ราคาเหรียญสูงสุด , ราคาเหรียญต่ำสุด, ราคาการเปลี่ยนแปลงของเหรียญ

var objSt = {}var objBk = {}console.log(valSt)console.log(valBk)// Satang Pro (กำหนดให้เป็น Float)objSt.lastPrice = parseFloat(valSt.lastPrice) // ราคาล่าสุดobjSt.highPrice = parseFloat(valSt.highPrice) // ราคาสูงสุดobjSt.lowPrice = parseFloat(valSt.lowPrice) // ราคาต่ำสุดobjSt.changePrice = parseFloat(valSt.priceChange).toFixed(2) // ราคาเปลี่ยนแปลงปัจจุบัน และกำหนด 2 decimal// Bitkub (กำหนดให้เป็น Float)objBk.lastPrice = parseFloat(valBk.last)// ราคาล่าสุดobjBk.highPrice = parseFloat(valBk.high24hr)// ราคาสูงสุดobjBk.lowPrice = parseFloat(valBk.low24hr) // ราคาต่ำสุดobjBk.changePrice = parseFloat(valBk.change).toFixed(2)// ราคาเปลี่ยนแปลงปัจจุบัน และกำหนด 2 decimal

5. รายงานผลผ่าน Flex Message

เรียบร้อยเราก็มาลองตกแต่งให้กลายเป็น Flex Message กัน ซึ่งผมจะใช้ Tool ชื่อ flex-simulator ซึ่งสาเหตุที่ใช้เพราะว่า ตอนนี้เครื่องมือนี้สามารถยิงทดสอบได้จริงๆแล้วนั้นเอง

ตัวอย่าง Send Message หาตัวเอง

ผมก็เลือกจาก Template ที่เขามีให้ หรือใครสะดวกจัดสวยๆ สามารถแต่งได้เอาที่ชอบได้เลย แล้วอย่าลืมเอามาแชร์ผมด้วยนะครับ

ในที่นี้ผมเลือก “Receipt”

เรามาลองปรับกันเล่นๆดูว่าจะสวยหรือไม่นะครับ ฮาๆ

พอใช้ได้ลองเอาไปใช้ดูนะครับกดตรงปุ่ม “View as a JSON” นะครับ ก็กด Copy โลด

โอเครคราวนี้มาดู Code เต็มๆกันครับ

ก็จะได้หน้าตาแบบนี้เลย

เพื่อนๆก็จะสามารถนำไปประยุกต์ใช้ได้เลยครับ

จบไปแล้วครับกับ Part 1 ง่ายใช่มั้ยครับไว้เรามาต่อกันที่ Part 2

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

--

--

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