ลงชื่อเข้าใช้
กระดานข่าว VB > เว็บบอร์ดเปิดโค้ดต้นฉบับ
ส่ง|
ดู2039|โพสต์6|บุ๊คมาร์ก



Add References ... NewtonSoft.Json (ใช้แยกข้อมูลจาก Object มาเป็น JSON Format)

โค้ด VB.NET (.Net Framework 4.5+) กับการใช้งาน Line Messaging API เพื่อใช้แทนที่ Line Notify ...
สมัครการใช้งาน Line Official Account ที่
https://manager.line.biz/
https://developers.line.biz/en/

คลิปวิดีโอในการสมัครใช้งาน Line Official Account เพื่อรับค่า Channel Access Token และ UserID (สำคัญ)

มาดูโค้ดฉบับเต็มกันเถอะ ... frmMain.vb ...

โค้ด:

  1. '// สมัครการใช้งาน Line Messaging API ที่
  2. '// https://manager.line.biz/
  3. '// https://developers.line.biz/en/
  4. '// จากนั้น สร้าง Channel ใน Line Messaging API
  5. '// รับ Channel Access Token และ User ID จากหน้า Line Console

  6. '// ติดตั้ง Library Newtonsoft.Json เพื่อช่วยจัดการ JSON
  7. '// ใน NuGet Package Manager Console ใช้คำสั่ง:
  8. '// Install-Package Newtonsoft.Json
  9. '// .Net Framework 4.5

  10. Public Class frmMain

  11.     ' / --------------------------------------------------------------------------------
  12.     ' / S T A R T ... H E R E
  13.     ' / --------------------------------------------------------------------------------
  14.     Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles Me.Load
  15.         txtMessage.Text = "ทดสอบการทำงานของ Line Messaging API"
  16.     End Sub

  17.     '// --------------------------------------------------------------------------------
  18.     '// คำสั่ง Async ใช้เพื่อระบุว่าฟังก์ชันหรือเมธอดสามารถดำเนินการแบบ Asynchronous
  19.     '// หรือเป็นทำงานแบบไม่รอให้เสร็จสมบูรณ์ก่อนที่จะไปทำคำสั่งถัดไปได้
  20.     '// โดยปกติจะใช้ร่วมกับคำสั่ง Await เพื่อเรียกใช้งานงานที่ใช้เวลานาน
  21.     '// เช่น การร้องขอข้อมูลจาก API, อ่าน/เขียนไฟล์, หรือรอเครือข่าย โดยไม่บล็อกส่วนที่เหลือของแอปพลิเคชัน
  22.     '// --------------------------------------------------------------------------------
  23.     Private Async Sub btnSendMessage_Click(sender As Object, e As EventArgs) Handles btnSendMessage.Click
  24.         If (String.IsNullOrEmpty(txtMessage.Text.Trim)) Then Return
  25.         '// เรียกไปยังคลาส LineMessagingAPI
  26.         Dim LineAPI As New LineMessagingAPI()
  27.         '// Await:
  28.         '// ใช้เพื่อรอการทำงานของงานที่ใช้เวลานาน โดยไม่บล็อกการทำงานของเธรดหลัก
  29.         '// คำสั่งหลัง Await จะรันเมื่อการทำงานนั้นเสร็จสมบูรณ์
  30.         Await LineAPI.SendMessageToYourSelfAsync(txtMessage.Text & vbCrLf & "วันที่ - เวลา: " & Now())
  31.     End Sub

  32.     Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
  33.         Me.Close()
  34.     End Sub

  35.     Private Sub frmMain_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
  36.         Me.Dispose()
  37.         GC.SuppressFinalize(Me)
  38.         Application.Exit()
  39.     End Sub
  40. End Class

โค้ดในส่วนของคลาส LineMessingAPI.vb ...

โค้ด:

  1. Imports System.Net.Http
  2. Imports Newtonsoft.Json
  3. Imports System.Text

  4. Public Class LineMessagingAPI
  5.     '// Channel Access Token จาก Line Developer Console
  6.     Private Const AccessToken As String = "ACCESS_TOKEN"    '// เปลี่ยนด้วย
  7.     '// ต้องใส่ User ID ของคุณ
  8.     Private Const YourUserId As String = ""    '// เปลี่ยนด้วย

  9.     '// --------------------------------------------------------------------------------
  10.     '// ฟังค์ชั่นในการทดสอบ Bot ตัวเอง
  11.     '// --------------------------------------------------------------------------------
  12.     Public Async Function SendMessageToYourSelfAsync(message As String) As Task
  13.         Try
  14.             Using httpClient As New HttpClient()
  15.                 httpClient.DefaultRequestHeaders.Accept.Add(New System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"))
  16.                 httpClient.DefaultRequestHeaders.Authorization = New System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", AccessToken)
  17.                 '//
  18.                 Dim url As String = "https://api.line.me/v2/bot/message/push"
  19.                 '// สร้าง Payload ตามรูปแบบที่ Line API ต้องการ
  20.                 '// Payload คือเนื้อหาข้อมูลที่ส่งไปยัง Line Server ผ่าน API เช่น การส่งข้อความ, การส่งรูปภาพ หรือการสร้าง Flex Message
  21.                 Dim MessageObject = New With {
  22.                 Key .to = YourUserId,
  23.                 Key .messages = New List(Of Object) From {
  24.                     New With {
  25.                         Key .type = "text",
  26.                         Key .text = If(String.IsNullOrEmpty(message), "ทดสอบข้อความ", message)
  27.                         }
  28.                     }
  29.                 }
  30.                 '// แปลง Object เป็น Json
  31.                 Dim JsonPayload As String = JsonConvert.SerializeObject(MessageObject)
  32.                 '// ตัวอย่าง:
  33.                 '// {
  34.                 '//      "to" "Uc241cafb4b9e8d6xxxxxxxxxxxxxxx",
  35.                 '//      "messages": [
  36.                 '//        {
  37.                 '//          "type": "text",
  38.                 '//          "text": "Hello, this is a test message."
  39.                 '//        }
  40.                 '//      ]
  41.                 '//    }
  42.                 '//Debug.Print("Payload: " & JsonPayload)  '// เพื่อตรวจสอบ payload

  43.                 '// เข้ารหัสเป็นแบบ UTF-8 เนื่องจากรองรับตัวอักษรหลากหลายภาษาและเป็นมาตรฐานสากล
  44.                 Dim Content = New StringContent(JsonPayload, Encoding.UTF8, "application/json")
  45.                 '// ส่ง POST request (ส่งคำขอแบบ Asynchronous)
  46.                 Dim Response = Await httpClient.PostAsync(url, Content)
  47.                 '// อ่านเนื้อหาตอบกลับ
  48.                 Dim ResponseContent = Await Response.Content.ReadAsStringAsync()
  49.                 '// ทดสอบของการตอบสนอง
  50.                 If Response.IsSuccessStatusCode Then
  51.                     MessageBox.Show("ส่งข้อความสำเร็จ!", "Complete", MessageBoxButtons.OK, MessageBoxIcon.Information)
  52.                 Else
  53.                     MessageBox.Show("เกิดข้อผิดพลาด: " & Response.StatusCode & vbCrLf & ResponseContent, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
  54.                 End If
  55.             End Using
  56.         Catch ex As Exception
  57.             MessageBox.Show("เกิดข้อผิดพลาด: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
  58.         End Try
  59.     End Function
  60. End Class

ดาวน์โหลดโค้ดต้นฉบับตัวเต็ม (VB.NET + .Net Framework 4.5+) ได้ที่นี่ ...


ไฟล์แนบ: คุณจำเป็นต้องลงชื่อเข้าใช้ก่อนจึงจะสามารถดูและดาวน์โหลดไฟล์แนบได้ หากยังไม่มีบัญชีหรือยังไม่ได้เป็นสมาชิก กรุณาลงทะเบียน
outhai ดูทั้งหมด
2025-5-12 09:53:19
แก้ไขครั้งสุดท้ายโดย outhai เมื่อ 2025-5-12 09:54

ไฟล์แนบ: คุณจำเป็นต้องลงชื่อเข้าใช้ก่อนจึงจะสามารถดูและดาวน์โหลดไฟล์แนบได้ หากยังไม่มีบัญชีหรือยังไม่ได้เป็นสมาชิก กรุณาลงทะเบียน

เอา Try ... Catch ออกไปก่อนครับ จากนั้นกด F8 ไล่การทำงานไปในส่วนของการ Send Message ดูว่ามันผิดพลาดที่บรรทัดคำสั่งไหนครับ
outhai ดูทั้งหมด
2025-5-12 16:33:50
เอา Try ... Catch แล้วครับ
ไฟล์แนบ: คุณจำเป็นต้องลงชื่อเข้าใช้ก่อนจึงจะสามารถดูและดาวน์โหลดไฟล์แนบได้ หากยังไม่มีบัญชีหรือยังไม่ได้เป็นสมาชิก กรุณาลงทะเบียน
outhai ดูทั้งหมด
2025-5-14 09:35:41
Error ตามรูปครับ
ไฟล์แนบ: คุณจำเป็นต้องลงชื่อเข้าใช้ก่อนจึงจะสามารถดูและดาวน์โหลดไฟล์แนบได้ หากยังไม่มีบัญชีหรือยังไม่ได้เป็นสมาชิก กรุณาลงทะเบียน

อ้างอิง:

outhai ตอบกลับเมื่อ 2025-5-14 09:35
Error ตามรูปครับ

โค้ดไม่น่าจะผิดพลาด ลองกลับไปตรวจสอบการรับค่า Channel Access Token และ User ID ใหม่ก่อนด้วย หรือลืมเปิดการใช้งานตัวไหนไว้หรือเปล่าครับ ... https://www.youtube.com/watch?v=CqtOQIR65aE

และ mscorlib.dll (Microsoft Core Library) มันเกี่ยวกับการทำ Debugger ซึ่งไม่ได้เกี่ยวข้องอะไรโดยตรงกับการทำ Line Messaging API เลยครับ
โค๊ตไม่ผิดพลาด ลองเปลี่ยน .Net Framework 4.5 เป็น 4.6 + ครับ ผมลองใช้ได้ปกติ ทำตามขั้นตอน ใน VDO

G2GNet.com

Powered by Discuz! X3.4

โฮมเพจ|รูปแบบทั่วไป|รูปแบบโมเดิร์น|รูปแบบคอมพิวเตอร์