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

俄罗斯地区php-telegram-bot/core开发的Bot被屏蔽后如何发消息?

解决俄罗斯部署的Telegram Bot无法发送消息的问题

我之前也碰到过一模一样的情况,俄罗斯地区对Telegram官方API的直连限制确实会导致Bot发不出消息,通过给Guzzle客户端配置代理就能解决这个问题,我给你整理了完整的实现方案:

完整代码示例

首先要在设置Guzzle客户端的时候加上代理配置,推荐用socks5类型的代理(在俄罗斯地区稳定性比HTTP代理高很多),代码如下:

<?php
require 'vendor/autoload.php';

use Longman\TelegramBot\Telegram;
use Longman\TelegramBot\Request;

// 初始化Bot实例
$telegram = new Telegram('你的API密钥', '你的Bot用户名');

// 配置带代理的Guzzle客户端
$proxyClient = new \GuzzleHttp\Client([
    'base_uri' => 'https://api.telegram.org',
    // 替换成你的实际代理信息,支持带账号密码的认证代理
    'proxy' => [
        'http'  => 'socks5://代理用户名:代理密码@代理地址:端口',
        'https' => 'socks5://代理用户名:代理密码@代理地址:端口',
    ],
    // 可选:设置超时时间,防止请求长时间卡住无响应
    'timeout' => 15,
]);

// 给Request组件绑定这个带代理的客户端
Request::setClient($proxyClient);

// 测试发送消息
$messageData = [
    'chat_id' => 12345678, // 替换成目标用户的chat_id
    'text'    => '这是通过代理发送的测试消息',
];

try {
    $sendResult = Request::sendMessage($messageData);
    echo "消息发送成功:" . $sendResult->getDescription();
} catch (\Longman\TelegramBot\Exception\TelegramException $e) {
    echo "发送失败:" . $e->getMessage();
}

关键注意事项

  • 代理类型选择:优先用socks5代理,HTTP代理在俄罗斯地区大概率也会被屏蔽,socks5的穿透性和稳定性更好。
  • 代理可用性测试:配置前先手动验证代理是否能访问Telegram API,比如用curl命令:
    curl -x socks5://代理用户名:代理密码@代理地址:端口 https://api.telegram.org/bot<你的API密钥>/getMe
    
    如果能返回Bot的基础信息,说明代理是可用的。
  • 代理认证信息:如果你的代理需要账号密码,一定要按用户名:密码@地址:端口的格式正确填写,漏填或格式错误都会导致代理失效。
  • SSL验证:尽量不要关闭verify选项(默认是开启状态),除非代理使用自签证书,否则会带来安全风险。

另外,如果你不想用代理,也可以尝试Telegram的备用API地址https://api.core.telegram.org,但这个地址在俄罗斯同样可能被屏蔽,所以代理还是最稳妥的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:39:48