พัฒนาระบบเชื่อมต่อ LINE: LINE Login, LINE Notify, และ LINE Messaging API
ในไทย LINE มีผู้ใช้มากกว่า 50 ล้านคน เกือบทุกคนที่ใช้สมาร์ทโฟนมี LINE การเชื่อมต่อระบบของเราเข้ากับ LINE จึงเป็นสิ่งที่ลูกค้าส่วนใหญ่ต้องการ บทความนี้จะอธิบาย 3 วิธีหลัก พร้อมตัวอย่างโค้ดจริง
1. LINE Login
ให้ผู้ใช้ล็อกอินเว็บหรือแอพของคุณด้วยบัญชี LINE ไม่ต้องสมัครใหม่ สะดวกและรวดเร็ว
ขั้นตอนการทำงาน:
- ผู้ใช้กดปุ่ม "Login with LINE" บนเว็บคุณ
- LINE แสดงหน้ายินยอมการเข้าถึงข้อมูล
- ผู้ใช้กดยินยอม → LINE ส่ง authorization code กลับมา
- เซิร์ฟเวอร์ของคุณแลก code เป็น access token
- ใช้ token ดึง profile (ชื่อ, รูป, email ถ้ามีสิทธิ์)
ตัวอย่างโค้ด (Next.js API Route):
// app/api/auth/line-callback/route.ts
import { NextResponse } from 'next/server'
export async function POST(req: Request) {
const { code } = await req.json()
// แลก code เป็น access token
const tokenRes = await fetch('https://api.line.me/oauth2/v2.1/token', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
grant_type: 'authorization_code',
code,
client_id: process.env.LINE_CHANNEL_ID!,
client_secret: process.env.LINE_CHANNEL_SECRET!,
redirect_uri: process.env.LINE_CALLBACK_URL!,
}),
})
const { access_token } = await tokenRes.json()
// ดึง profile ผู้ใช้
const profileRes = await fetch('https://api.line.me/v2/profile', {
headers: { Authorization: 'Bearer ' + access_token },
})
const profile = await profileRes.json()
// profile = { userId, displayName, pictureUrl, statusMessage }
// สร้าง session ในระบบของเรา
// ... บันทึกลง database หรือสร้าง JWT
return NextResponse.json({ user: profile })
}
ข้อควรรู้:
- ต้องสมัคร LINE Developers Console เพื่อรับ Channel ID และ Secret
- เลือก scope ที่จำเป็น:
profile,openid,email - ใช้ PKCE (Proof Key for Code Exchange) เพื่อความปลอดภัยเพิ่มขึ้น
- Token มีอายุ 30 วัน ต้อง refresh ถ้าใช้ต่อ
2. LINE Notify
ส่งข้อความแจ้งเตือนไปยัง LINE ของผู้ใช้หรือกลุ่ม เป็นวิธีที่ง่ายที่สุด ไม่ต้องสร้างบอท
ตัวอย่างโค้ดส่งข้อความ:
// ส่งแจ้งเตือนไปยัง LINE
async function sendLineNotify(token: string, message: string) {
const res = await fetch('https://notify-api.line.me/api/notify', {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + token,
'Content-Type': 'application/x-www-form-urlencoded',
},
body: new URLSearchParams({ message }),
})
if (!res.ok) {
const error = await res.json()
console.error('LINE Notify error:', error)
throw new Error('ส่ง LINE Notify ไม่สำเร็จ')
}
return res.json()
}
// ตัวอย่าง: แจ้งเตือนออเดอร์ใหม่
await sendLineNotify(
process.env.LINE_NOTIFY_TOKEN!,
'
📦 ออเดอร์ใหม่ #1234
ลูกค้า: คุณสมชาย
ยอดรวม: ฿1,250
สถานะ: รอยืนยัน'
)
Use Case ที่ใช้จริง:
- ระบบจองคิว → แจ้งเตือนวันนัด 1 ชม. ก่อน
- ระบบขาย → แจ้งออเดอร์ใหม่ให้พนักงานในกลุ่ม
- ระบบ monitor → แจ้งเตือนเมื่อเซิร์ฟเวอร์ล่ม หรือ disk เต็ม
- ระบบการเงิน → แจ้งยอดโอนเข้า ยอดขายรายวัน
ข้อจำกัด: ส่งได้ 1 ข้อความต่อวินาทีต่อ token และจำกัด 1,000 ข้อความต่อวัน
3. LINE Messaging API
สร้างแชทบอทหรือระบบตอบกลับอัตโนมัติบน LINE เป็นวิธีที่ทรงพลังที่สุด
ตัวอย่าง Webhook รับข้อความและตอบกลับ:
// app/api/line-webhook/route.ts
import { NextResponse } from 'next/server'
export async function POST(req: Request) {
const body = await req.json()
// ตรวจสอบ signature เพื่อความปลอดภัย
// (ใช้ crypto.verify กับ X-Line-Signature header)
const events = body.events
for (const event of events) {
if (event.type === 'message' && event.message.type === 'text') {
const userMessage = event.message.text
const replyToken = event.replyToken
// ตอบกลับข้อความ
await fetch('https://api.line.me/v2/bot/message/reply', {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + process.env.LINE_CHANNEL_ACCESS_TOKEN,
'Content-Type': 'application/json',
},
body: JSON.stringify({
replyToken,
messages: [{
type: 'text',
text: 'คุณพิมพ์ว่า: "' + userMessage + '"',
}],
}),
})
}
}
return NextResponse.json({ status: 'ok' })
}
ประเภทข้อความที่ส่งได้:
- Text — ข้อความธรรมดา
- Image/Video — ส่งรูปหรือวิดีโอ
- Sticker — สติกเกอร์ LINE
- Flex Message — การ์ดสวยๆ มีรูป ปุ่ม ข้อความ
- Template — ปุ่มเลือก ยืนยัน รายการ
- Quick Reply — ปุ่มตอบกลับด่วน
ตัวอย่าง Flex Message สวยๆ
// ส่งใบเสร็จในรูปแบบ Flex Message
const flexMessage = {
type: 'flex',
altText: 'ใบเสร็จออเดอร์ #1234',
contents: {
type: 'bubble',
body: {
type: 'box',
layout: 'vertical',
contents: [
{ type: 'text', text: 'ใบเสร็จ', weight: 'bold', size: 'xl' },
{ type: 'text', text: 'ออเดอร์ #1234', color: '#999999' },
{ type: 'separator', margin: 'md' },
{ type: 'text', text: 'ข้าวผัดกุ้ง x1', margin: 'md' },
{ type: 'text', text: '฿120', align: 'end' },
{ type: 'text', text: 'ชาเย็น x2', margin: 'md' },
{ type: 'text', text: '฿90', align: 'end' },
{ type: 'separator', margin: 'md' },
{ type: 'text', text: 'รวมทั้งสิ้น', weight: 'bold', margin: 'md' },
{ type: 'text', text: '฿210', weight: 'bold', align: 'end' },
],
},
},
}
Use Case จริงที่ผมเคยทำ
ระบบจองคิวคลินิก
ลูกค้าจองผ่านเว็บ → ระบบส่ง LINE Notify ยืนยันการจองพร้อมรายละเอียด → ก่อนนัด 1 ชม. ส่งแจ้งเตือนอีกครั้ง → พนักงานเห็นคิวใหม่ในกลุ่ม LINE ของคลินิก → ลูกค้ายกเลิกผ่านบอทได้
ระบบสั่งอาหารร้านอาหาร
ลูกค้าสั่งผ่านเว็บ → ครัวได้รับ Flex Message ในกลุ่ม LINE ทันที มีรายการอาหาร โต๊ะ หมายเหตุ → พิมพ์ใบสั่งอัตโนมัติ → อัปเดตสถานะผ่านระบบ → ลูกค้าได้รับแจ้งเมื่ออาหารเสร็จ
ข้อควรระวัง
- Rate Limit — Messaging API ส่งได้ 200 ข้อความ/วัน (แบบฟรี) ต้องอัปเกรดถ้าส่งเยอะ
- Token Security — เก็บ Access Token และ Channel Secret ใน environment variable อย่า hardcode ในโค้ด
- Webhook Verification — ต้องตรวจ signature ทุกครั้ง ไม่งั้นคนอื่นส่ง webhook ปลอมมาได้
- User Consent — ต้องขออนุญาตผู้ใช้ก่อนส่ง Push Message (ไม่ใช่ Reply)
- GDPR/PDPA — ข้อมูลผู้ใช้จาก LINE ต้องเก็บให้ปลอดภัย และลบเมื่อผู้ใช้ขอ
สรุป: LINE API เป็นเครื่องมือทรงพลังสำหรับธุรกิจในไทย เลือกใช้แบบที่เหมาะกับงาน — Notify สำหรับแจ้งเตือนง่ายๆ, Login สำหรับลดขั้นตอนสมัคร, Messaging API สำหรับแชทบอทและ Flex Message สวยๆ
📌 อยากเชื่อมระบบเข้ากับ LINE? ทักปรึกษาผม ได้เลย หรือดู บริการพัฒนาระบบ ที่ผมรับทำ