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

基于Telegraf开发Telegram Bot:实时内联搜索实现咨询

用Telegraf实现Telegram Bot实时内联搜索指南

嘿,刚好做过类似的功能,用Telegraf实现这种@gif风格的实时内联搜索其实逻辑很清晰,我给你拆解下核心要点和实操步骤~

先搞懂核心原理

你要的实时搜索效果,本质是Telegram的Inline Mode:用户在聊天框输入@你的Bot名 关键词时,Bot会实时接收查询请求,返回结构化的结果列表,用户点击条目后直接把对应内容发送到聊天中。

Telegraf里的关键工具

Telegraf已经把Telegram的Inline Mode做了友好封装,核心用到这几个:

  • bot.on('inline_query', handler):监听用户发起的内联查询事件,用户输入@Bot名 关键词就会触发这个回调。
  • ctx.answerInlineQuery(results, options):向用户返回搜索结果的核心方法,第一个参数是符合格式的结果数组,第二个是配置项(比如缓存时间)。
  • InlineQueryResult系列类型:Telegram要求返回的结果必须是指定格式的对象,常用的article类型适合文本/链接类内容,gif/photo则对应多媒体内容。

一步步落地实现

1. 先给Bot开Inline Mode权限

这步很容易忘!打开Telegram找BotFather,发送/setinline,选择你的Bot,然后设置提示文字(比如"输入关键词搜索内容"),这样用户输入@你的Bot名时会看到引导提示。

2. 编写核心代码示例(Telegraf v4)

下面是完整的可运行示例,我加了详细注释:

const { Telegraf } = require('telegraf');
// 替换成你的Bot Token
const bot = new Telegraf('YOUR_BOT_TOKEN');

// 监听内联查询事件
bot.on('inline_query', async (ctx) => {
  // 获取用户输入的搜索关键词
  const userQuery = ctx.inlineQuery.query.trim();

  // 这里替换成你的真实搜索逻辑:调用第三方API、查询数据库等
  // 用模拟数据演示效果
  let searchResults = [];
  if (userQuery) {
    // 假设搜索到两条结果
    searchResults = [
      {
        id: 'res_1',
        title: `${userQuery} - 结果1`,
        desc: '这是第一条搜索结果的描述',
        content: `你选择了【${userQuery} - 结果1】`
      },
      {
        id: 'res_2',
        title: `${userQuery} - 结果2`,
        desc: '这是第二条搜索结果的描述',
        content: `你选择了【${userQuery} - 结果2】`
      }
    ];
  } else {
    // 用户未输入关键词时的引导提示
    searchResults = [
      {
        id: 'default',
        title: '请输入关键词',
        desc: '输入后会实时展示搜索结果',
        content: '你还没有输入搜索关键词哦~'
      }
    ];
  }

  // 把自定义结果转换成Telegram要求的格式
  const inlineResults = searchResults.map(item => ({
    type: 'article', // 结果类型:文章(适合文本内容)
    id: item.id, // 每个结果的唯一ID,不能重复
    title: item.title, // 结果标题(用户可见)
    description: item.desc, // 结果描述(用户可见)
    // 用户点击后发送到聊天的内容
    input_message_content: {
      message_text: item.content
    }
  }));

  // 返回结果:cache_time设为0表示实时更新,不缓存旧结果
  await ctx.answerInlineQuery(inlineResults, { cache_time: 0 });
});

// 启动Bot
bot.launch();

3. 优化与注意事项

  • 缓存控制:cache_time默认300秒(5分钟),实时搜索建议设为0,确保用户每次输入都触发新查询;静态内容可以设长一点减少服务器压力。
  • 结果数量限制:Telegram最多允许返回50个结果,你的搜索逻辑要把结果数控制在50以内。
  • 响应时效:Telegram要求内联查询必须在3秒内完成,调用第三方API时要确保接口响应快,避免超时。
  • 多媒体适配:如果要做@gif那样的动图搜索,只需把type改成gif,并配置gif_url等对应字段即可,Telegraf支持所有Telegram定义的结果类型。

测试方法

启动Bot后,打开任意聊天框,输入@你的Bot名 测试关键词,就能看到实时弹出的搜索结果列表,点击条目会自动把内容发送到聊天中~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:28:56