使用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
相关产品推荐
相关产品推荐

