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

Golang的telegram-bot-api/v5库响应Telegram内联查询遇空指针panic

解决Telegram Bot内联查询空指针panic问题

你代码的核心错误是混淆了内联查询(InlineQuery)和回调查询(CallbackQuery)的处理逻辑——当收到内联查询时,update.CallbackQuery字段是nil,直接访问它的ID、Data等字段自然会触发空指针异常。

以下是处理内联查询的完整可行示例:

package main

import (
	"fmt"
	"log"

	tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
)

func main() {
	// 替换为你的bot token
	botToken := "YOUR_BOT_TOKEN"
	bot, err := tgbotapi.NewBotAPI(botToken)
	if err != nil {
		log.Panic(err)
	}

	bot.Debug = true // 开启调试模式,方便查看请求日志
	log.Printf("Authorized on account %s", bot.Self.UserName)

	updateConfig := tgbotapi.NewUpdate(0)
	updateConfig.Timeout = 60

	updates := bot.GetUpdatesChan(updateConfig)

	for update := range updates {
		// 处理内联查询
		if update.InlineQuery != nil {
			query := update.InlineQuery.Query
			log.Printf("收到内联查询:%s", query)

			// 创建内联查询响应配置
			inlineConfig := tgbotapi.NewInlineConfig(update.InlineQuery.ID)

			// 添加内联查询结果,这里示例添加两个文本结果
			// 结果1:直接返回查询内容
			result1 := tgbotapi.NewInlineQueryResultArticle("1", "你查询的内容", query)
			result1.Description = "返回你输入的查询文本"
			inlineConfig.Results = append(inlineConfig.Results, result1)

			// 结果2:固定文本示例
			result2 := tgbotapi.NewInlineQueryResultArticle("2", "固定回复", "这是一个内联查询的固定回复示例")
			result2.Description = "展示固定内容的内联结果"
			inlineConfig.Results = append(inlineConfig.Results, result2)

			// 发送内联查询响应
			if _, err := bot.Request(inlineConfig); err != nil {
				log.Println("发送内联响应失败:", err)
			}
		}

		// 如果你需要同时处理回调查询,可以单独加这个分支
		if update.CallbackQuery != nil {
			// 处理回调按钮的逻辑
			callback := tgbotapi.NewCallback(update.CallbackQuery.ID, update.CallbackQuery.Data)
			if _, err := bot.Request(callback); err != nil {
				log.Println("发送回调响应失败:", err)
			}

			// 给用户发送回调数据提示
			msg := tgbotapi.NewMessage(update.CallbackQuery.Message.Chat.ID, "你触发了回调:"+update.CallbackQuery.Data)
			if _, err := bot.Send(msg); err != nil {
				log.Println("发送消息失败:", err)
			}
		}
	}
}

关键说明:

  • 内联查询的核心是返回InlineQueryResult集合给用户,而非处理CallbackQuery
  • 必须先在BotFather中给你的bot开启内联模式(发送/setinline,按提示完成配置)
  • 每个内联结果需要唯一ID(示例中用"1"、"2",实际可用UUID等更唯一的值)
  • 除文本结果外,还可返回图片、视频、文档等类型的内联结果,参考库的NewInlineQueryResult*系列函数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:50:22