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

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

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

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

326

กระทู้

519

โพสต์

7025

เครดิต

ผู้ดูแลระบบ

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

Rank: 9Rank: 9Rank: 9

เครดิต
7025




Add Refrences ...
- NewtonSoft.Json (จัดข้อความให้อยู่ให้อยู่ในรูปแบบ JSON)


- WinSCPnet.dll (FTP - File Transfer Protocol ในการอัพโหลดและดาวน์โหลดไฟล์ภาพ ระหว่างคอมพิวเตอร์ และ Hosting)
*** ทั้ง 2 ไฟล์นี้เป็นของฟรีครับ ***

วิธีการส่งภาพผ่าน LINE Messaging API ด้วย VB.NET: คุณจะต้องดำเนินการตามขั้นตอนเหล่านี้แทน

(1) คุณต้องมี Server ที่สามารถเข้าถึงได้จากอินเทอร์เน็ต (เช่น Web Server, Cloud Storage อย่าง AWS S3, Google Cloud Storage, หรือบริการฝากไฟล์อื่นๆ)
เขียนโค้ด VB.NET เพื่ออัปโหลดไฟล์ภาพจาก Local Computer ของคุณไปยัง Server นั้น เมื่ออัปโหลดสำเร็จ คุณจะได้รับ URL ของรูปภาพที่อยู่บน Server

(2) สร้าง Payload สำหรับส่งภาพ:
สร้าง JSON Payload ตามรูปแบบที่ LINE Messaging API กำหนดสำหรับการส่งข้อความประเภทรูปภาพ ใน Payload จะต้องมี type เป็น "image"
และมี Properties ดังนี้:
- originalContentUrl: URL ของรูปภาพต้นฉบับ (ขนาดเต็ม) ที่อยู่บน Server ของคุณ
- previewImageUrl: URL ของรูปภาพขนาดเล็กสำหรับแสดงเป็นภาพตัวอย่าง (สามารถใช้ URL เดียวกับ originalContentUrl ได้หากไม่ต้องการภาพตัวอย่างแยก)

(3) ส่ง HTTP POST Request ไปยัง LINE API:
ใช้ HttpClient ใน VB.NET เพื่อส่ง HTTP POST Request ไปยัง Endpoint ของ LINE Messaging API สำหรับการส่งข้อความ (เช่น https://api.line.me/v2/bot/message/push หรือ https://api.line.me/v2/bot/message/reply) กำหนด Headers ให้ถูกต้อง โดยเฉพาะ Authorization (Bearer token) และ Content-Type (application/json)

(4) ใส่ JSON Payload ที่สร้างไว้ใน Body ของ Request


(04-05-2568) แอดมินใช้บริการ Hosting ของฟรีจาก www.serv00.com แต่ปัจจุบันนี้ผู้ให้บริการได้ปิดการรับสมัคร Account เข้าใช้งานอยู่ จะต้องไปหา Hosting ที่ใหม่ด้วยล่ะครับ

สมัครการใช้งาน Line Official Account ที่
https://manager.line.biz/
https://developers.line.biz/en/

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

มาดูโค้ดฉบับเต็มกันเถอะ ... (ฟอร์มหลัก)
  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. Imports System.IO
  11. Imports WinSCP

  12. Public Class frmLineApiMsgImg
  13.     '// ------------------------------------------------------------------------------------------------
  14. '// เก็บตำแหน่งและชื่อไฟล์ภาพต้นฉบับที่ต้องการอัพโหลด
  15.     Dim PictureUploadPath As String = String.Empty
  16.     '// แยกชื่อไฟล์+นามสกุล ออกจากโฟลเดอร์
  17.     Dim UploadFileName As String = ""
  18.     '// Default path.
  19.     Dim PictureDefaultPath As String = MyPath(Application.StartupPath) & "Images"

  20.     '// ตำแหน่งของไฟล์ภาพบน Hosting เพื่อนำมาแสดงผล (โฟลเดอร์ uploadimages อยู่ภายใต้ public_html)
  21.     '// ต้องเปลี่ยน Sub Domain จาก g2gnet ให้เป็นไปตามที่สมัครเอาไว้ด้วยล่ะครับ
  22.     Dim MyURL As String = "https://g2gnet.serv00.net/uploadimages/"
  23.     '// ตำแหน่งในการอัพโหลดไฟล์ภาพ (FTP)
  24.     Dim RemoteDir As String = "domains/g2gnet.serv00.net/public_html/uploadimages/"
  25.     '// For Login to Hosting.
  26.     Dim HostName As String = "HOST_NAME"
  27.     Dim UName As String = "USER_NAME"
  28.     Dim Pwd As String = "PASSWORD"

  29.     Private Sub frmLineApiMsgImg_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  30.         txtMessage.Text = "ทดสอบการทำงานของ Line Messaging API ด้วยการส่งข้อความและรูปภาพ"
  31.     End Sub

  32.     '// ------------------------------------------------------------------------------------------------
  33.     '// คำสั่ง Async ใช้เพื่อระบุว่าฟังก์ชันหรือเมธอดสามารถดำเนินการแบบ Asynchronous
  34.     '// หรือเป็นทำงานแบบไม่รอให้เสร็จสมบูรณ์ก่อนที่จะไปทำคำสั่งถัดไปได้
  35.     '// โดยปกติจะใช้ร่วมกับคำสั่ง Await เพื่อเรียกใช้งานที่ใช้เวลานาน
  36.     '// เช่น การร้องขอข้อมูลจาก API, อ่าน/เขียนไฟล์, หรือรอเครือข่าย โดยไม่บล็อกส่วนที่เหลือของแอพพลิเคชัน
  37.     '// ------------------------------------------------------------------------------------------------
  38.     Private Async Sub btnSendMessage_Click(sender As Object, e As EventArgs) Handles btnSendMessage.Click
  39.         '// หากไม่มีข้อความก็ไม่ต้องส่ง
  40.         'If (String.IsNullOrEmpty(txtMessage.Text.Trim)) Then Return

  41.         '// ตำแหน่งการแสดงผลไฟล์ภาพ
  42.         Dim imageURL As String = String.Empty
  43.         '// "https://g2gnet.serv00.net/uploadimages/" + "ชื่อไฟล์ภาพ+นามสกุล"
  44.         If Not String.IsNullOrEmpty(UploadFileName) Then imageURL = MyURL + UploadFileName

  45.         '// หากมีรูปภาพต้องอัพโหลดขึ้น Hosting ก่อน
  46.         '// RemoteDir = "domains/g2gnet.serv00.net/public_html/uploadimages/" + UploadFileName
  47.         If Not (String.IsNullOrEmpty(UploadFileName)) Then Call UploadRemoteFile(RemoteDir + UploadFileName)

  48.         '// เริ่มต้นใช้ Line Bot ด้วยการเรียกไปยังคลาส LineMessagingAPI
  49.         Dim LineAPI As New LineMessagingAPI()
  50.         '// Await:
  51.         '// ใช้เพื่อรอการทำงานของงานที่ใช้เวลานาน โดยไม่บล็อกการทำงานของเธรดหลัก
  52.         '// คำสั่งหลัง Await จะรันเมื่อการทำงานนั้นเสร็จสมบูรณ์
  53.         Await LineAPI.SendImageMessageToLineAsync(txtMessage.Text, imageURL)

  54.         '// หากต้องการลบไฟล์ภาพที่อัพโหลดออกไปหลังจากที่ส่งไปใน Line เรียบร้อย
  55.         If Not String.IsNullOrEmpty(imageURL) Then Call DeleteRemoteFile(RemoteDir + UploadFileName)

  56.         '// Clear
  57.         UploadFileName = ""
  58.         PictureUploadPath = String.Empty
  59.         picData.Image = Image.FromFile(PictureDefaultPath & "NoImage.gif")
  60.     End Sub

  61.     '// ------------------------------------------------------------------------------------------------
  62.     '// เบราซ์หาไฟล์ภาพ
  63.     '// ------------------------------------------------------------------------------------------------
  64.     Private Sub btnBrowse_Click(sender As Object, e As EventArgs) Handles btnBrowse.Click
  65.         Dim dlgImage As OpenFileDialog = New OpenFileDialog()
  66.         '// Open File Dialog
  67.         With dlgImage
  68.             .InitialDirectory = PictureDefaultPath
  69.             .Title = "Select Image File"
  70.             .Filter = "Format (*.jpg;*.jpeg;*.png)|*.jpg;*.jpeg;*.png"
  71.             .FilterIndex = 1
  72.             .RestoreDirectory = True
  73.         End With
  74.         '// Select OK after Browse ...
  75.         If dlgImage.ShowDialog() = DialogResult.OK Then
  76.             '// Check file size don't over 1 MB.
  77.             Dim info As New FileInfo(dlgImage.FileName)
  78.             If (info.Length / 1024) > 1024 Then
  79.                 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)
  80.                 Exit Sub
  81.             End If
  82.             '// Put the current image file into PictureBox Control.
  83.             picData.Image = Image.FromFile(dlgImage.FileName)
  84.             '// เอาเฉพาะชื่อไฟล์และนามสกุลภาพ (Filename + Extension) เช่น thongkorn.png
  85.             UploadFileName = dlgImage.SafeFileName
  86.             '// เอาไฟล์ภาพมาเต็มพาธ เพื่อระบุต้นทางไฟล์ก่อนทำการอัพโหลด
  87.             PictureUploadPath = dlgImage.FileName
  88.         End If
  89.     End Sub

  90.     '// ------------------------------------------------------------------------------------------------
  91.     '// UPLOAD FILE to HOSTING.
  92.     '// ------------------------------------------------------------------------------------------------
  93.     Private Sub UploadRemoteFile(ByVal imgUrl As String)
  94.         If String.IsNullOrEmpty(UploadFileName) Then Return
  95.         '//
  96.         Me.Cursor = Cursors.WaitCursor
  97.         Try
  98.             '// Setup session options
  99.             Dim sessionOptions As New SessionOptions
  100.             With sessionOptions
  101.                 .Protocol = Protocol.Ftp
  102.                 .HostName = HostName
  103.                 .UserName = UName
  104.                 .Password = Pwd
  105.                 '// FTP ไม่ต้องใช้
  106.                 '.SshHostKeyFingerprint = "ssh-rsa 2048 XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX"
  107.             End With
  108.             Using Session As New Session
  109.                 '// Connect
  110.                 Session.Open(sessionOptions)
  111.                 '// Upload files
  112.                 Dim TransferOptions As New TransferOptions
  113.                 TransferOptions.TransferMode = TransferMode.Binary

  114.                 Dim TransferResult As TransferOperationResult
  115.                 '// ตำแหน่งไฟล์ต้นฉบับแบบ Full Path และ Remote Directory ปลายทาง
  116.                 '// RemoteDir = "domains/g2gnet.serv00.net/public_html/uploadimages/"
  117.                 TransferResult = Session.PutFiles(PictureUploadPath, imgUrl, False, TransferOptions)
  118.                 '// Throw on any error
  119.                 TransferResult.Check()
  120.             End Using
  121.         Catch ex As Exception
  122.             MessageBox.Show(ex.Message)
  123.         Finally
  124.             Me.Cursor = Cursors.Default
  125.         End Try
  126.     End Sub

  127.     '// ------------------------------------------------------------------------------------------------
  128.     '// การลบไฟล์แบบ Remote ด้วย WinSCP FTP
  129.     '// ------------------------------------------------------------------------------------------------
  130.     Private Sub DeleteRemoteFile(ByVal imgUrl As String)
  131.         Me.Cursor = Cursors.WaitCursor
  132.         Try
  133.             Dim sessionOptions As New SessionOptions With {
  134.             .Protocol = Protocol.Ftp,
  135.             .HostName = HostName,
  136.             .UserName = UName,
  137.             .Password = Pwd
  138.         }
  139.             Using session As New Session
  140.                 session.Open(sessionOptions)
  141.                 '// ลบไฟล์บน Remote ที่ "domains/g2gnet.serv00.net/public_html/uploadimages/" + "ชื่อไฟล์ภาพ+นามสกุล"
  142.                 Dim removalResult As RemovalOperationResult = session.RemoveFiles(imgUrl)
  143.                 '// ตรวจสอบว่าเกิดข้อผิดพลาดหรือไม่
  144.                 removalResult.Check()
  145.                 'MessageBox.Show("ลบไฟล์สำเร็จ!!!", "Complete", MessageBoxButtons.OK, MessageBoxIcon.Information)
  146.             End Using
  147.         Catch ex As Exception
  148.             MessageBox.Show("เกิดข้อผิดพลาด: " & ex.Message, "Report Status", MessageBoxButtons.OK, MessageBoxIcon.Error)
  149.         Finally
  150.             Me.Cursor = Cursors.Default
  151.         End Try
  152.     End Sub

  153.     '// ------------------------------------------------------------------------------------------------
  154.     Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
  155.         picData.Image = Image.FromFile(PictureDefaultPath & "NoImage.gif")
  156.         UploadFileName = ""
  157.         PictureUploadPath = String.Empty
  158.     End Sub

  159.     Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
  160.         Me.Close()
  161.     End Sub

  162.     Private Sub frmLineApiMsgImg_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
  163.         Me.Dispose()
  164.         GC.SuppressFinalize(Me)
  165.         Application.Exit()
  166.     End Sub

  167. #Region "FUNCTION"
  168.     ' / --------------------------------------------------------------------------------
  169.     ' / Get my project path
  170.     ' / AppPath = C:\My Project\bin\debug
  171.     ' / Replace "\bin\debug" with ""
  172.     ' / Return : C:\My Project\
  173.     Function MyPath(ByVal AppPath As String) As String
  174.         '/ MessageBox.Show(AppPath);
  175.         AppPath = AppPath.ToLower()
  176.         '/ Return Value
  177.         MyPath = AppPath.Replace("\bin\debug", "").Replace("\bin\release", "").Replace("\bin\x86\debug", "")
  178.         '// If not found folder then put the \ (BackSlash) at the end.
  179.         If Microsoft.VisualBasic.Right(MyPath, 1) <> Chr(92) Then MyPath = MyPath & Chr(92)
  180.     End Function
  181. #End Region

  182. End Class
คัดลอกไปที่คลิปบอร์ด


Class ในการส่งข้อความและรูปภาพไปยัง Chat Bot ... (LineMessagingAPI.vb)
  1. Imports System.Net.Http
  2. Imports Newtonsoft.Json
  3. Imports System.Text
  4. Imports System.Net.Http.Headers

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

  10.     '// --------------------------------------------------------------------------------
  11.     '// ฟังค์ชั่นในการทดสอบ Bot ตัวเอง
  12.     '// LINE ไม่รองรับการอัปโหลดไฟล์ภาพ โดยตรงจากเครื่องผู้ใช้ (เช่น C:\image.jpg) ผ่าน API ประเภท push หรือ reply message
  13.     '// LINE ต้องการภาพผ่าน URL เท่านั้นโดย :
  14.     '// - originalContentUrl และ previewImageUrl ต้องเป็นลิงก์ HTTPS
  15.     '// - ต้องสามารถเข้าถึงได้โดยสาธารณะ (Public URL)
  16.     '// - รองรับไฟล์ .jpg, .png, .jpeg และไม่เกิน 1MB
  17.     '// --------------------------------------------------------------------------------
  18.     Public Async Function SendImageMessageToLineAsync(message As String, imageUrl As String) As Task
  19.         Try
  20.             Using client As New HttpClient()
  21.                 client.DefaultRequestHeaders.Accept.Add(New System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"))
  22.                 client.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Bearer", AccessToken)

  23.                 Dim url As String = "https://api.line.me/v2/bot/message/push"
  24.                 '// เตรียมรายการข้อความ สร้าง Payload ตามรูปแบบที่ Line API ต้องการ
  25.                 '// Payload คือเนื้อหาข้อมูลที่ส่งไปยัง Line Server ผ่าน API เช่น การส่งข้อความ, การส่งรูปภาพ หรือการสร้าง Flex Message
  26.                 Dim MessagePayload As New List(Of Object)
  27.                 '// ตรวจสอบว่ามีข้อความ
  28.                 If Not String.IsNullOrWhiteSpace(message) Then
  29.                     MessagePayload.Add(New With {
  30.                     .type = "text",
  31.                     .text = message
  32.                 })
  33.                 End If
  34.                 '// ตรวจสอบว่ามี URL รูปภาพ
  35.                 If Not String.IsNullOrWhiteSpace(imageUrl) Then
  36.                     MessagePayload.Add(New With {
  37.                     .type = "image",
  38.                     .originalContentUrl = imageUrl,
  39.                     .previewImageUrl = imageUrl
  40.                 })
  41.                 End If
  42.                 '// สำหรับวิดีโอ
  43.                 'If Not String.IsNullOrEmpty(videoUrl) AndAlso Not String.IsNullOrEmpty(videoPreviewUrl) Then
  44.                 'MessagePayload.Add(New With {
  45.                 'Key .type = "video",
  46.                 'Key .originalContentUrl = videoUrl,
  47.                 'Key .previewImageUrl = videoPreviewUrl
  48.                 '})
  49.                 'End If
  50.                 '// ถ้าไม่มีอะไรส่งเลย ให้แจ้งเตือนแล้วเด้งออกไปเลย
  51.                 If MessagePayload.Count = 0 Then
  52.                     MessageBox.Show("ไม่พบข้อความหรือรูปภาพที่จะส่ง", "No Content", MessageBoxButtons.OK, MessageBoxIcon.Warning)
  53.                     Return
  54.                 End If
  55.                 '// สร้าง Payload ที่จะส่ง
  56.                 Dim Payload = New With {
  57.                     .to = YourUserId,
  58.                     .messages = MessagePayload.ToArray()
  59.                 }
  60.                 '// แปลงเป็น JSON แล้วส่ง
  61.                 Dim JsonPayload As String = JsonConvert.SerializeObject(Payload, Formatting.Indented)
  62.                 '// ตัวอย่าง:
  63.                 '// {
  64.                 '//  "to": "USER_ID",
  65.                 '//  "messages": [
  66.                 '//     {
  67.                 '//       "type": "text",
  68.                 '//       "text": "สวัสดีครับ! นี่คือข้อความจาก Line Messaging API"
  69.                 '//     },
  70.                 '//     {
  71.                 '//       "type": "image",
  72.                 '//       "originalContentUrl": "https://example.com/image.jpg",
  73.                 '//       "previewImageUrl": "https://example.com/image_preview.jpg" (หรือใช้ชื่อไฟล์ภาพ Content ตัวเดียวกันได้เลย)
  74.                 '//     }
  75.                 '//   ]
  76.                 '// }
  77.                 Dim content = New StringContent(JsonPayload, Encoding.UTF8, "application/json")
  78.                 Dim response = Await client.PostAsync(url, content)
  79.                 Dim responseBody = Await response.Content.ReadAsStringAsync()
  80.                 '//
  81.                 If Not response.IsSuccessStatusCode Then
  82.                     MessageBox.Show("เกิดข้อผิดพลาด: " & response.StatusCode & vbCrLf & responseBody, "Report Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
  83.                 End If
  84.                 '// หากต้องการแสดงข้อความแจ้งเตือน
  85.                 'If response.IsSuccessStatusCode Then
  86.                 'MessageBox.Show("ส่งข้อความและรูปภาพสำเร็จ!", "Complete", MessageBoxButtons.OK, MessageBoxIcon.Information)
  87.                 'Else
  88.                 'MessageBox.Show("เกิดข้อผิดพลาด: " & response.StatusCode & vbCrLf & responseBody, "Report Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
  89.                 'End If
  90.             End Using
  91.         Catch ex As Exception
  92.             MessageBox.Show("LINE Exception: " & ex.Message)
  93.         End Try
  94.     End Function
  95. End Class
คัดลอกไปที่คลิปบอร์ด

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


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

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

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

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

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

GMT+7, 2025-5-12 10:53 , Processed in 0.135860 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

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