LINE Notify สร้าง Token แจ้งเตือนแยกรายคน

LINE มี API สำหรับให้เรารับการแจ้งเตือนแบบง่ายๆ จากบริการต่างๆที่เราต้องการรับการแจ้งเตือน โดยบริการเหล่านั้นจะส่งข้อความง่ายๆ มาหาเรา และมี Chat bot ตัวนึงชื่อ LINE Notify เป็นคนคุยกับเราแบบ One way

*ใครอยากเริ่มทำเลยให้ข้าม 2 ย่อหน้าด่านล่างนี้เลย
*บทความนี้เหมาะสำหรับผู้ที่มีพื้นฐาน HTML, Javascript หรือเขียนเว็บได้

หลายคนที่ทำเว็บและอยากส่งแจ้งเตือนไปหาลูกค้ามักจะเลือกใช้ LINE Bot ซึ่งผูกกับ LINE Official Account เพราะสามารถส่งได้หลากหลายกว่า และ Customize ได้ตามต้องการ แต่หากต้องการส่งข้อความเช่น อวยพรวันเกิดลูกค้าแยกเป็นคนๆ ก็จะมีปัญหาคือ ไม่อยากให้ผู้ใช้ต้องไปสร้าง Token จากระบบหลังบ้านของ LINE Notify https://notify-bot.line.me/th/ เพราะกังวลในเรื่องความยุ่งยากและอาจทำให้ลูกค้าเลิกใช้บริการซะก่อนที่จะทำสำเร็จ

แต่วันนี้ผมมีวิธีที่ดีกว่านั้นมาบอก

แทนที่เราจะให้ผู้ใช้เป็นคนสร้าง Token ให้เรา โดยมีปุ่มจากเว็บเราที่คลิกแล้วผู้ใช้เลือกได้เลยว่าจะส่งข้อความแจ้งเตือนหาเข้ากลุ่มไหนหรือบัญชีตัวเองก็ได้ วิธีนี้จะทำให้ลูกค้าไม่ต้องเข้าเว็บของ https://notify-bot.line.me/th/ ก่อนเพื่อที่จะกดสร้าง Token ซึ่งเราจะเขียนโปรแกรมเชื่อมต่อกับ LINE ให้ผู้ใช้เลือกปลายทางในคลิกเดียว เหมือนไม่ได้ออกไปจากเว็บเราเลย พอเสร็จแล้วเราก็จะได้ Token กลับมาเก็บไว้ ถึงตอนที่จะต้องส่งแจ้งเตือนเช่น สถานะคำสั่งซื้อสินค้าของลูกค้า ก็ส่งโดยใช้ Token ดังกล่าว

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

  1. ขั้นแรกให้เราเข้าไปลงทะเบียนบริการของเรากับ LINE Notify ก่อน ไปที่เมนู การจัดการบริการที่ลงทะเบียน แล้วคลิกลงทะเบียนบริการ หรือที่ https://notify-bot.line.me/my/services/new จากนั้นป้อนข้อมูลลงในแบบฟอร์ม โดยช่อง Callback URL จะเป็น URL ที่จะใช้ตรวจสอบว่าแหล่งที่มาของการเชื่อมต่อตรงกับที่ลงทะเบียนไว้หรือไม่ และยังใช้เป็น URL สำหรับ Redirect กลับไปหาเราเมื่อผู้ใช้เลือกปลายทางเสร็จ และเมื่อกรอกแบบฟอร์มเสร็จให้คลิก ตกลงและดำเนินการต่อ ด้านล่างได้เลย จากนั้นก็จะได้
เข้าหน้าจัดการบริการ เพื่อลงทะเบียนบริการของเรา

เมื่อเสร็จแล้วจะได้ Client ID และ Client Secret สำหรับใช้เพื่อเชื่อมต่อกับ LINE Notify

หน้าแสดงข้อมูลบริการ

2. ขั้นต่อไปเราจะเริ่มเขียนโปรแกรมกันละ โดยขั้นตอนการทำงานจะเป็นดังนี้

ผู้ใช้คลิกปุ่มเชื่อมต่อ LINE Notify บนเว็บไซต์เรา → เข้าสู่ระบบ LINE →ผู้ใช้เลือกกลุ่มหรือส่งหาตัวเอง→ Redirect กลับมายังเว็บเรา (URL ที่กำหนดใน Callback URL) พร้อม code → นำโค้ดที่ได้ POST ไปยัง /oauth/token → ได้รับ access_token เพื่อใช้ส่ง Notification

ตัวอย่างโค้ดลิงค์ให้ผู้ใช้คลิกเพื่อเชื่อมต่อ LINE Notify

<a href="https://notify-bot.line.me/oauth/authorize?response_type=code&client_id=<client_id>&redirect_uri=<callback_url>&scope=notify&state=<client_secret>">
รับการแจ้งเตือนผ่าน LINE Notify
</a>

GET https: //notify-bot.line.me/oauth/authorize
Response https://<callback_url>/?code=<code>&state=<state>

Parameter ที่ได้รับตอบกลับ ซึ่งจะอยู่กับ Callback URL
code string A code for acquiring access tokens
state string Directly sends the assigned state parameter

เมื่อผู้ใช้คลิกที่ปุ่มนี้แล้วจะปรากฎหน้าให้เข้าสู่ระบบ ซึ่งหลังจากเข้าสู่ระบบแล้วจะแสดงหน้าสำหรับออก Token เพื่อรับการแจ้งเตือน แล้วคลิกเห็นด้วยและเชื่อมต่อ

จากนั้นระบบจะ Redirect กลับมายังเว็บของเรา (ตามที่ระบุใน Callback URL) พร้อม code สำหรับขั้นตอนต่อไป

ตัวอย่างโค้ดสำหรับขอ access_token

const formdata = {
grant_type:'authorization_code',
code: <code>,
redirect_uri: '<callback_url>',
client_id:'<client_id>',
client_secret:'<client_secret>'
};const params = Object.keys(formdata).map((key) => {
return encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);
}).join('&');fetch('https://notify-bot.line.me/oauth/token', {
method: 'POST', // or 'PUT'
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: params
})
.then(response => response.json())
.then(data => {
console.log(data.code);
})
.catch((error) => {
console.error('Error:', error);
});

ค่าที่จะได้รับเมื่อ POST สำเร็จ เป็น JSON

access_token string
An access token for authentication. Used for calling the notification API.

หมายเหตุ
*access_token นี้จะไม่มีวันหมดอายุ จนกว่าผู้ใช้จะยกเลิก

หลังจากนี้เราก็เก็บ access_token ไว้กับข้อมูลของผู้ใช้คนนั้น เมื่อถึงเวลาจะส่งแจ้งเตือนหาผู้ใช้ก็ให้ POST ไปที่ https://notify-api.line.me/api/notify

Headers
– Content-Type application/x-www-form-urlencoded
– Authorization Bearer <access_token>

Request Body

message จำเป็น — ขัอความที่ต้องการส่งแจ้งเตือน
imageThumbnail ไม่จำเป็น — สำหรับใส่ภาพ thumbnail ไปด้วย ขนาดไม่เกิน 240×240px JPEG
imageFullsize ไม่จำเป็น — สำหรับใส่ภาพขนาดเต็ม ขนาดไม่เกิน
2048×2048px JPEG
imageFile ไม่จำเป็น — สำหรับ upload file ไปที่ LINE Server เป็น png, jpg
stickerPackageId ไม่จำเป็น — PackageId ของ Sticker
stickerId ไม่จำเป็น — Id ของ Sticker
notificationDisabled ไม่จำเป็น — ไว้กำหนดว่าจะให้แจ้งเตือนไหมเมื่อส่งข้อความ เป็น true (ไม่แจ้งเตือน) หรือ false (แจ้งเตือน)

ตัวอย่างการส่ง LINE Notify

$ curl -X POST -H 'Authorization: Bearer <access_token>' -F 'message=foobar' \ https://notify-api.line.me/api/notify {"status":200,"message":"ok"}

เพียงเท่านี้ก็สามารถส่งแจ้งเตือนแยกเป็นแต่ละคนได้แล้ว ทีนี้สวัสดีปีใหม่ หรือวันเกิดก็ทำได้ง่ายๆด้วย LINE Notify

Tips

ตรวจสอบว่า access_token ยังใช้งานได้อยู่ไหม
GET https://notify-api.line.me/api/status

ยกเลิกการเชื่อมต่อ
POST https://notify-api.line.me/api/revoke

อ้างอิง