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

Telegram API认证问题:Python调用auth.sentCode遇404,如何获取OTP?

解决Telegram auth.sentCode调用返回"not found"的问题

核心原因是你误解了Telegram API的调用方式:auth.sentCode是MTProto协议的构造器,不是REST接口,直接用Postman发起普通HTTP请求必然会返回404——Telegram的MTProto API不支持这种调用方式,需要遵循MTProto的二进制协议规范,或者用封装好的Python库来处理底层逻辑。

用Python调用auth.sentCode的正确方式

推荐使用Telethon或Pyrogram这两个成熟的MTProto客户端库,它们已经封装了所有底层协议细节,直接调用对应的方法即可获取OTP。

示例1:使用Telethon

  1. 安装库:
pip install telethon
  1. 代码实现:
    首先你需要去Telegram开发者平台申请API ID和API Hash(登录你的Telegram账号,创建一个应用就能拿到)。
from telethon import TelegramClient

# 替换成你的API信息和手机号
API_ID = 123456
API_HASH = 'your_api_hash_here'
PHONE_NUMBER = '+8613xxxxxxxxx'  # 必须带国际区号

client = TelegramClient('session_name', API_ID, API_HASH)

async def send_otp():
    await client.connect()
    # 发送验证码请求,对应auth.sentCode
    result = await client.send_code_request(PHONE_NUMBER)
    print(f"验证码已发送,类型:{result.type},验证码哈希:{result.phone_code_hash}")
    await client.disconnect()

if __name__ == '__main__':
    import asyncio
    asyncio.run(send_otp())

示例2:使用Pyrogram

  1. 安装库:
pip install pyrogram tgcrypto
  1. 代码实现:
from pyrogram import Client

API_ID = 123456
API_HASH = 'your_api_hash_here'
PHONE_NUMBER = '+8613xxxxxxxxx'

app = Client('my_account', api_id=API_ID, api_hash=API_HASH)

async def send_otp():
    await app.connect()
    # 发送验证码请求
    phone_code_hash = await app.send_code(PHONE_NUMBER)
    print(f"验证码已发送,哈希:{phone_code_hash}")
    await app.disconnect()

if __name__ == '__main__':
    import asyncio
    asyncio.run(send_otp())

关键注意事项

  • 必须使用你自己的API ID和Hash,否则会被拒绝请求
  • 手机号必须包含国际区号(比如+86、+1),不能只用本地号码
  • 如果频繁请求可能触发Telegram的风控机制,会限制发送验证码,此时需要等待一段时间或使用代理
  • Postman无法直接调用MTProto构造器,因为它不支持MTProto的二进制序列化、认证等底层逻辑,只能用专用的MTProto客户端库

内容的提问来源于stack exchange,提问作者Mohammad Amin Gharbavian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:52:37