เล่นบริการ Line API ด้วย Golang EP.1

Prisan Pimprasan
5 min readApr 12, 2020

--

สวัสดีครับ วันนี้ผมจะมาพูดถึง Line API ที่ได้ให้บริการมากมาย เช่น messaging API , Line Login ฯลฯ จริงๆมีมากมายแตกออกไปอีกเยอะ ถ้าให้ผมบอก คงบอกไม่หมด แน่นอน

ในบทความนี้ผมจะมา พูดถึงความสามารถของ Messaging API ที่นิยมนำไปใช้งานกัน วันนี้ในตัวอย่างที่มาสอน คือ

การทำ Chatbot พร้อมกับดึง Profile ของ User แต่ละคนออกมาพร้อมกัน ทำยังไง

ในบทความนี้ต้องมีพื้นฐานอะไรบ้าง

  • เคยเขียน Golang มาก่อน เข้าใจเรื่อง Struct , Echo หรือ พื้นฐาน golang
  • รู้จัก Line Dev ที่ให้บริการ เช่น Messaging , Notify , Login ฯลฯ
  • การใช้งาน ngrok เบื้องต้น

การส่ง Event จาก Line

ผมจะมาอธิบายส่วนของ Messaging API ว่าการรับ event ก่อนว่า ณ ปัจจุบัน Line มี event แบบไหนบาง รับมาเป็นอะไรและควรตอบเป็นอะไรไป Line จะมีการส่ง event ในรูปแบบของ Json จาก channel จะมีที่ใช้ 6 รูปแบบ (ที่เราได้เล่นอยู่ ณ ปัจจุบัน )คือ

  • Event Type แบบ Text
  • Event Type แบบ Postback
  • Event Type แบบ Sticker
  • Event Type แบบ Location
  • Event Type แบบ Image
  • Event Type แบบ Audio

ในที่นี้เราจะใช้ แต่ Text ก่อนนะครับ ไว้มีโอกาศจะพาทำต่อ ^^

การส่ง Event กลับไปที่ Line

Line ณ ปัจจุบัน หลักๆจะมีรับ Message อยู่ 2 แบบที่นิยมใช้ คือ

  • แบบ ReplyMessage
  • แบบ PushMessage

แบบ ReplyMessage คือ การตอบข้อความกลับผ่าน ReplyToken ที่มาพร้อมกับ events ที่ส่งเข้ามา แต่ ReplyToken จะมีอายุได้แต่ 30 วินาที ต้องใช้ทันทีเมื่อเข้ามา และสามารถส่งข้อความต่อเนื่องได้ 5 ข้อความต่อ 1 ReplyToken

แบบ PushMessage คือ การตอบข้อความกลับแบบ อิสระ คือจะให้ตอนไหนก็ได้ ส่วนมากจะนิยมนำมาทำ Broadcast ให้สำหรับ User ที่เราต้องการ แต่ก็สามารถนำมาใช้งานได้อยู่ที่สายงาน แต่ควรระวังเพราะการใช้ PushMessage จะมี Rate limit อยู่

และในบทความนี้เราจะเน้นการใช้ API เป็นหลักจะไม่ได้ใช้ Lib Line สำหรับ Golang ทั้งสิ้น

เรามาเริ่มกันเลย

ลำดับแล้ว เราต้องมาสร้าง Struct Golang ของ event เข้าและก็ออกของ Line กันก่อนดังนี้

ส่วนแรก จะเป็น Event ที่เข้าจาก Webhook เมื่อเรานำไปต่อกับ Line

ส่วนที่ 2 จะเป็นส่วนสร้าง Event ส่งไปที่ API ของ Replytoken

เมื่อเราสร้าง Struct เรียบร้อยแล้วเราก็มาส่วนของ Webhook ที่ผมได้ทำขึ้นไว้ให้แล้ว

ใน นี้จะมี 2 function คือ func main กับ func replyMessageLine ทั้ง 2 function นี้จะแบ่งการทำงานกัน main จะเป็นส่วนของ webhook การรับ event มาแล้วนำ event มา Build ค่าใน struct ที่เรากำหนดชื่อ LineMessage ที่เราได้สร้างไว้ จากนั้นก็ค่า ที่เรา build เข้าใน struct มาสร้าง struct Text และ ReplyMessage ต่อ

เมื่อเราสร้าง struct Text ที่เรากำหนดค่า และนำ struct Text มาเพิ่มใน struct ReplyMessage เรียบร้อยแล้ว จากนั้นก็ส่งค่า struct ทั้งหมดไปที่ replyMessageLine() เพื่อนำข้อความส่งต่อไปที่ Line

เมื่อนำโค้ดทั้งหมดมาประกอบแล้วเราก็ไปที่ Line Dev เพื่อไปสร้าง Token Messaging ของ Line เพื่อใช้งาน สำหรับใครที่ยังไม่ได้สร้างดูจากบทความนี้ได้ครับ

เมื่อเราทำการ สมัคร Line Dev ที่นี้ https://developers.line.biz/ เรียบร้อยแล้วให้ทำการสร้าง Providers ให้เรียบร้อยเมื่อเราสร้าง Providers แล้วให้เลือก Providers ที่เราจะสร้างเสร็จ จากนั้นเรามาสร้าง Service พร้อมกับ Token กันเลย

ให้คลิกที่ Create a new Channel

จากนั้นเลือกที่ Messaging API

กรอกข้อมูลต่างๆให้ครบครับ

เมื่อกรอกเสร็จให้ติก 2 อันแล้วกด Create ครับ

เมื่อกด Create แล้วจะมีข้อความรายละเอียดการใช้การของ Messaging ครับ อ่านให้ครบแล้วก็กด ยอมรับ ครับ

เมื่ือกดเรียบร้อยแล้วให้มาที่เมนู Messaging API เพื่อสร้าง Token และต่อ Webhook

ให้มากดสร้าง Channel access token โดยกด issue จากนั้นจะมี Token ขึ้นมาให้ทำการ copy token มาครับ

จากนั้นไปที่ Code ครับแล้วนำ Token ที่ได้มาใส่ที่ ChannelToken ครับ

จากนั้นทำการ รัน Go ครับด้วยครับสั่งต่อไปนี้ครับ แนะนำว่าให้สร้างใน Go/src ของแต่ละ OS ดีกว่า

สั่งที่ใช้จะมีประมาณนี้ครับ

  • export GO111MODULE=on
  • go mod init
  • go mod tidy
  • go run main.go

กดตามนี้เลยครับ ทั้ง 4 คำสั่งเพื่อรัน go ในรูปแบบ go module อ่าน go module ได้ที่นี้

เมื่อรันขึ้นมา port ที่ go จะเป็น 1323 ซึ่งเราสามารถที่จะแก้ไขได้ว่าจะใช้ port ไหน

เมื่อรันขึ้นมาได้แล้ว ให้ใช้ ngrok ทำการเปิดเชื่อมต่อ ระหว่าง localhost > https ที่ ngrok ให้บริการครับ แล้วนำ https ที่ ngrok ได้ให้มาไปต่อกับ Line (ทั้ง go และ ngrok ต้องรันด้วยกัน อยู่คนละ terminal ก็ได้ )

กลับมาที่ Line ครับไปที่ Messaging API เหมือนเดิม เลือกที่ Webhook เพื่อจะต่อ ngrok กับ Line กด Edit

ใส่ Url ที่เราได้มาแล้วเพิ่ม path url ตามหลังไปด้วยว่า webhook

เมื่อเราใส่แล้วให้ทำกด Update แล้วกด Verify ให้เรียบร้อยมันจะทำการเชื่อมต่อ event ไปที่ webhook เราเมื่อมีข้อความ Success แล้วให้กด Use webhook ให้ขึ้นสีเขียว

เมื่อผ่านขึ้นตอนนี้แล้วให้ทำแอด Bot ที่เราสร้างขึ้นมาครับ เมื่อแอดแล้วจะมี ข้อความแสดงขึ้นมาพร้อมกับ Greeting ที่ Line ได้เปิดใช้งานไว้

จากนั้นเราจะปิดทุกอย่างที่ Line เปิดให้ใช้ครับ เราจะใช้แค่ event อย่างเดียว ตามเมนูครับ

แล้วเลือก Disabled ที่เราไม่ใช้คือ Greeting message , Auto-response

ลองทักบอทไปอีกทีครับ จะเห็นว่า จะไม่มีข้อความ Greeting ที่ Line ได้ตั้งให้ใช้ไว้

ในที่สุดบอทเราก็สามารถเชื่อมต่อกับ Golang ได้แล้ว โดยที่ผมกำหนดว่า ถ้าเราทักมาคำไหนให้มันตอบไปแบบนั้นครับ ที่นี้ผมจะเพิ่ม เรื่อง GetProFile ของ User ที่เราบอทกำลังคุยเช่นว่า ถ้า User ทักมาคุยกับบอทเราให้มันขึ้นชื่อไปด้วย

เราจะต้องสร้าง strcut Profile ก่อนครับจะเป็นแบบนี้ครับ

เมื่อเราได้แบบนี้แล้ว ก็มาสร้าง func getProfile กันครับ function ผมจะเขียนประมาณนี้ครับ โดยที่ผมจะทำการนำ userId ยิงไปที่ api profile ของ Line แล้ว return แค่ชื่อออกมาจาก function getProfile

จากนั้นก็นำไปใช้ใน main ครับ โดยส่ง UserId มาเท่านั้นและเพิ่มไปที่ message ที่จะออกมาครับ

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

เป็นไงบางครับสำหรับบทความนี้ก็หอมปากหอมคอกันไปก่อนนะครับ บทความหน้าผมจะพาประยุกต์กับ Sticker , Images ฯลฯ ต่างๆที่ Line ได้ให้บริการครับ รวมไปถึงการใช้งานกับ Notify ว่าเราจะมาใช้งานยังไงดี

สำหรับบทความนี้ ถ้ามีประโยชน์แก่ท่าน ก็ขอบคุณด้วยนะครับ ฝากติดตามบทความใหม่ๆของเราได้นะครับ ขอบคุณนะครับผม สามารถนำไปประยุกต์ต่อได้ครับ

--

--