| 
 | 
 
  
 
*** จะต้องติดตั้ง 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 ...  
- function sendLineNotifyToGroup() {
 
 -   var accessToken = 'YOUR_CHANNEL_ACCESS_TOKEN'; // ใส่ Access Token ของคุณ
 
 -   var groupId = 'YOUR_GROUP_ID'; // ใส่ Group ID ที่ได้จาก webhook หรือ debug log
 
  
-   var message = 'แจ้งเตือน: มีรายการใหม่เข้ามาในระบบ';
 
  
-   var payload = {
 
 -     to: groupId,
 
 -     messages: [
 
 -       {
 
 -         type: 'text',
 
 -         text: message
 
 -       }
 
 -     ]
 
 -   };
 
  
-   var options = {
 
 -     method: 'post',
 
 -     contentType: 'application/json',
 
 -     headers: {
 
 -       'Authorization': 'Bearer ' + accessToken
 
 -     },
 
 -     payload: JSON.stringify(payload)
 
 -   };
 
  
-   var url = 'https://api.line.me/v2/bot/message/push';
 
 -   var response = UrlFetchApp.fetch(url, options);
 
  
-   Logger.log(response.getContentText()); // แสดงผลลัพธ์
 
 - }
 
  คัดลอกไปที่คลิปบอร์ด 
มาดูโค้ดฉบับเต็มกันเถอะ ... อย่าลืมใส่ค่าคงที่ต่างๆก่อนที่จะรันโปรแกรมด้วย ...  
- '// สมัครการใช้งาน Line Messaging API ที่ 
 
 - '// https://manager.line.biz/
 
 - '// https://developers.line.biz/en/
 
 - '// จากนั้น สร้าง Channel ใน Line Messaging API
 
 - '// รับ Channel Access Token และ User ID จากหน้า Line Console
 
  
- '// ติดตั้ง Library Newtonsoft.Json เพื่อช่วยจัดการ JSON
 
 - '// ใน NuGet Package Manager Console ใช้คำสั่ง:
 
 - '// Install-Package Newtonsoft.Json
 
 - '// .Net Framework 4.5
 
  
- '// .Net SDK & Cloudinary Document
 
 - '// https://cloudinary.com/documentation/dotnet_integration
 
 - '// Sign Up
 
 - '// https://www.cloudinary.com
 
  
- Imports System.IO
 
 - Imports CloudinaryDotNet
 
 - Imports CloudinaryDotNet.Actions
 
 - Imports System.Net.Http
 
 - Imports System.Net.Http.Headers
 
 - Imports Newtonsoft.Json
 
 - Imports System.Text
 
  
- Public Class frmLineMessengerGroup
 
 -     '// ------------------------------------------------------------------------------------------------
 
 -     '// เก็บตำแหน่งและชื่อไฟล์ภาพต้นฉบับที่ต้องการอัพโหลด
 
 -     Dim PictureUploadPath As String = String.Empty
 
 -     '// แยกชื่อไฟล์+นามสกุล ออกจากโฟลเดอร์
 
 -     Dim UploadFileName As String = ""
 
 -     '// Default path.
 
 -     Dim PictureDefaultPath As String = MyPath(Application.StartupPath) & "Images"
 
  
-     '// Cloudinary Configuration
 
 -     Private Const CLOUD_NAME As String = "CLOUD_NAME"
 
 -     Private Const API_KEY As String = "API_KEY"
 
 -     Private Const API_SECRET As String = "API_SECRET"
 
 -     '// กำหนดโฟลเดอร์ที่เก็บไฟล์บน Cloudinary
 
 -     Private Const CLOUD_FOLDER As String = "LineAPI"    '// ตั้งชื่อโฟลเดอร์เอาเอง หากใน Cloudinary ไม่มี มันจะสร้างให้อัตโนมัติ
 
  
-     '// Line Bot Config
 
 -     Private Const LINE_ACCESS_TOKEN As String = "LINE_ACCESS_TOKEN"
 
 -     Private Const USER_ID As String = "USER_ID" '// งานนี้ไม่ได้ใช้
 
  
-     Private Const GROUP_ID As String = "GROUP_ID"
 
 -     '// ------------------------------------------------------------------------------------------------
 
  
-     Private Sub frmLineMessengerGroup_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
 -         txtMessage.Text = "ทดสอบการส่งข้อความและรูปภาพในไลน์กลุ่ม ด้วยการใช้งาน Line Messaging API"
 
 -     End Sub
 
  
-     '// ------------------------------------------------------------------------------------------------
 
 -     '// ส่งข้อความและรูปภาพไปยัง LINE
 
 -     '// ------------------------------------------------------------------------------------------------
 
 -     Private Sub btnSendMessage_Click(sender As Object, e As EventArgs) Handles btnSendMessage.Click
 
 -         '// ตรวจสอบว่าทั้งข้อความและภาพว่างหรือไม่
 
 -         If String.IsNullOrWhiteSpace(txtMessage.Text.Trim) AndAlso String.IsNullOrWhiteSpace(PictureUploadPath) Then
 
 -             MessageBox.Show("กรุณาใส่ข้อความหรือเลือกภาพก่อนส่ง", "คำเตือน", MessageBoxButtons.OK, MessageBoxIcon.Warning)
 
 -             Return
 
 -         Else
 
 -             '// ทำการส่งข้อความและไฟล์ภาพไปใน Line Bot
 
 -             Call UploadImageAndSendToLine(PictureUploadPath, txtMessage.Text & vbCrLf & "วันที่ - เวลา: " & Now())
 
 -         End If
 
 -         '// Clear
 
 -         UploadFileName = ""
 
 -         PictureUploadPath = String.Empty
 
 -         picData.Image = Image.FromFile(PictureDefaultPath & "NoImage.gif")
 
 -     End Sub
 
  
-     '// ------------------------------------------------------------------------------------------------
 
 -     '// คำสั่ง Async ใช้เพื่อระบุว่าฟังก์ชันหรือเมธอดสามารถดำเนินการแบบ Asynchronous 
 
 -     '// หรือเป็นทำงานแบบไม่รอให้เสร็จสมบูรณ์ก่อนที่จะไปทำคำสั่งถัดไปได้ 
 
 -     '// โดยปกติจะใช้ร่วมกับคำสั่ง Await เพื่อเรียกใช้งานที่ใช้เวลานาน 
 
 -     '// เช่น การร้องขอข้อมูลจาก API, อ่าน/เขียนไฟล์, หรือรอเครือข่าย โดยไม่บล็อกส่วนที่เหลือของแอพพลิเคชัน
 
 -     '// ------------------------------------------------------------------------------------------------
 
 -     Public Async Function UploadImageAndSendToLine(ByVal imagePath As String, ByVal message As String) As Task
 
 -         Dim account = New Account(CLOUD_NAME, API_KEY, API_SECRET)
 
 -         Dim cloudinary = New Cloudinary(account)
 
 -         Dim uploadResult As ImageUploadResult = Nothing
 
 -         Dim publicId As String = Nothing
 
 -         Dim imageUrl As String = String.Empty
 
 -         Dim url As String = "https://api.line.me/v2/bot/message/push"
 
 -         Try
 
 -             '// 1. Upload Image to Cloudinary
 
 -             If Not String.IsNullOrEmpty(imagePath) AndAlso IO.File.Exists(imagePath) Then
 
 -                 Dim uploadParams = New ImageUploadParams() With {
 
 -                     .File = New FileDescription(imagePath),
 
 -                     .Folder = CLOUD_FOLDER '// Line API folder on Cloudinary.
 
 -                 }
 
 -                 uploadResult = cloudinary.Upload(uploadParams)
 
 -                 imageUrl = uploadResult.SecureUrl.ToString()
 
 -                 publicId = uploadResult.PublicId
 
 -             End If
 
  
-             '// 2. Send to LINE Messaging API
 
 -             Using client As New HttpClient()
 
 -                 client.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Bearer", LINE_ACCESS_TOKEN)
 
 -                 '// เตรียมรายการข้อความ สร้าง Payload ตามรูปแบบที่ Line API ต้องการ
 
 -                 '// Payload คือเนื้อหาข้อมูลที่ส่งไปยัง Line Server ผ่าน API เช่น การส่งข้อความ, การส่งรูปภาพ หรือการสร้าง Flex Message
 
 -                 '// ประกาศตัวแปร messages เป็นแบบ List(Of Object) จากนั้นค่อยนำไปแปลงให้อยู่ในรูปแบบ JSON Format
 
 -                 Dim messages = New List(Of Object)
 
 -                 '// ตรวจสอบว่ามีข้อความ
 
 -                 If Not String.IsNullOrEmpty(message) Then
 
 -                     messages.Add(New With {.type = "text", .text = message})
 
 -                 End If
 
 -                 '// ตรวจสอบว่ามี URL รูปภาพ
 
 -                 If Not String.IsNullOrEmpty(imageUrl) Then
 
 -                     messages.Add(New With {
 
 -                         .type = "image",
 
 -                         .originalContentUrl = imageUrl,
 
 -                         .previewImageUrl = imageUrl
 
 -                     })
 
 -                 End If
 
 -                 Dim payload = New With {
 
 -                     .to = GROUP_ID,
 
 -                     .messages = messages.ToArray()
 
 -                 }
 
 -                 '// แปลงเป็น JSON แล้วส่ง
 
 -                 Dim json = JsonConvert.SerializeObject(payload, Formatting.Indented)
 
 -                 '// ตัวอย่าง:
 
 -                 '// {
 
 -                 '//  "to": "USER_ID",
 
 -                 '//  "messages": [
 
 -                 '//     {
 
 -                 '//       "type": "text",
 
 -                 '//       "text": "สวัสดีครับ! นี่คือข้อความจาก Line Messaging API"
 
 -                 '//     },
 
 -                 '//     {
 
 -                 '//       "type": "image",
 
 -                 '//       "originalContentUrl": "https://example.com/image.jpg",
 
 -                 '//       "previewImageUrl": "https://example.com/image_preview.jpg" (หรือใช้ชื่อไฟล์ภาพ Content ตัวเดียวกันได้เลย)
 
 -                 '//     }
 
 -                 '//   ]
 
 -                 '// }
 
 -                 Dim content = New StringContent(json, Encoding.UTF8, "application/json")
 
 -                 Dim response = Await client.PostAsync(url, content)
 
 -                 Dim result = Await response.Content.ReadAsStringAsync()
 
 -                 If Not response.IsSuccessStatusCode Then
 
 -                     MessageBox.Show("เกิดข้อผิดพลาด: " & response.StatusCode & vbCrLf & result, "Report Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
 
 -                 End If
 
 -             End Using
 
 -         Catch ex As Exception
 
 -             MessageBox.Show("Error: " & ex.Message)
 
  
-             '// 3: Delete Image From Cloudinary.
 
 -         Finally
 
 -             If Not String.IsNullOrEmpty(publicId) Then
 
 -                 Try
 
 -                     Dim deletionParams As New DeletionParams(publicId)
 
 -                     Dim deletionResult = cloudinary.Destroy(deletionParams)
 
 -                 Catch ex1 As Exception
 
 -                     MessageBox.Show("ลบภาพไม่สำเร็จ: " & ex1.Message, "Report Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
 
 -                 End Try
 
 -             End If
 
 -         End Try
 
 -     End Function
 
  
-     '// ------------------------------------------------------------------------------------------------
 
 -     '// เบราซ์หาไฟล์ภาพ
 
 -     '// ------------------------------------------------------------------------------------------------
 
 -     Private Sub btnBrowse_Click(sender As Object, e As EventArgs) Handles btnBrowse.Click
 
 -         Dim dlgImage As OpenFileDialog = New OpenFileDialog()
 
 -         '// Open File Dialog
 
 -         With dlgImage
 
 -             .InitialDirectory = PictureDefaultPath
 
 -             .Title = "Select Image File"
 
 -             .Filter = "Format (*.jpg;*.jpeg;*.png)|*.jpg;*.jpeg;*.png"
 
 -             .FilterIndex = 1
 
 -             .RestoreDirectory = True
 
 -         End With
 
 -         '// Select OK after Browse ...
 
 -         If dlgImage.ShowDialog() = DialogResult.OK Then
 
 -             '// ตรวจสอบก่อนว่าขนาดไฟล์เกิน 1 MB. หรือไม่ (Cloudinary น่าจะอัพโหลดได้สูงสุด 10 MB.)
 
 -             Dim info As New FileInfo(dlgImage.FileName)
 
 -             If (info.Length / 1024) > 1024 Then
 
 -                 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)
 
 -                 Exit Sub
 
 -             End If
 
 -             '// Put the current image file into PictureBox Control.
 
 -             picData.Image = Image.FromFile(dlgImage.FileName)
 
 -             '// เอาเฉพาะชื่อไฟล์และนามสกุลภาพ (Filename + Extension) เช่น thongkorn.png
 
 -             UploadFileName = dlgImage.SafeFileName
 
 -             '// เอาไฟล์ภาพมาเต็มพาธ เพื่อระบุต้นทางไฟล์ก่อนทำการอัพโหลด
 
 -             PictureUploadPath = dlgImage.FileName
 
 -         End If
 
 -     End Sub
 
  
-     '// ------------------------------------------------------------------------------------------------
 
 -     Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
 
 -         picData.Image = Image.FromFile(PictureDefaultPath & "NoImage.gif")
 
 -         UploadFileName = ""
 
 -         PictureUploadPath = String.Empty
 
 -     End Sub
 
  
-     Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
 
 -         Me.Close()
 
 -     End Sub
 
  
-     Private Sub frmLineMessengerGroup_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
 
 -         Me.Dispose()
 
 -         GC.SuppressFinalize(Me)
 
 -         Application.Exit()
 
 -     End Sub
 
  
 
- #Region "FUNCTION"
 
 -     '// / --------------------------------------------------------------------------------
 
 -     '// / Get my project path
 
 -     '// / AppPath = C:\My Project\bin\debug
 
 -     '// / Replace "\bin\debug" with ""
 
 -     '// / Return : C:\My Project\
 
 -     Function MyPath(ByVal AppPath As String) As String
 
 -         '/ MessageBox.Show(AppPath);
 
 -         AppPath = AppPath.ToLower()
 
 -         '/ Return Value
 
 -         MyPath = AppPath.Replace("\bin\debug", "").Replace("\bin\release", "").Replace("\bin\x86\debug", "")
 
 -         '// If not found folder then put the \ (BackSlash) at the end.
 
 -         If Microsoft.VisualBasic.Right(MyPath, 1) <> Chr(92) Then MyPath = MyPath & Chr(92)
 
 -     End Function
 
  
- #End Region
 
 - End Class
 
  คัดลอกไปที่คลิปบอร์ด 
ดาวน์โหลดโค้ดต้นฉบับ VB.NET (.Net Framework 4.5.2+) ... ได้ที่นี่ ... 
 
 |   
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน  
 
x
 
 
 
 
 |