如何用Python/PHP从个人Telegram账号向未知Token的Bot发消息?
从个人Telegram账号向未知Token的Bot发送消息的实现方案
核心结论
可行,但无法通过你之前使用的Bot API实现——因为Bot API是专供Bot账号使用的接口,个人账号发送消息需要借助Telegram底层的MTProto协议,通过第三方封装库来模拟个人用户的行为。
为什么原有方法不可用
你之前的代码调用的是https://api.telegram.org/bot{TOKEN}/sendMessage接口,这是Bot专属的API:
- 必须提供Bot的Token才能完成认证
- 本质是让Bot主动发起消息,而非个人账号主动发送
Python实现方案(以Pyrogram为例)
Pyrogram是封装了MTProto协议的Python库,支持个人账号登录和消息操作:
- 安装依赖:
pip install pyrogram tgcrypto
- 获取个人账号的API ID和API Hash:
前往Telegram官方开发者页面注册应用,获取对应的API ID和Hash(这是个人账号的凭证,不是Bot Token) - 代码示例:
from pyrogram import Client # 替换为你的API信息和账号手机号 api_id = 123456 api_hash = "你的API Hash字符串" phone_number = "+8613xxxxxxxxx" # 替换为目标Bot的username(比如@exampleBot) bot_username = "@exampleBot" message_text = "Hello from my personal account!" with Client("my_account", api_id, api_hash, phone_number=phone_number) as app: # 获取Bot的聊天对象 bot_chat = app.get_users(bot_username) # 发送消息 app.send_message(bot_chat.id, message_text) print("消息发送成功")
PHP实现方案(以MadelineProto为例)
MadelineProto是PHP生态中成熟的MTProto封装库:
- 安装依赖:
composer require danog/madelineproto
- 同样需要先获取个人账号的API ID和Hash
- 代码示例:
<?php require 'vendor/autoload.php'; use danog\MadelineProto\MadelineProto; $settings = [ 'app_info' => [ 'api_id' => 123456, // 替换为你的API ID 'api_hash' => '你的API Hash字符串', ], ]; $MadelineProto = new MadelineProto($settings); // 登录个人账号(首次运行会提示输入手机号和验证码) $MadelineProto->start(); // 替换为目标Bot的username $bot_username = "@exampleBot"; $message_text = "Hello from my personal account!"; // 发送消息 $MadelineProto->messages->sendMessage([ 'peer' => $bot_username, 'message' => $message_text, ]); echo "消息发送成功"; ?>
注意事项
- 必须先在Telegram客户端中与目标Bot发起过对话(或Bot设置允许陌生人发消息),否则无法发送
- 个人账号的API ID/Hash需妥善保管,泄露可能导致账号被盗
- 需遵守Telegram服务条款,避免滥用此方式发送垃圾信息
内容的提问来源于stack exchange,提问作者Lechani Houssam
相关产品推荐
相关产品推荐

