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

使用telegram-bot-sdk开发Laravel Telegram机器人如何实现用户输入自动回复?

实现Telegram机器人自动回复操作步骤

1. 配置Webhook接收用户消息推送

Telegram会将用户发送的消息主动推送到你配置的公网地址,这是实现自动回复的核心基础:

  • 首先在app/Http/Middleware/VerifyCsrfToken.php中添加路由白名单,排除Telegram请求的CSRF校验:
protected $except = [
    '/telegram/webhook',
];
  • 在routes/api.php或者routes/web.php中注册Webhook路由:
use App\Http\Controllers\TelegramController;

Route::post('/telegram/webhook', [TelegramController::class, 'webhook']);
  • 调用接口给Telegram服务端设置你的Webhook地址,注意地址必须为HTTPS协议:
    你可以直接在临时路由中执行一次下面的代码,设置成功后就可以删掉:
Telegram::setWebhook(['url' => 'https://你的域名/telegram/webhook']);

2. 编写消息处理逻辑

在你的TelegramController中新增webhook方法,处理Telegram推送的用户消息并回复:

class TelegramController extends Controller {
    // 你原有主动发消息的index方法保留
    public function index(){
        $chatID = 'xxxxxxx';
        Telegram::sendMessage([
            'chat_id' => $chatID,
            'text' => '[▼皿▼]'
        ]);
    }

    // 新增Webhook处理方法
    public function webhook()
    {
        // 获取Telegram推送的更新数据
        $update = Telegram::getWebhookUpdate();
        // 提取用户发送的内容和对应聊天ID
        $chatId = $update->getMessage()->getChat()->getId();
        $userInput = $update->getMessage()->getText();

        // 自定义回复逻辑,支持按用户输入匹配回复
        $replyContent = match($userInput) {
            // 用户首次发起对话会自动发送/start命令,在这里配置主动发送的欢迎语
            '/start' => '你好!欢迎使用本机器人,请问需要什么帮助?',
            '你好' => '你好呀😉',
            default => '我收到了你发送的内容:' . $userInput,
        };

        // 给用户发送回复
        Telegram::sendMessage([
            'chat_id' => $chatId,
            'text' => $replyContent
        ]);

        // 返回200响应告知Telegram已成功接收消息,无需重复推送
        return response('ok', 200);
    }
}

开发环境临时测试方案

如果本地开发没有HTTPS公网地址,可以用长轮询的方式测试功能:
在routes/console.php中添加自定义命令:

Artisan::command('telegram:poll', function () {
    $lastUpdateId = 0;
    while (true) {
        // 拉取最新的用户消息,超时时间设为60秒
        $updates = Telegram::getUpdates([
            'offset' => $lastUpdateId + 1,
            'timeout' => 60
        ]);
        foreach ($updates as $update) {
            $lastUpdateId = $update->getUpdateId();
            $chatId = $update->getMessage()->getChat()->getId();
            $userInput = $update->getMessage()->getText();
            // 执行和Webhook一样的回复逻辑
            Telegram::sendMessage([
                'chat_id' => $chatId,
                'text' => '测试回复:收到你发送的' . $userInput
            ]);
        }
    }
})->describe('Telegram长轮询测试');

本地测试时执行php artisan telegram:poll命令即可实时接收用户消息并回复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:06:03