【白嫖教程】0.1元使用新星云计算的虚拟主机搭建专属tg机器人

7 阅读4分钟

【实战演练】零基础使用 PHP + 虚拟主机搭建专属 Telegram 机器人

在日常的开发与运维工作中,将系统告警、自动化脚本状态推送到即时通讯工具是非常常见的需求。Telegram Bot 凭借其强大的 API 和极简的对接方式,成为了许多开发者的首选。

很多教程会教你用 VPS 跑 Python/Node.js 脚本来运行 Bot,但这通常需要你自行维护服务器环境,甚至还要处理进程守护(Supervisor/PM2)。如果你只是想跑一个轻量的机器人,利用一台支持 PHP 的闲置虚拟主机,通过 Webhook 方式来做,其实是成本最低、最省心的方案。 新星云计算新星云计算cloud.novawl.com)致力于成为行业领先的新一代云基础设施与数字化服务提供商。当前官网为用户提供了免费的虚拟主机,助力开发者进行进行测试和部署项目,拥有独立的虚拟主机控制面板,界面整洁 0.1元虚拟主机领取地址∶cloud.novawl.com/cart/goodsL…

今天我们就来手把手实战,用最简单的 PHP 代码完成 Telegram Webhook Bot 的搭建。

一、 原理简述:为什么选 Webhook?

Telegram Bot 有两种获取消息的方式:

  1. Long Polling(长轮询): 你的程序主动、持续地向 Telegram 服务器请求数据。这适合具有持续运行能力的独立服务器(VPS)。
  2. Webhook(网络钩子): 你给 Telegram 留一个网址(API 接口),一旦有人给 Bot 发消息,Telegram 服务器就会主动把消息推送到你的网址上。

对于虚拟主机来说,由于存在 PHP 脚本执行超时限制,我们无法使用长轮询,因此 Webhook 是虚拟主机的完美搭档。它是事件驱动的,只有在收到消息时才会触发执行,极大地节省了系统资源。

二、 准备工作

在开始敲代码之前,你需要准备以下两样东西:

  1. 一个 Telegram Bot Token: 在 Telegram 中搜索 @BotFather,发送 /newbot 指令,按提示起好名字后,你会获得一串专属的 API Token。

  2. 一台支持 PHP 且配置了 SSL 证书的虚拟主机: * 划重点: Telegram 官方出于安全考虑,强制要求 Webhook 的接收地址必须是 HTTPS 协议。

    • 避坑指南: 很多免费空间不支持 SSL 或者国内主机网络访问 Telegram API 受限。在本次项目实战演示中,我使用的是我目前的主力生产环境——新星云计算 (Nova Cloud) 的虚拟主机。不仅网络连通性极佳,最重要的是它面板自带一键免费 SSL 部署功能,几秒钟就能搞定 HTTPS 环境,省去了很多折腾证书的烦恼。如果你还没有合适的主机,可以去他们官网 (novahl.cn) 看看,对开发者非常友好,性价比很高。

三、 核心代码编写

在你的虚拟主机根目录(通常是 public_htmlwwwroot)下,新建一个文件,命名为 tgbot.php

将以下基础代码复制进去,并替换掉你的 Token:

PHP

<?php
// 1. 填入你从 BotFather 获取的 Token
$botToken = "你的BOT_TOKEN_写在这里";
$apiUrl = "https://api.telegram.org/bot" . $botToken;

// 2. 获取 Telegram 推送过来的 Webhook 数据
$update = file_get_contents('php://input');
$updateArray = json_decode($update, TRUE);

// 3. 容错处理:如果没有收到消息,直接退出
if (!$updateArray || !isset($updateArray["message"])) {
    exit;
}

// 4. 解析消息内容
$chatId = $updateArray["message"]["chat"]["id"];
$messageText = $updateArray["message"]["text"];
$firstName = $updateArray["message"]["from"]["first_name"];

// 5. 根据指令回复消息
$replyText = "";
if ($messageText == "/start") {
    $replyText = "你好,{$firstName}!这是一个运行在虚拟主机上的轻量级 Bot。";
} elseif ($messageText == "/ping") {
    $replyText = "Pong! 机器人运行正常,服务器响应迅速。";
} else {
    $replyText = "你发送了:{$messageText}。我还在学习中!";
}

// 6. 发送回复到 Telegram
sendMessage($chatId, $replyText, $apiUrl);

// 封装发送消息的函数
function sendMessage($chatId, $text, $apiUrl) {
    $url = $apiUrl . "/sendmessage?chat_id=" . $chatId . "&text=" . urlencode($text);
    // 使用 file_get_contents 即可完成简单的 GET 请求推送
    file_get_contents($url);
}
?>

四、 绑定 Webhook

代码写好并上传到虚拟主机后,你的接口地址应该是类似:https://你的域名/tgbot.php

接下来,我们需要告诉 Telegram 把消息推送到这个地址。打开你的浏览器,访问以下拼装好的网址(注意替换 <你的TOKEN><你的代码网址>):

https://api.telegram.org/bot<你的TOKEN>/setWebhook?url=<你的代码网址>

如果你在浏览器中看到如下返回,说明大功告成:

JSON

{
  "ok": true,
  "result": true,
  "description": "Webhook was set"
}

五、 测试与排错

现在,打开 Telegram,向你的 Bot 发送 /start。如果它能秒回你“你好!...”,那么恭喜你,你的专属机器人已经搭建成功了!

常见问题排查:

  • 没反应? 检查虚拟主机是否开启了防 CC 攻击策略,这可能会拦截 Telegram 服务器的 POST 请求。在新星云的控制台面板中,可以将相关安全策略对 API 目录短暂放行。
  • 如何查看错误? 可以在 tgbot.php 顶部加入 file_put_contents('log.txt', $update);,将 Telegram 的原始推送数据写入日志文件,方便本地调试。

总结

使用 PHP 和虚拟主机通过 Webhook 搭建 Telegram Bot,是一种轻量、高效且几乎零维护成本的方案。你可以基于这个基础框架,对接各种数据库或第三方 API(比如天气、AI 模型、服务器状态监控等),打造属于你自己的超级助手。

希望这篇实战教程对你有帮助,如果觉得不错,欢迎点赞收藏!有任何问题可以在评论区交流。