แจ้งเตือนจาก fastlane ไป Line Messaging API

Wasith T. (Bai-Phai)
odds.team
Published in
3 min readApr 18, 2019

พอดีในทีมใช้ไลน์กันเยอะมาก (เป็นโซเชียวเดียวทีบริษัทเปิดให้ใช้) แล้ว jenkins dashboard ก็ไม่ค่อยมีคนดู เราเลยปรับตัวเองเข้าหา user (user ในที่นี้ก็ทีมหนะแหละ) โดยการแจ้งเตือนไปในไลน์กลุ่ม

ถ้าใครยังไม่รู้จัก fastlane ให้ไปอ่าน

ถ้าใครเป็นเรื่อง Line Messaging API อยู่แล้วให้เลื่อนข้ามลงไปหา เพิ่ม fastlane plugin ได้เลย

ขั้นตอนการหา groupID หรือ userID

เพื่อให้ channel ของ Line ใช้ส่งข้อความให้ถูกคนหรือกลุ่ม

สมัคร

ก่อนอื่นให้เข้าที่ https://developers.line.biz/ เพื่อทำการสมัครเพื่อความง่ายเชื่อว่าทุกคนมีบัญชี Line กันอยู่แล้ว ถ้าไม่มีก็สมัครซ เสร็จแล้วให้ทำการ Login ให้เรียบร้อย

Line Developers Console
  1. เข้าไปจะเจอหน้าตาประมาณนี้ให้กด Create New Provider
  2. ตรง Provider Name กรอกชื่ออะไรก็ได้ตามใจชอบ เช่น I’m Robot
  3. กด Next แล้วก็กด Create เป็นอันเสร็จสิ้น กลับบ้านได้ เอ้ยยังไม่จบ!
หน้า Dashboard ของ Provider

เสร็จแล้วก็จะได้หน้าตามาแบบด้านบน ให้กดที่ Create Channel ตรง Messaging API

ทำการกรอกข้อมูลให้ครบถ้วน

  • App icon: เหมือนรูปโปรไฟล์ในไลน์ (ไม่บังคับ แต่ผมหาวิธีเปลี่ยนทีหลังไม่เจอนะ 555)
  • App name: ชื่อในไลน์ที่เราจะใช้ ได้เต็มที่ 20 ตัวอักษร เปลี่ยนชื่อทีหลังได้ แต่ถ้าเปลี่ยนแล้วต้องรออีก 7 วัน ถึงจะเปลี่ยนใหม่ได้
  • App description: คำอธิบาย ได้ 500 ตัวอักษร
  • Category และ Subcategory: ก็เลือกให้ตรงกับความต้องการ ของเรา ผมเลือก ผู้เชี่ยวชาญ, บุคคลในจินตนาการ
  • Email address: กรอกเมลเราไปก่อน ถ้ามีอะไร Line อาจจะติดต่อเราผ่านทางเมลที่ได้ระบุไว้
  • Privacy Policy URL: เป็น URL ที่เอาไว้ให้ user อ่านเรื่อง นโยบายความเป็นส่วนตัว ไม่ต้องใส่ก็ได้
  • Terms Of Use URL: เป็น URL ของ ข้อตกลงการใช้งาน ไม่ต้องใส่ก็ได้

เสร็จแล้วกด Create จะมีข้อตกลงการใช้งานของฝั่ง Line ขึ้นมาให้เราอ่าน อ่านให้เรียบน้อย แล้วกด “ยอมรับ”

ทำไมมาเป็นภาษาไทยหว่า

กด ยอมรับ แล้วจะมี Terms of Use มาให้อ่านแล้วกดติ๊กเพื่อยอมรับ 2 อัน ยอมรับเสร็จ ก็กด Create ได้เลย

ตั้งค่ายกที่ 1

สร้าง token ให้สามารถส่งข้อความผ่าน channel ได้

  1. พอได้มาแล้วให้กดที่ชื่อ channel ที่เราสร้างขึ้นมา
  2. เลื่อนลงมาหา Messaging settings ตรง Channel access token (long-lived) ให้กดปุ่ม Issue
  3. จะมี dialog ให้เราเลือกจำนวนชั่วโมงที่จะใช้งาน token นี้ได้ ค่าปริยายจะอยู่ที่ 0 ชั่วโมง คือ Token นี้จะใช้ได้จนกว่าจะมีการสร้างใหม่ ถ้าเราเลือกเป็นค่าอื่น ๆ จะได้สูงสุด 24 ชั่วโมง หลังจากได้มาแล้วเก็บเอาไว้ดี ๆ นะครับ

ตั้งค่ายกที่ 2

ต้องใช้ webhooks จะได้รู้ว่าเราต้องยิงเข้าห้อง ID หรือผู้ใช้งาน ID อะไร โดยดู log ผ่าน heroku ฟรี (ใครมีวิธีที่ง่ายกว่านี้มั่ง)

  1. Use webhooks จะเห็นว่า Disabled อยู่ให้กด Edit แล้วเลือก Enabled แล้วกด Update
  2. ให้ไปที่ repo https://github.com/PH9/heroku-print-hook เลื่อลงมาข้างล่าง กด Deploy to Heroku ทำการสมัคร ตั้งค่าให้เรียบร้อย
  3. เอาชื่อมากรอกใน Webhook URL กด Update กด Verify ถ้าขึ้นว่า Success แปลว่ามาถูกทาง
  4. ที่ heroku ให้กดที่ More อยู่ขวาบน เลือก View Logs แล้วพักไว้ก่อน ซึ่งเราอาจจะเห็น logs ก่อนหน้าที่เราได้กด Verify ไป

ตั้งค่ายกที่ 3

ให้ channel เข้าไปในไลน์กลุ่มได้

  1. เลื่อลงมาตรง Allow bot to join group chats จะเห็นว่า Disabled ซึ่งจะทำให้ channel นี้ปฎิเสธการเข้าห้องไลน์กลุ่ม ให้กดที่ Set message
  2. จะเด้งอีกหน้านึงขึ้นมา ให้เลื่อนลงไปหาที่ Chat settings แล้วให้เลือกที่ Allow account to join groups and multi-person chats จะมี dialog แสดงขึ้นมาให้กด OK

ณ จุด ๆ นี้ เท่าที่ลองทดสอบ เหมือนว่าไลน์กลุ่มจะ channel เดียวที่เข้าได้ คงกันบอทสองตัวคุยกัน

ตั้งค่ายกที่ 4

ให้มัน hooks มาที่ heroku ของเรา

  1. เลื่อลงมาอีกตรง Using LINE@ features ตรง Auto-reply messages ให้เลือก Set message แล้วจะเด้งอีกหน้านึงขึ้นมา
  2. ให้ดูตรง Webhooks เลือกเป็น Enabled

เอา ID ของกลุ่ม

หรือของคนที่จะให้ channel แจ้งเข้าไป

กลับไปหน้าเดิมเลื่อนลงมาอีกจะเจอ Bot Informations ให้หยิบมือถือมา scan QR code เพื่อ เพิ่ม channel มาเป็นเพื่อน หรือลงมาอีก จะเจอ Basic ID ซึ่งจะเพิ่มเพื่อนผ่านชื่อนี้ก็ได้ Basic ID บัญชีฟรีไม่สามารถเปลี่ยนได้

พอเพิ่มเพื่อนแล้วลองทักไปหามันดู แล้วไปดูที่หน้า log ของ heroku เราจะเจอ

ซึ่งถ้าเราจะเอาไว้แจ้งรายคนให้ดูตรง userId ใน log แต่ถ้าจะแจ้งเข้ากลุ่มให้ ให้ลาก channel เข้ากลุ่ม แล้วดู log ที่ groupId แล้วจดไว้

fastlane ละนะ

เพิ่ม plugin ใน fastlane

  1. เปิด terminal ที่เราชอบขึ้นมา
  2. พิมพ์ว่า [bundle exec] fastlane add_plugin line_message (ใน [] จะใส่หรือไม่ใส่ก็ได้นะครับ)
  3. ถ้าเราไม่มี Gemfile มันอาจจะถามอะไรนิดหน่อยให้ตอบ y
  4. ไฟล์ Gemfile, Gemfile.lock, fastlane/Pluginfile จะเปลี่ยนไป หรือเพิ่มขึ้นมาถ้าเราไม่มีอยู่ตั้งแต่แรก เพราะเราเพิ่ม plugin line_message เข้าไป

ใช้งาน line_message ใน fastlane

line_message(
api_token: ENV["LINE_MESSAGE_API_TOKEN"],
to: ENV["LINE_MESSAGE_TARGET"],
messages: [{
"type": "text",
"text": "test ๆ"
}, {
"type": "sticker",
"packageId": "1",
"stickerId": "1"
}]
)

ตรง api_token ให้ใส่ token ที่เราได้จาก Channel access token ถ้าจำไม่ได้ กลับไปอ่าน ตั้งค่ายกที่ 1 สามาใช้ environment variable LINE_MESSAGE_API_TOKEN ได้

ตรง to ให้เราใส่ userID หรือ groupID ที่จะส่งข้อความไป สามารถใช้ environment variableLINE_MESSAGE_TARGET ได้

เท่านี้ก่อนลองเรียกใช้ fastlane ดูครับ ว่าส่งข้อความได้หรือป่าว ลองเสร็จแล้วก็เอาไว้ว่างไว้ที่ ที่เหมาะผมเลยครับ

ตัวอย่าง message ที่ใช้กันจริง

สำหรับ sticker list สามารถดูได้ที่

เนื่องจาก code ของ line_message ยังง่อย ๆ อยู่ โดยการเอา messages params ไปแปะทับตาม Line Messaging API เลย หากอยากช่วยพัฒนา ไปช่วยรุมกันได้ที่ https://github.com/PH9/fastlane-plugin-line_message

ถ้าต้องการอ่านเพิ่มเติมเกี่ยวกับ Line Messaging API สามารถไปอ่านได้ที่ https://developers.line.biz/en/reference/messaging-api

คำเตือน

ที่ไล่มาทั้งหมดนี้ เป็นการนำความสามารถของ Line bot มาใช้เป็นตัว notification ซึ่งทางที่ดีควรไปใช้ Line Notify ดีกว่า https://notify-bot.line.me 555

เพราะว่าการที่เรา push ข้อความไปทาง Line Bot ตัวฟรีจะทำได้ 500 ข้อความต่อเดือนเท่านั้น ส่วน Line Nofity จะส่งข้อความได้ 1,000 ข้อความต่อชั่วโมง หรือ 50 ภาพต่อชั่วโมง ซึ่งถือว่าเยอะมาก

และมีคนเขียนบทความไว้แล้ว และทำ lib ให้ fastlane แล้วด้วย ผ่าม ๆ

ในตอนนี้ Line Notify สามารถอยู่ห้องเดียวกับ Line Bot ได้ แต่ต้องเชิญ Line Bot เข้าก่อน แล้วค่อยเชิญ Line Notify

ขอบคุณหนุ่ยกับพี่สิน (http://sinj.menaruchi.com) มา ณ ที่นี้ด้วยนะครับ

สวัสดีครับ -/\-

--

--

Wasith T. (Bai-Phai)
odds.team

ตบมือเป็นกำลังใจให้ผมด้วยนะครับ 😘