ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 88|ตอบกลับ: 0

[VB.NET] โค้ดการใช้งาน Line Messaging API เพื่อส่งข้อความและรูปภาพไปยังไลน์กลุ่ม

[คัดลอกลิงก์]

327

กระทู้

522

โพสต์

7052

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
7052
โพสต์ 5 วันที่แล้ว | ดูโพสต์ทั้งหมด |โหมดอ่าน



*** จะต้องติดตั้ง CloudinaryDotNet เพื่อใช้ในการอัพโหลดรูปภาพเข้าไปใหม่ก่อนด้วย เพราะโค้ดต้นฉบับไม่ได้แนบไฟล์ DLL ไปด้วย ***
*** การติดตั้ง CloudinaryDotNet จะติดตั้ง NewTonSoft มาให้อัตโนมัติ ***

การใช้ Nuget เพื่อทำการติดตั้ง CloudinaryDotNet ... (เป็นที่เก็บไฟล์ Media ต่างๆ) ...ไปที่เมนู Tools --> Nuget Package Manager --> Manage Nuget Packages for solution ...

คลิปวิดีโอในการรับค่า Webhook สำหรับ Line Messaging API ...

โค้ดการใช้งาน Line Messaging API เพื่อส่งข้อความและรูปภาพไปยังไลน์กลุ่ม โดยการใช้โค้ดเดิมจาก โค้ดการใช้ Line Messaging API ด้วยการส่งไฟล์รูปภาพไปเก็บไว้ที่ Cloudinary ก่อนส่งต่อไปที่ LINE ซึ่งไม่ได้มีการเปลี่ยนแปลงแก้ไขใดๆ ยกเว้นเพิ่มเติมในเรื่องของการประกาศตัวแปร GROUP_ID เข้ามาใช้งานแทนที่ USER_ID ...

สมัครใช้งาน Cloudinary.com ได้ที่นี่

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

คลิปวิดีโอในการสมัครเข้าใช้งานและดูรายละเอียดของ Cloudinary ...

สคริปท์สำหรับการรับค่า Webhook จาก Google App Script ...
  1. function sendLineNotifyToGroup() {
  2.   var accessToken = 'YOUR_CHANNEL_ACCESS_TOKEN'; // ใส่ Access Token ของคุณ
  3.   var groupId = 'YOUR_GROUP_ID'; // ใส่ Group ID ที่ได้จาก webhook หรือ debug log

  4.   var message = 'แจ้งเตือน: มีรายการใหม่เข้ามาในระบบ';

  5.   var payload = {
  6.     to: groupId,
  7.     messages: [
  8.       {
  9.         type: 'text',
  10.         text: message
  11.       }
  12.     ]
  13.   };

  14.   var options = {
  15.     method: 'post',
  16.     contentType: 'application/json',
  17.     headers: {
  18.       'Authorization': 'Bearer ' + accessToken
  19.     },
  20.     payload: JSON.stringify(payload)
  21.   };

  22.   var url = 'https://api.line.me/v2/bot/message/push';
  23.   var response = UrlFetchApp.fetch(url, options);

  24.   Logger.log(response.getContentText()); // แสดงผลลัพธ์
  25. }
คัดลอกไปที่คลิปบอร์ด

มาดูโค้ดฉบับเต็มกันเถอะ ... อย่าลืมใส่ค่าคงที่ต่างๆก่อนที่จะรันโปรแกรมด้วย ...
  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. '// .Net SDK & Cloudinary Document
  11. '// https://cloudinary.com/documentation/dotnet_integration
  12. '// Sign Up
  13. '// https://www.cloudinary.com

  14. Imports System.IO
  15. Imports CloudinaryDotNet
  16. Imports CloudinaryDotNet.Actions
  17. Imports System.Net.Http
  18. Imports System.Net.Http.Headers
  19. Imports Newtonsoft.Json
  20. Imports System.Text

  21. Public Class frmLineMessengerGroup
  22.     '// ------------------------------------------------------------------------------------------------
  23.     '// เก็บตำแหน่งและชื่อไฟล์ภาพต้นฉบับที่ต้องการอัพโหลด
  24.     Dim PictureUploadPath As String = String.Empty
  25.     '// แยกชื่อไฟล์+นามสกุล ออกจากโฟลเดอร์
  26.     Dim UploadFileName As String = ""
  27.     '// Default path.
  28.     Dim PictureDefaultPath As String = MyPath(Application.StartupPath) & "Images"

  29.     '// Cloudinary Configuration
  30.     Private Const CLOUD_NAME As String = "CLOUD_NAME"
  31.     Private Const API_KEY As String = "API_KEY"
  32.     Private Const API_SECRET As String = "API_SECRET"
  33.     '// กำหนดโฟลเดอร์ที่เก็บไฟล์บน Cloudinary
  34.     Private Const CLOUD_FOLDER As String = "LineAPI"    '// ตั้งชื่อโฟลเดอร์เอาเอง หากใน Cloudinary ไม่มี มันจะสร้างให้อัตโนมัติ

  35.     '// Line Bot Config
  36.     Private Const LINE_ACCESS_TOKEN As String = "LINE_ACCESS_TOKEN"
  37.     Private Const USER_ID As String = "USER_ID" '// งานนี้ไม่ได้ใช้

  38.     Private Const GROUP_ID As String = "GROUP_ID"
  39.     '// ------------------------------------------------------------------------------------------------

  40.     Private Sub frmLineMessengerGroup_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  41.         txtMessage.Text = "ทดสอบการส่งข้อความและรูปภาพในไลน์กลุ่ม ด้วยการใช้งาน Line Messaging API"
  42.     End Sub

  43.     '// ------------------------------------------------------------------------------------------------
  44.     '// ส่งข้อความและรูปภาพไปยัง LINE
  45.     '// ------------------------------------------------------------------------------------------------
  46.     Private Sub btnSendMessage_Click(sender As Object, e As EventArgs) Handles btnSendMessage.Click
  47.         '// ตรวจสอบว่าทั้งข้อความและภาพว่างหรือไม่
  48.         If String.IsNullOrWhiteSpace(txtMessage.Text.Trim) AndAlso String.IsNullOrWhiteSpace(PictureUploadPath) Then
  49.             MessageBox.Show("กรุณาใส่ข้อความหรือเลือกภาพก่อนส่ง", "คำเตือน", MessageBoxButtons.OK, MessageBoxIcon.Warning)
  50.             Return
  51.         Else
  52.             '// ทำการส่งข้อความและไฟล์ภาพไปใน Line Bot
  53.             Call UploadImageAndSendToLine(PictureUploadPath, txtMessage.Text & vbCrLf & "วันที่ - เวลา: " & Now())
  54.         End If
  55.         '// Clear
  56.         UploadFileName = ""
  57.         PictureUploadPath = String.Empty
  58.         picData.Image = Image.FromFile(PictureDefaultPath & "NoImage.gif")
  59.     End Sub

  60.     '// ------------------------------------------------------------------------------------------------
  61.     '// คำสั่ง Async ใช้เพื่อระบุว่าฟังก์ชันหรือเมธอดสามารถดำเนินการแบบ Asynchronous
  62.     '// หรือเป็นทำงานแบบไม่รอให้เสร็จสมบูรณ์ก่อนที่จะไปทำคำสั่งถัดไปได้
  63.     '// โดยปกติจะใช้ร่วมกับคำสั่ง Await เพื่อเรียกใช้งานที่ใช้เวลานาน
  64.     '// เช่น การร้องขอข้อมูลจาก API, อ่าน/เขียนไฟล์, หรือรอเครือข่าย โดยไม่บล็อกส่วนที่เหลือของแอพพลิเคชัน
  65.     '// ------------------------------------------------------------------------------------------------
  66.     Public Async Function UploadImageAndSendToLine(ByVal imagePath As String, ByVal message As String) As Task
  67.         Dim account = New Account(CLOUD_NAME, API_KEY, API_SECRET)
  68.         Dim cloudinary = New Cloudinary(account)
  69.         Dim uploadResult As ImageUploadResult = Nothing
  70.         Dim publicId As String = Nothing
  71.         Dim imageUrl As String = String.Empty
  72.         Dim url As String = "https://api.line.me/v2/bot/message/push"
  73.         Try
  74.             '// 1. Upload Image to Cloudinary
  75.             If Not String.IsNullOrEmpty(imagePath) AndAlso IO.File.Exists(imagePath) Then
  76.                 Dim uploadParams = New ImageUploadParams() With {
  77.                     .File = New FileDescription(imagePath),
  78.                     .Folder = CLOUD_FOLDER '// Line API folder on Cloudinary.
  79.                 }
  80.                 uploadResult = cloudinary.Upload(uploadParams)
  81.                 imageUrl = uploadResult.SecureUrl.ToString()
  82.                 publicId = uploadResult.PublicId
  83.             End If

  84.             '// 2. Send to LINE Messaging API
  85.             Using client As New HttpClient()
  86.                 client.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Bearer", LINE_ACCESS_TOKEN)
  87.                 '// เตรียมรายการข้อความ สร้าง Payload ตามรูปแบบที่ Line API ต้องการ
  88.                 '// Payload คือเนื้อหาข้อมูลที่ส่งไปยัง Line Server ผ่าน API เช่น การส่งข้อความ, การส่งรูปภาพ หรือการสร้าง Flex Message
  89.                 '// ประกาศตัวแปร messages เป็นแบบ List(Of Object) จากนั้นค่อยนำไปแปลงให้อยู่ในรูปแบบ JSON Format
  90.                 Dim messages = New List(Of Object)
  91.                 '// ตรวจสอบว่ามีข้อความ
  92.                 If Not String.IsNullOrEmpty(message) Then
  93.                     messages.Add(New With {.type = "text", .text = message})
  94.                 End If
  95.                 '// ตรวจสอบว่ามี URL รูปภาพ
  96.                 If Not String.IsNullOrEmpty(imageUrl) Then
  97.                     messages.Add(New With {
  98.                         .type = "image",
  99.                         .originalContentUrl = imageUrl,
  100.                         .previewImageUrl = imageUrl
  101.                     })
  102.                 End If
  103.                 Dim payload = New With {
  104.                     .to = GROUP_ID,
  105.                     .messages = messages.ToArray()
  106.                 }
  107.                 '// แปลงเป็น JSON แล้วส่ง
  108.                 Dim json = JsonConvert.SerializeObject(payload, Formatting.Indented)
  109.                 '// ตัวอย่าง:
  110.                 '// {
  111.                 '//  "to": "USER_ID",
  112.                 '//  "messages": [
  113.                 '//     {
  114.                 '//       "type": "text",
  115.                 '//       "text": "สวัสดีครับ! นี่คือข้อความจาก Line Messaging API"
  116.                 '//     },
  117.                 '//     {
  118.                 '//       "type": "image",
  119.                 '//       "originalContentUrl": "https://example.com/image.jpg",
  120.                 '//       "previewImageUrl": "https://example.com/image_preview.jpg" (หรือใช้ชื่อไฟล์ภาพ Content ตัวเดียวกันได้เลย)
  121.                 '//     }
  122.                 '//   ]
  123.                 '// }
  124.                 Dim content = New StringContent(json, Encoding.UTF8, "application/json")
  125.                 Dim response = Await client.PostAsync(url, content)
  126.                 Dim result = Await response.Content.ReadAsStringAsync()
  127.                 If Not response.IsSuccessStatusCode Then
  128.                     MessageBox.Show("เกิดข้อผิดพลาด: " & response.StatusCode & vbCrLf & result, "Report Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
  129.                 End If
  130.             End Using
  131.         Catch ex As Exception
  132.             MessageBox.Show("Error: " & ex.Message)

  133.             '// 3: Delete Image From Cloudinary.
  134.         Finally
  135.             If Not String.IsNullOrEmpty(publicId) Then
  136.                 Try
  137.                     Dim deletionParams As New DeletionParams(publicId)
  138.                     Dim deletionResult = cloudinary.Destroy(deletionParams)
  139.                 Catch ex1 As Exception
  140.                     MessageBox.Show("ลบภาพไม่สำเร็จ: " & ex1.Message, "Report Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
  141.                 End Try
  142.             End If
  143.         End Try
  144.     End Function

  145.     '// ------------------------------------------------------------------------------------------------
  146.     '// เบราซ์หาไฟล์ภาพ
  147.     '// ------------------------------------------------------------------------------------------------
  148.     Private Sub btnBrowse_Click(sender As Object, e As EventArgs) Handles btnBrowse.Click
  149.         Dim dlgImage As OpenFileDialog = New OpenFileDialog()
  150.         '// Open File Dialog
  151.         With dlgImage
  152.             .InitialDirectory = PictureDefaultPath
  153.             .Title = "Select Image File"
  154.             .Filter = "Format (*.jpg;*.jpeg;*.png)|*.jpg;*.jpeg;*.png"
  155.             .FilterIndex = 1
  156.             .RestoreDirectory = True
  157.         End With
  158.         '// Select OK after Browse ...
  159.         If dlgImage.ShowDialog() = DialogResult.OK Then
  160.             '// ตรวจสอบก่อนว่าขนาดไฟล์เกิน 1 MB. หรือไม่ (Cloudinary น่าจะอัพโหลดได้สูงสุด 10 MB.)
  161.             Dim info As New FileInfo(dlgImage.FileName)
  162.             If (info.Length / 1024) > 1024 Then
  163.                 MessageBox.Show("The image file you selected is of size " & Format((info.Length / 1024), "#,##0") & " KB. is too big more than 1,024 KB.", "Report Status", MessageBoxButtons.OK, MessageBoxIcon.Warning)
  164.                 Exit Sub
  165.             End If
  166.             '// Put the current image file into PictureBox Control.
  167.             picData.Image = Image.FromFile(dlgImage.FileName)
  168.             '// เอาเฉพาะชื่อไฟล์และนามสกุลภาพ (Filename + Extension) เช่น thongkorn.png
  169.             UploadFileName = dlgImage.SafeFileName
  170.             '// เอาไฟล์ภาพมาเต็มพาธ เพื่อระบุต้นทางไฟล์ก่อนทำการอัพโหลด
  171.             PictureUploadPath = dlgImage.FileName
  172.         End If
  173.     End Sub

  174.     '// ------------------------------------------------------------------------------------------------
  175.     Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
  176.         picData.Image = Image.FromFile(PictureDefaultPath & "NoImage.gif")
  177.         UploadFileName = ""
  178.         PictureUploadPath = String.Empty
  179.     End Sub

  180.     Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
  181.         Me.Close()
  182.     End Sub

  183.     Private Sub frmLineMessengerGroup_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
  184.         Me.Dispose()
  185.         GC.SuppressFinalize(Me)
  186.         Application.Exit()
  187.     End Sub


  188. #Region "FUNCTION"
  189.     '// / --------------------------------------------------------------------------------
  190.     '// / Get my project path
  191.     '// / AppPath = C:\My Project\bin\debug
  192.     '// / Replace "\bin\debug" with ""
  193.     '// / Return : C:\My Project\
  194.     Function MyPath(ByVal AppPath As String) As String
  195.         '/ MessageBox.Show(AppPath);
  196.         AppPath = AppPath.ToLower()
  197.         '/ Return Value
  198.         MyPath = AppPath.Replace("\bin\debug", "").Replace("\bin\release", "").Replace("\bin\x86\debug", "")
  199.         '// If not found folder then put the \ (BackSlash) at the end.
  200.         If Microsoft.VisualBasic.Right(MyPath, 1) <> Chr(92) Then MyPath = MyPath & Chr(92)
  201.     End Function

  202. #End Region
  203. End Class
คัดลอกไปที่คลิปบอร์ด

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

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

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

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2025-5-21 22:56 , Processed in 0.160253 second(s), 5 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้