← กลับไปยังบทความทั้งหมด
การพัฒนา

พัฒนาระบบเชื่อมต่อ LINE: LINE Login, LINE Notify, และ LINE Messaging API

อนุชา วังราช··12 นาที
#LINE API#การพัฒนา#ระบบ

ในไทย LINE มีผู้ใช้มากกว่า 50 ล้านคน เกือบทุกคนที่ใช้สมาร์ทโฟนมี LINE การเชื่อมต่อระบบของเราเข้ากับ LINE จึงเป็นสิ่งที่ลูกค้าส่วนใหญ่ต้องการ บทความนี้จะอธิบาย 3 วิธีหลัก พร้อมตัวอย่างโค้ดจริง

1. LINE Login

ให้ผู้ใช้ล็อกอินเว็บหรือแอพของคุณด้วยบัญชี LINE ไม่ต้องสมัครใหม่ สะดวกและรวดเร็ว

ขั้นตอนการทำงาน:

  1. ผู้ใช้กดปุ่ม "Login with LINE" บนเว็บคุณ
  2. LINE แสดงหน้ายินยอมการเข้าถึงข้อมูล
  3. ผู้ใช้กดยินยอม → LINE ส่ง authorization code กลับมา
  4. เซิร์ฟเวอร์ของคุณแลก code เป็น access token
  5. ใช้ 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? ทักปรึกษาผม ได้เลย หรือดู บริการพัฒนาระบบ ที่ผมรับทำ