You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel VBA如何通过Telegram Bot API发送本地图片到群组

错误原因
  • 你设置了multipart/form-data的请求头但没有配套传入符合格式的请求体,仍然用普通键值对字符串拼接的方式传参,不符合multipart格式要求,且缺少必填的boundary(分隔符)参数
  • 没有读取本地图片的二进制内容,仅传入了本地文件路径字符串,Telegram API无法访问你本地的文件路径
  • MSXML2.XMLHTTP发送文件时需要传入二进制类型的请求体,而不是字符串类型的datos_posteo
修复后的可用代码
Private Sub telegram_pruebas_photo()
    Dim objRequest As Object
    Dim stream As Object
    Dim boundary As String
    Dim token As String, ChatID As String, photoPath As String
    
    ' 替换为你自己的Bot Token、聊天ID、图片路径
    token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    ChatID = "-xxxxxxxxxxx" ' 注意群组ID的负号要保留
    photoPath = "C:\documents\SCREENSHOT\picture1.jpg"
    
    ' 生成唯一分隔符,避免和文件内容重复
    boundary = "---------------------------" & VBA.Format(VBA.Now(), "HHmmssfff")
    
    ' 用二进制流构造multipart格式的请求体
    Set stream = CreateObject("ADODB.Stream")
    With stream
        .Type = 1 ' 设为二进制模式
        .Open
        ' 写入chat_id参数
        .WriteText "--" & boundary & vbCrLf
        .WriteText "Content-Disposition: form-data; name=""chat_id""" & vbCrLf & vbCrLf
        .WriteText ChatID & vbCrLf
        
        ' 写入图片参数和文件二进制内容
        .WriteText "--" & boundary & vbCrLf
        .WriteText "Content-Disposition: form-data; name=""photo""; filename=""" & Mid(photoPath, InStrRev(photoPath, "\") + 1) & """" & vbCrLf
        .WriteText "Content-Type: image/jpeg" & vbCrLf & vbCrLf
        .LoadFromFile photoPath
        .Position = stream.Size
        .WriteText vbCrLf
        
        ' 写入结束分隔符
        .WriteText "--" & boundary & "--" & vbCrLf
        .Position = 0
    End With
    
    ' 发送请求
    Set objRequest = CreateObject("MSXML2.XMLHTTP")
    With objRequest
        .Open "POST", "https://api.telegram.org/bot" & token & "/sendPhoto", False
        ' 请求头要带上分隔符参数
        .setRequestHeader "Content-Type", "multipart/form-data; boundary=" & boundary
        .send stream.Read
        MsgBox .responseText ' 成功会返回包含图片信息的JSON,失败会返回错误提示
    End With
    
    ' 释放资源
    stream.Close
    Set stream = Nothing
    Set objRequest = Nothing
End Sub
注意事项
  • 请确认你的Bot已经被加入目标群组,且拥有发送消息的权限
  • sendPhoto接口最大支持10MB的JPG/PNG格式图片,超过大小会发送失败
  • 如果运行提示找不到ADODB.Stream,可在VBA编辑器的「工具」-「引用」中勾选「Microsoft ActiveX Data Objects 6.1 Library」

内容的提问来源于stack exchange,提问作者Juan049

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:12:01