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

Telethon调用iter_messages传入None执行全局搜索无结果问题咨询

问题描述

使用Python第三方库Telethon对接Telegram API做开发时,指定用户ID作为iter_messages方法的实体参数,可以正常基于关键词检索、收集特定用户的匹配消息,可正常运行的代码如下:

import config
from telethon import TelegramClient
from telethon.errors import SessionPasswordNeededError
from telethon.sync import TelegramClient
from telethon import functions, types
import datetime
import asyncio


api_id = config.telegram_crawler_secrets_and_settings['TELEGRAM_API_ID']
api_hash = config.telegram_crawler_secrets_and_settings['TELEGRAM_API_HASH']
phone = config.telegram_crawler_secrets_and_settings['TELEGRAM_API_PHONE_NUMBER']


async def main():
    async with TelegramClient('anon', api_id, api_hash) as client:
        async for message in client.iter_messages(5067150042, limit=10, search='hello', wait_time=0):
            print(message.stringify())
            await asyncio.sleep(0.2)


asyncio.run(main())

根据项目公开issue说明,将iter_messages方法的实体参数替换为None,即可跨公共频道执行全局消息搜索,但按如下方式修改代码后,始终无法获取搜索结果:

async def main():
    async with TelegramClient('anon', api_id, api_hash) as client:
        async for message in client.iter_messages(None, limit=10, search='hello', wait_time=0):
            print(message.stringify())
            await asyncio.sleep(0.2)


asyncio.run(main())
排查思路与解决方案
  • 校验账号类型与登录状态
    全局跨频道搜索仅对完成完整登录流程的普通用户账号开放,Bot账号无该接口权限;同时确认当前会话已完成手机号校验、两步验证(若账号开启了二次密码),未处于登录受限状态。
  • 补全必填参数、调整请求频率
    传入entity=None触发全局搜索时,需要显式传入filter参数指定消息过滤规则,否则接口会默认按当前对话的过滤规则匹配,直接返回空结果;另外Telegram服务端对全局搜索接口有严格的频率限制,将wait_time设为0极易触发临时限流,建议调整为1~2秒的请求间隔。
    修正后的调用示例:
    from telethon.tl.types import InputMessagesFilterEmpty
    
    async def main():
        async with TelegramClient('anon', api_id, api_hash) as client:
            async for message in client.iter_messages(
                entity=None,
                limit=10,
                search='hello',
                filter=InputMessagesFilterEmpty(),
                wait_time=1
            ):
                print(message.stringify())
                await asyncio.sleep(0.2)
    
    asyncio.run(main())
    
  • 升级Telethon到最新稳定版本
    早期1.x版本的Telethon对entity=None场景的参数拼接存在逻辑bug,会导致全局搜索请求参数不符合Telegram接口要求,直接执行版本升级即可修复:
    pip install --upgrade telethon
    
  • 排除关键词与节点限制
    若搜索关键词命中Telegram内容审核规则,会直接返回空结果,可先使用公开频道高频出现的普通通用词测试接口可用性;另外部分接入节点会限制全局搜索功能,可先在同账号的官方Telegram客户端手动执行相同关键词的全局搜索,确认官方客户端能正常返回公共频道结果后,再调试脚本,排除网络、节点层面的拦截问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:00:53