← Back to list

พัฒนา LINE Messaging API — ด้วย .NET

ซีรี่ย์: LINE API x Generative AI for .NET Developers ตอนที่ 2

Ponggun in T. T. Software Solution · 2025-06-22 17:22 · 14 claps · 9.0 min read
#line #line-developer #line-developers-thailand #aspnet #aspnetcore
Open on Medium ↗
Wiki topics: AI · AI · General

พัฒนา LINE Messaging API — ด้วย .NET

ซีรี่ย์: LINE API x Generative AI for .NET Developers ตอนที่ 2

รวมบทความชุด

ในบทความที่แล้วเราได้รู้จักภาพรวมการสมัครใช้งาน Line Platform เพื่อสร้าง Channel ID / Secret เพื่อเตรียมเอามาใช้กับ Line Messenging API กันแล้วนะครับ

รายการบทความที่เกี่ยวข้อง

  1. เริ่มต้นกับ LINE Messaging API — for .NET Developers
  2. พัฒนา LINE Messaging API — ด้วย .NET (บทความนี้)

บทความนี้ทำอะไรกันดี

เราจะมาพัฒนา Webhook และการใช้งาน Line Messaging API ด้วยองค์ประกอบตามนี้นะครับ

  • สอนพัฒนา Webhook ด้วย .NET และ Clean Architecture
  • เก็บ Log ลงไฟล์สำหรับ Debug
  • เชื่อมต่อ PostgreSQL เพื่อเก็บ Event ที่รับส่งกับ LINE (monitor และ trace ได้)
  • เชื่อม LINE API อย่างปลอดภัยด้วยการ verify webhook signature
  • ทดลองรับ/ส่ง Event กับ LINE ผ่าน Webhook จริงใน Developer Console
  • ตอบกลับผู้ใช้อย่างปลอดภัยด้วย Stateless Channel Access Token
  • แอบมีแนะนำแนวทางศึกษา Clean Architecture แบบเร็วๆที่ผมเคยทำสรุปไว้ด้วยจ้า

เราจะมาค่อยๆทำให้ขั้นตอนในภาพนี้ดำเนินไปด้วยกันนะครับ

เราจะมาค่อยๆทำให้ขั้นตอนในภาพนี้ดำเนินไปด้วยกันนะครับ

Video ในบทความครับ

ผมเตรียมสอนมาแบบ Video ให้ด้วยครับ เพราะอยากเน้นเรื่องการอธิบาย Code ที่จะทำได้ละเอียดกว่าในบทความครับผม เลยอยากฝากติดตามเพิ่มเติมนะครับ

[embed]

เกริ่นนำเรื่อง Clean Architecture

เนื่องจากในบทความนี้ใช้แนวทาง Clean Architecture ในการพัฒนาระบบนะครับ ถ้าผู้อ่านสนใจศึกษาเรื่องนี้ไวๆ ผมทำสรุปไว้ให้ที่นี้นะครับ

[embed]Part 1: https://www.youtube.com/watch?v=s5CqkV4VOwo

[embed]Part 2: https://www.youtube.com/watch?v=CTfW86Nz5OY

อธิบาย Line Messaging API

Messaging API ของ LINE คือเครื่องมือที่ช่วย “เชื่อมต่อระบบของเราเข้ากับ LINE แบบสองทาง (2‑way)” หรือก็คือ ระบบของเราสามารถรับข้อความหรืออีเวนต์จากผู้ใช้บน LINE และตอบกลับหรือส่งข้อความ/แจ้งเตือนไปยังผู้ใช้ได้ทันทีแบบอัตโนมัติ

หลักการทำงานเบื้องต้น

#1: User ส่งข้อความถึงบอท

  • เมื่อผู้ใช้ส่งข้อความหาบอท LINE → ข้อมูลจะถูกส่งถึงระบบของเรา
  • ในขั้นตอนนี้เราจะได้สิ่งที่เรียกว่า Reply Token ส่งมาที่ระบบเราด้วย ซึ่งเราสามารถนำมาใช้เพื่อส่งข้อมูลกลับมาผู้ใช้ตาม Reply Token ของผู้ใช้ที่ได้ส่งข้อความมาให้เรา

#2: บอทส่งข้อความกลับหาผู้ใช้

  • เมื่อเรานำข้อความของลูกค้ามาประมวลผลเสร็จแล้ว เราสามารถใช้ Reply Tokenเพื่อตอบกลับผู้ใช้หลังได้รับข้อความ
  • ไม่เสียเงิน (ฟรี) สำหรับการตอบกลับแบบนี้

#3: บอทส่งข้อความแจ้งเตือน (Push/Boardcast)

  • หากบอทต้องการส่งข้อความหาผู้ใช้แบบไม่ได้รอผู้ใช้พิมพ์ก่อน (Push/Boardcast) เช่น แจ้งข่าว แจ้งเตือน ส่งโปรโมชัน
  • เสียเงิน (คิดค่าใช้จ่ายตามจำนวนข้อความและแพ็คเกจของ LINE OA

https://developers.line.biz/en/services/messaging-api/

https://developers.line.biz/en/services/messaging-api/

ตัวอย่างค่าใช้จ่าย

ตัวอย่างการคำนวณราคา LINE OA แบบ “เบสิก” ถ้าส่งเกินไป 1,000 ข้อความ

  • ราคาแพ็กเกจเบสิก: 1,280 บาท/เดือน
  • จำนวนข้อความบรอดแคสต์ที่รวมในแพ็กเกจ: 15,000 ข้อความ
  • ราคาต่อข้อความที่เกิน: 0.10 บาท/ข้อความ

ถ้าคุณส่งทั้งหมด 16,000 ข้อความ (เกิน 1,000 ข้อความ):

  1. ค่าแพ็กเกจรายเดือน: 1,280 บาท
  2. ข้อความส่วนที่เกิน: 1,000 ข้อความ
  3. ค่าใช้จ่ายส่วนเกิน: 1,000 × 0.10 = 100 บาท

รวมที่ต้องจ่าย: 1,280 + 100 = 1,380 บาท (ยังไม่รวม VAT)

รองรับแชทแบบ 1‑on‑1 และในกลุ่ม

  • LINE Messaging API สามารถส่งข้อความได้ทั้งในแชทแบบ 1‑on‑1 และในกลุ่ม
  • ใช้ได้ทั้งกับผู้ใช้ที่เพิ่มบอทเป็นเพื่อนและในห้องแชทกลุ่มที่บอทเข้าร่วม

คำถามคือแล้วเราจะเชื่อมต่อ Line Messaging API นี้เข้ากับ ระบบของเราได้ยังไงกันนะ 🥹

แนวทางนั้นก็คือ “Webhook” นั้นเองครับพี่น้อง

Webhook คืออะไร

Webhook คือกลไกที่ให้ Server ส่งข้อมูลอัตโนมัติเมื่อเกิดเหตุการณ์ (Event) ไปยัง Client หรือระบบปลายทาง ผ่าน URL ที่กำหนดไว้

สรุปขั้นตอนการใช้งาน Webhook :

  1. Client ลงทะเบียน Webhook URL กับ Server — Client ส่ง URL ที่จะรับ Event ไปให้ Server (เรียกว่า “ลงทะเบียน Webhook” หรือ “Register Webhook Event”)
  2. Server บันทึก URL ที่ Client ลงทะเบียนไว้ — Server รู้แล้วว่าต้องแจ้ง Event ไปที่ไหน
  3. เมื่อเกิด Event ที่ Server — Server ส่งข้อมูล Event ไปยัง Webhook URL ของ Client (โดยอัตโนมัติ)
  4. Client รับข้อมูลจาก Webhook — Client ได้รับ Event ผ่าน Webhook ทันที แล้วนำไปประมวลผลต่อ

หมายเหตุ:

  • ต้องมีการยืนยันตัวตน/ความปลอดภัยระหว่าง Server และ Client ด้วยเสมอ
  • Event ไหนที่อยากได้ ต้องลงทะเบียนให้ตรงกับที่ Server รองรับ

ตัวอย่าง SCB Web Hooks

สำหรับบริการจ่ายเงินด้วย QR Code นะครับ ซึ่งเมื่อมีการจ่ายเงินแล้วทาง SCB จะส่งข้อมูลกลับมายังระบบของเรา ซึ่งเราได้ทำการลงทะเบียนไว้กับทาง SCB ว่าให้ส่งข้อมูลเข้ามาที่ช่องทางนี้

medium.com/t-t-software-solution

medium.com/t-t-software-solution

Line Webhook

การใช้งาน Line Messenging API สามารถใช้งานได้ผ่าน Webhook เช่นกันครับ โดยมีขั้นตอนคร่าวๆดังนี้

  1. ผู้ใช้ส่งข้อความหรือเกิด Event ใน Line เช่น พิมพ์ข้อความในแชทกับ Line OA (Official Account)
  2. Line Platform ส่งข้อมูล Event ไปที่ Webhook ของเรา โดย Line Platform จะเรียก HTTP POST มายัง Endpoint (URL) ที่เรากำหนดไว้ในระบบ โดยมี ข้อมูลที่ส่งมา เช่น ข้อความ, userId, เวลา, event type และ Reply Token
  3. ระบบของเรา (Your Bot) ประมวลผล Event และส่งข้อความตอบกลับ (Reply) โดยระบบของเราจะรับข้อมูล webhook แล้วตัดสินใจว่าจะตอบอะไรกลับไปยัง Line Platform ภายในเวลาที่กำหนด
  4. Line Platform ส่งข้อความตอบกลับไปยังผู้ใช้ ซึ่งข้อความที่เราส่งผ่าน Reply API จะไปหาผู้ใช้ในแชททันที

หมายเหตุ:

  • เราต้องลงทะเบียน URL webhook กับ Line ก่อน (ใน LINE Developers Console)
  • ทุก Event จะถูกส่งไปที่ Webhook เสมอ
  • ถ้าต้องการตอบกลับผู้ใช้ ต้องส่งผ่าน Reply API ของ Line ด้วย Reply Token

Messaging API reference

ในส่วนของ Webhook คือ Line ส่งข้อมูลมาให้เรานะครับ แต่ทีนี้เวลาเราอยากจะส่งข้อมูลกลับไปที่ Line บ้างนั้นเราต้องทำผ่าน Messaging API ซึ่งมี Spec ไว้อ้างอิงตามเอกสาร Official ข้างล่างนี้นะครับ

[embed]Messaging API reference The LINE Developers site is a portal site for developers. It contains documents and tools that will help you use our…developers.line.biz

ตัวอย่างการตอบกลับข้อความด้วย **replyToken** ครับ

ในบทความนี้ผมก็อ่าน Spec จากเอกสารนี้เพื่อนำ

มาทดลองส่งข้อมูลกลับไปหาผู้ใช้นะครับ

เตรียม Code ทำ Webhook กันครับ 😎

ให้เรา Clone Repository ของผมลงมาที่เครื่องก่อนนะครับ

[embed]GitHub - ponggun/poc-line-api-part-1-the-beginning Contribute to ponggun/poc-line-api-part-1-the-beginning development by creating an account on GitHub.github.com

ติดตั้ง Docker Desktop

[embed]Docker Desktop Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today…www.docker.com

ศึกษาการติดตั้งใช้งาน Docker Deskop ได้ที่นี้นะคร้าบ

[embed]

ติดตั้ง .NET 8 SDK

[embed]Download .NET 8.0 (Linux, macOS, and Windows) | .NET NET 8.0 downloads for Linux, macOS, and Windows. .NET is a free, cross-platform, open-source developer platform for…dotnet.microsoft.com

ติดตั้ง VS Code Extension — C# Dev Kit

แอบแนะนำให้ติดตั้ง VS Code Extension ชื่อ C# Dev Kit ด้วยนะครับ จะทำให้มี Intellisense, Debugging ได้สะดวกมากๆ

[embed]C# Dev Kit - Visual Studio Marketplace Extension for Visual Studio Code - Official C# extension from Microsoftmarketplace.visualstudio.com

ของพร้อมแล้วให้เปิด VS Code ขึ้นมานะครับ เสร็จแล้วให้เรานำ Channel ID / Secret จากบทความที่แล้วมาใส่ใน Config File ของเราที่ Path

**src/4.Presentation/5.WebApi/appsettings.Development.json**

ดู Secret ใน Line Developer Console นะครับ

https://developers.line.biz/console/

https://developers.line.biz/console/

หลังจากนั้นให้เรารัน Docker Compose เพื่อเปิด Postgresql ซึ่งเราจะใช้เป็นฐานข้อมูลหลักของเรานะครับ ให้รันผ่าน VS Code Task **Run 0. Docker Compose:up** ตามภาพข้างล่างนะครับ

ถ้ารันสำเร็จจะขึ้น Console ประมาณนี้นะครับ

เปิด Docker Desktop จะเจอ Postgresql รออยู่ครับ

เอา DB Connection จาก **docker-compose.yaml** นะครับ

เลือก DB Client Tool ที่เราถนัดได้เลยครับ ส่วนในบทความผมเลือก Dbeaver Community นะครับ ซึ่งใช้งานได้ฟรีและทำงานได้หลากหลายมากครับ

ให้เราระบุ Connection ลงไปแล้วแล้วก็ลองต่อ DB ดูนะครับ

ถ้าได้สำเร็จจะเจอ Database **lineapi** เรียบร้อยครับ

ไม่ต้องแปลกใจที่ยังไม่มีตารางนะครับ เดี๋ยวเราจะทำในขั้นตอนถัดไป

ไม่ต้องแปลกใจที่ยังไม่มีตารางนะครับ เดี๋ยวเราจะทำในขั้นตอนถัดไป

โอเคครับ DB พร้อมแล้วทีนี้ไปเริ่มรัน Code กัน โดยลอง Build Software ดูหน่อยว่าใช้ได้ไหมด้วย VS Code Task Run ตามภาพข้างล่างนะครับ

ถ้า Build สำเร็จจะหน้าตาแบบนี้ครับ

เสร็จแล้วให้เรา Apply Database Migration ด้วย VS Code Task Runเพื่อสร้างตารางไว้เก็บข้อมูลการใช้งาน Line Messenging API กันนะครับ

ถ้ารันสำเร็จจะได้หน้าตาแบบนี้

ลอง Refresh Postgresql อีกทีจะมีข้อมูลตารางมาแล้ววว

เสร็จแล้วใช้ VS Code Task Run อีกครั้งเพื่อรัน Web API ครับ

ถ้ารันได้แล้วจะเจอ Web API รันอยู่ที่ http://localhost:5030/swagger/index.html

เตรียม Postman เพื่อทดสอบการรัน Web ของเรานะครับ โดยนำ Postman Collection ที่ Path ข้างล่างนี้ไป Import ใน Postman

ตรง Tab Variables เราเอาไว้จัดการ Configuration Variable นะครับ ซึ่งเราจะสังเกตุว่าตอนนี้เราระบุ Port ไว้ที่ 5030 เรียบร้อยแล้วครับ

ที่นี้เรามาลองกดรันดูกันครับ โดยเราจะสนใจ 2 Function หลักที่เกี่ยวข้องกับการรับส่ง Line Web Hook อย่างปลอดภัยครับ ซึ่งรายละเอียดจริงๆจะอธิบายในขั้นตอนถัดไปนะครับ

#1: Generate Signature

ทำหน้าที่จำลองการสร้าง Line Signature ที่จะติดมากับ Webhook ครับ ให้เราลองจิ้มรันได้เลย

**{{baseUrl}}/api/LineWebhook/GenerateSignature**

#2: Handle Line Webhook

ช่องทางหลักที่เราจะรับ Webhook จาก Line นะครับ

**{{baseUrl}}/api/LineWebhook/ReceiveHook**

โอเชครับถ้าได้ตามนี้คือเราจำลองการเตรียมรับ Webhook ในเครื่องเราได้แล้วครับ ในขั้นตอนถัดไปเราจะนำ Web ของเราไปเชื่อมกับ Line ครับ

แต่ว่าเราจำเป็นต้องเปิด Public ให้ก่อนครับ โดยเราสามารถใช้ความสามารถของ VS Code Forward Port มาช่วยได้ครับ โดยทำตามขั้นตอนในภาพนะครับ และ Copy Forwarded Address รอไว้ได้เลย

ทดลองใช้งาน Line Webhook

เปิด Line Console และแปะลิ้งได้เลยครับผม

https://developers.line.biz/console

https://developers.line.biz/console

เสร็จแล้วลองกดปุ่ม **Verify** นะครับ ถ้าสำเร็จจะขึ้นว่า Success

แหล่มเลยครับ เท่ากับตอนนี้เราสามารถเชื่อม Line Messaging API เข้ากับระบบเราได้แล้วอย่างสวยงามนะครับ ทีนี้ลอง Add Line OA และส่งข้อความหา Line Bot ของเรากันครับ

ทดลองส่งข้อความหา Bot ของเราครับ ถ้าส่งได้จะพบว่า Bot จะตอบกลับมาด้วยข้อความเดียวกับที่เราส่งไป

ปิด Auto-response messages

เราจะเห็นจากตัวอย่างว่ามีข้อความที่เราไม่ได้ตั้งใจตอบกลับไปด้วยนะครับ ซึ่งมันเป็นข้อความอัตโนมัติซึ่งเราสามารถปิดได้ที่ Line Official Account Manager นะครับ

จิ้มปิดได้เลยครับ

จิ้มปิดได้เลยครับ

ลองส่งข้อความอีกที จะพบว่าเหลือแค่ข้อความของเราจริงๆละ

แจ่ม… ❤️

แจ่ม… ❤️

Monitoring —Postgresql Database

ลองเปิดข้อมูลในตาราง **WebhookEvents เราจะพบว่ามีการเก็บข้อมูล Webhook `“ที่รับ”** มาจาก Line Messaging API ครับ ทำให้เราตรวจสอบได้ว่า Webhook ที่ส่งมาแต่ละครั้งนั้นมีโครงสร้างและข้อมูลยังไงเพื่อใช้ในวิเคราะห์การทำงานต่อไปนะครับ โดยผมใส่ Flag เพิมไปด้วยว่า ถ้าทำงานสำเร็จจะProcessed = True` ครับ เพราะงั้นถ้า Webhook ไหนไม่มี Flag นี้หรือมี Error Message มาแทน เราก็ต้องไปดูต่อว่าทำไมส่งมาที่ระบบเราไม่ได้นะครับ (หรือดูจาก Log File, Console Output ก็ได้ครับ แต่มันดูยากหน่อยเพราะข้อมูลมันหายได้)

ถ้าดูข้อมูลจากตาราง **WebhookResponses จะเห็นข้อมูลการบันทึกว่าเรา `“ส่งข้อมูล”`** อะไรกลับไปที่ Line Messaging API บ้างนะครับ เผื่อบางครั้งส่งไม่สำเร็จเราจะได้มาแกะ Error Message กันต่อว่าเกิดอะไรขึ้นครับ เช่นติด Rate Limited บน Line Messaging API ไหม

Monitoring — Log Files

ผมเตรียม Logs ไว้ให้ใน Path **src/4.Presentation/5.WebApi/Logs **นะครับ เราสามารถดูผลลัพธ์การรับส่งโครงสร้างของ Line Webhook ได้สะดวกมากครับ

Monitoring-Line Platform

เปิด Line Developer Console แล้วเลือก Provider — Line OA เสร็จแล้วเลือก Tab Statistics แล้วเราจะเจอรายละเอียดการส่งข้อมูลดังนี้นะครับ

Messages sent

ข้อมูล Webhook ที่ Line ส่งมาที่ระบบเราเมื่อมีผู้ใช้งานพูดคุยกับ Bot ใน Line OA ของเราครับ

Errors

ข้อมูล Error ที่ Line ส่ง Webhook ไม่สำเร็จนะครับ ช่วยให้เราทราบได้ดีขึ้นว่าเกิดอะไรขึ้นในระบบระหว่าง Line Messaging API กับระบบของเราบ้าง

อธิบายการทำงานของ Code

โค้ดนี้คือกระบวนการรับ Webhook จาก LINE Platform เพื่อตรวจสอบความถูกต้องของข้อมูล ตอบกลับผู้ใช้ และบันทึกข้อมูลสำคัญลงฐานข้อมูล โดยเน้นความปลอดภัยและการจัดการข้อมูลแต่ละ event อย่างครบถ้วนนะครับ

สรุปขั้นตอนการทำงาน (แบบสั้นๆให้เห็นภาพง่ายๆเข้าใจง่าย)

Code ต้นทาง: github.com/LineWebhookController.cs

[HttpPost("ReceiveHook")]
public async Task<IActionResult> ReceiveHook()
{
  using var reader = new StreamReader(Request.Body, Encoding.UTF8);
  var body = await reader.ReadToEndAsync();
  var lineSignature = Request.Headers["X-Line-Signature"].FirstOrDefault();

  _logger.LogInformation("Received LINE webhook: {Body}", body ?? string.Empty);
  _logger.LogInformation("X-Line-Signature: {Signature}", lineSignature ?? string.Empty);

  if (string.IsNullOrEmpty(body))
  {
      return BadRequest("Request body is empty.");
  }

  try
  {
      await _messagingBusinessService.HandleWebhookAsync(body, lineSignature);
  }
  catch (Exception ex)
  {
      var errorCode = _errorLogBusinessService.LogUnexpectedError(ex);
      return StatusCode(500, $"Internal server error. Error Code: {errorCode}");
  }

  return Ok(new { Result = $"Done getting web hook" });
}

1: รับข้อมูล webhook (body) และลายเซ็น (signature) ที่แนบมากับ request

2: ตรวจสอบว่าลายเซ็นถูกต้องหรือไม่ (เพื่อป้องกันข้อมูลปลอม)

  • ถ้าไม่ถูกต้อง จะหยุดการทำงานและแจ้งว่าไม่อนุญาต

3: แปลงข้อมูล webhook ที่ได้รับให้อยู่ในรูปแบบที่ใช้งานได้

  • ถ้าข้อมูลไม่ถูกต้อง จะหยุดการทำงานและแจ้งว่า format ผิด

4: ถ้าไม่มี event ใดๆ ในข้อมูล จะหยุดการทำงานทันที

5: ขอ access token จาก LINE เพื่อใช้ในการตอบกลับ

  • ถ้าไม่ได้ token จะหยุดการทำงานและแจ้งว่าไม่สามารถเชื่อมต่อ LINE ได้

6: สำหรับแต่ละ event ที่ได้รับ:

  • บันทึกข้อมูล event ลงฐานข้อมูล
  • แยกข้อมูลสำคัญ เช่น ข้อความ, รหัสตอบกลับ, รหัสผู้ใช้
  • แจ้ง LINE ให้แสดงสถานะ loading ให้ผู้ใช้
  • ส่งข้อความตอบกลับไปยังผู้ใช้ผ่าน LINE
  • บันทึกผลการตอบกลับลงฐานข้อมูล
  • อัปเดตสถานะ event ว่าดำเนินการเสร็จแล้ว

สรุปภาพอีกที

“Webhook Signature” คืออะไร?

Webhook Signature คือ กลไกความปลอดภัยที่ LINE Messaging API ใช้เพื่อยืนยันว่า event ที่ Bot ของเราได้รับมานั้น ส่งมาจาก LINE จริง ๆ ไม่ใช่บุคคลหรือระบบอื่นแอบอ้าง หรือยิง request ปลอมเข้ามา จุดนี้สำคัญมากเพราะ LINE จะไม่รับประกันว่า IP ที่ยิง webhook คือของ LINE เท่านั้น คุณจึงต้องตรวจสอบ signature ทุกครั้งที่ได้รับ event

https://developers.line.biz/en/docs/messaging-api/verify-webhook-signature/

https://developers.line.biz/en/docs/messaging-api/verify-webhook-signature/

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

#1: LINE:

จะสร้าง signature (รหัสยืนยัน) โดยใช้ HMAC-SHA256 กับ Channel Secret + ข้อมูล body ที่จะส่ง และแนบ signature ไว้ใน header x-line-signature ทุกครั้ง

developers.line.biz/verify-webhook-signature/#line-platform-sends-webhook-request

developers.line.biz/verify-webhook-signature/#line-platform-sends-webhook-request

#2: Server ของเรา:

นำ body ที่ได้รับ (แบบ raw ไม่แปลง) กับ Channel Secret ของตัวเองไปคำนวณ HMAC-SHA256 เช่นเดียวกัน แล้วแปลงเป็น Base64

เสร็จแล้วทำการเปรียบเทียบผลลัพธ์กับค่า x-line-signature ที่ได้รับมา

  • ถ้าตรงกัน แปลว่าข้อมูลนี้มาจาก LINE จริง → ดำเนินการต่อ
  • ถ้าไม่ตรง หรือ header นี้หาย → ปฏิเสธทันที ห้าม process ต่อ

developers.line.biz/verify-webhook-signature/#signature-validation

developers.line.biz/verify-webhook-signature/#signature-validation

ข้อควรระวัง:

  • ห้ามเปลี่ยนแปลง body ก่อนตรวจสอบ
  • ต้องใช้ Channel Secret ที่ถูกต้อง
  • ตรวจสอบด้วย HMAC-SHA256 เท่านั้น

ตัวอย่าง Code ของเรา

public bool VerifySignature(string requestBody, string? signature)
{
    if (string.IsNullOrEmpty(signature)) return false;
    var key = Encoding.UTF8.GetBytes(_lineOptions.ChannelSecret);
    var bodyBytes = Encoding.UTF8.GetBytes(requestBody);
    using var hmac = new HMACSHA256(key);
    var hash = hmac.ComputeHash(bodyBytes);
    var computedSignature = Convert.ToBase64String(hash);

    _logger.LogInformation("Computed Signature: {ComputedSignature}", computedSignature ?? string.Empty);

    return computedSignature == signature;
}

สรุปภาพรวม

https://developers.line.biz/en/docs/messaging-api/verify-webhook-signature/#signature-verification-flow

https://developers.line.biz/en/docs/messaging-api/verify-webhook-signature/#signature-verification-flow

**Stateless Channel Access Token**

ใน Line Platform มีแนวทางในการใช้งาน Line API อย่างปลอดภัยอยู่ 4 ระดับนะครับ แต่ในบทความนี้จะเน้นระดับที่ปลอดภัยที่สุดนั้นคือ Stateless Channel Access Token

Stateless Channel Access Token คือ วิธีใหม่ในการขอ Channel Access Token สำหรับ LINE Messaging API ที่เน้นความปลอดภัยสูงสุด เพราะ Token ที่ได้จะมีอายุสั้นมาก (15 นาที) และสามารถขอใหม่ได้ตลอดโดยไม่ต้องจัดเก็บหรือบริหาร Token เดิม เหมาะสำหรับระบบที่ต้องการลดความเสี่ยงหาก Token หลุดหรือถูกดักจับระหว่างทาง

สรุปจุดเด่นและวิธีใช้งาน:

  • อายุ Token สั้นมาก (15 นาที) ขอใหม่ได้ไม่จำกัดครั้ง
  • ลดความเสี่ยงเรื่อง Token ถูกขโมยหรือ Replay Attack
  • ไม่ต้องเก็บ Token ไว้ในระบบ ลดภาระเรื่อง security

วิธีขอ Token:

  • เรียก API POST
  • ส่ง Channel ID + Secret หรือใช้ JWT Assertion

ข้อดี:

  • ปลอดภัยสูงสุดสำหรับการเรียก LINE Messaging API

ข้อเสีย:

  • ต้อง Issue Token ใหม่บ่อย ๆ อาจมี latency เพิ่มเล็กน้อย

ตัวอย่าง Code ในบทความ

public async Task<string> LineLoginAsync()
{
  var client = new HttpClient();
  var content = new FormUrlEncodedContent(new[]
  {
      new KeyValuePair<string, string>("grant_type", "client_credentials"),
      new KeyValuePair<string, string>("client_id", _lineOptions.ChannelId),
      new KeyValuePair<string, string>("client_secret", _lineOptions.ChannelSecret),
  });

  // Issue stateless channel access token
  var response = await client.PostAsync($"{_lineOptions.APIBaseUrl}/oauth2/v3/token", content);
  var jsonResponse = await response.Content.ReadAsStringAsync();
  var tokenResponse = JsonSerializer.Deserialize<LineMessagingAPI.TokenResponse>(jsonResponse);
  return tokenResponse?.access_token ?? string.Empty;
}

ศึกษา Official Document ได้ที่นี้นะครับ

developers.line.biz/messaging-api/#issue-stateless-channel-access-token

developers.line.biz/messaging-api/#issue-stateless-channel-access-token

ถ้าผู้อ่านสนใจรายละเอียดของความปลอดภัยทุกระดับ ผมแนะนำศึกษาในบทความนี้นะครับผู้เขียนสรุปไว้ดีมากๆๆๆๆๆ

[embed]Stateless Channel Access Token ขั้นกว่าของความปลอดภัยในการใช้ LINE Messaging API Stateless Channel Access Token เป็น Token ที่มี อายุที่สั้นเพียง 15 นาที โดยที่ 1 Channel จะสามารถ Issue ตัว Token…medium.com

🔐 Security Matters!

🚨 อย่ามองข้ามความปลอดภัยในการเชื่อมต่อ LINE API!

ข้อควรปฏิบัติ:

  • ต้อง Verify Webhook Token ทุกครั้งที่มี Event เข้ามา (เพื่อตรวจสอบว่า LINE ส่งมาจริง) 👀🔑
  • ใช้ Stateless Channel Access Token เพื่อความปลอดภัยในการเรียกใช้งาน Line Messaging API 🗝️
  • อย่า Hardcode Token ไว้ใน Source Code เด็ดขาดจ้าาา 🥹❌

🧭 สรุปท้ายบทความ

มาถึงสุดท้ายนี้ผู้อ่านน่าจะเข้าใจการใช้งาน Webhook เพื่อรับ และ Line Messaging API เพื่อส่งข้อมูลกับระบบเราอย่างปลอดภัยมากขึ้นแล้วนะครับ

บทความหน้าเดี๋ยวเรามาลงลึกกับการใช้งาน Messaging API ประเภทต่างๆกันที่มากกว่าแค่การรับส่งข้อความธรรมดานะครับ

ขอบคุณที่อ่านมาถึงตอนนี้ครับ

Happy Coding,

นายป้องกัน

อ่านบทความจนง่วงเลยฮับพี่น้องงงงง

อ่านบทความจนง่วงเลยฮับพี่น้องงงงง


메타데이터
post_id
f00a7e887a0b
slug
พัฒนา-line-messaging-api-ด้วย-net-f00a7e887a0b
url
https://medium.com/t-t-software-solution/%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2-line-messaging-api-%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-net-f00a7e887a0b
canonical_url
https://medium.com/t-t-software-solution/%E0%B8%9E%E0%B8%B1%E0%B8%92%E0%B8%99%E0%B8%B2-line-messaging-api-%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-net-f00a7e887a0b
author_url
https://medium.com/@ponggun
status
ok
fetched_at
2026-08-19 17:40:06