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

如何在Kotlin的Spring Boot项目中给Telegram机器人发送文件?

解决TelegramBots库发送文件的问题

1. 正确初始化SendDocument的方式

你遇到的SendDocumentBuilder包私有问题,是因为该库的Builder类属于内部实现,并未对外公开。在6.3.0版本中,正确创建SendDocument实例有两种可行方式:

方式一:直接实例化并设置属性

通过构造器创建对象后手动配置必要参数:

val sendDocument = SendDocument()
// 设置目标聊天ID(支持字符串或Long类型)
sendDocument.chatId = "目标聊天ID"
// 设置文件,支持三种类型:
// 1. 本地文件(需转换为InputFile)
sendDocument.document = InputFile(File("/path/to/your/file.pdf"))
// 2. Telegram服务器已存在的文件ID
// sendDocument.document = InputFile("已上传的文件ID")
// 3. 可公网访问的文件URL
// sendDocument.document = InputFile(URL("https://example.com/file.pdf"))

// 可选:设置文件说明标题
sendDocument.caption = "这是一份测试文件"

方式二:使用静态工厂方法快速初始化

SendDocument提供了静态fromChatId方法简化创建流程:

val sendDocument = SendDocument.fromChatId("目标聊天ID", InputFile(File("/path/to/your/file.pdf")))
// 可选补充标题
sendDocument.caption = "请查收文件"

2. 发送文件的执行流程

创建好SendDocument实例后,直接在你的LongPolling机器人实现类中调用execute方法即可,无需切换WebHook或直接调用Telegram API端点:

// 你的LongPollingBot实现类中
override fun onUpdateReceived(update: Update?) {
    // 触发发送文件的条件(比如收到特定指令)
    if (update?.message?.text == "/sendfile") {
        val chatId = update.message.chatId.toString()
        val sendDocument = SendDocument.fromChatId(chatId, InputFile(File("test.pdf")))
        sendDocument.caption = "测试文件发送"
        try {
            execute(sendDocument)
        } catch (e: TelegramApiException) {
            e.printStackTrace()
        }
    }
}

3. 库API的限制说明

  • SendDocumentBuilder确实为包私有,属于库内部实现逻辑,对外不开放直接调用,这是API设计的正常限制。
  • LongPolling模式完全支持发送文件,无需切换到WebHook,也不需要绕过库直接调用Telegram API端点。
  • 发送文件需遵守Telegram API的基础限制:普通文件最大50MB,压缩包类文件最大1.5GB;本地文件需确保机器人进程有读取权限;网络文件URL需能被Telegram服务器正常访问。

额外提示

如果需要发送图片、音频等其他类型的文件,可以使用对应的实体类(如SendPhoto、SendAudio),创建和发送逻辑与SendDocument完全一致,都是直接实例化或用静态工厂方法构建对象后调用execute。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 00:25:28