过去几年,聊天机器人的受欢迎程度一直在增长,这是因为它具有强大的功能和可靠性,可以处理某些业务案例。而且,Bot得到了许多即时消息传递服务提供商的支持,例如Telegram,Line,Facebook等。另一方面,Laravel是构建用PHP编写的Web应用程序的最受欢迎的框架之一。
在本文中,我们将尝试为Telegram消息传递平台创建一个简单的聊天机器人。本教程将涵盖一些主题,例如:
- 创建新的Laravel项目。
- 创建电报机器人。
- 将您的Telegram机器人集成到Laravel。
- 处理Telegram机器人更新。
- 正在发送消息。
- 下一步是什么?
入门
在开始之前,有一些要求:
- 确保在工作计算机中安装了Composer。如果尚未安装,请访问Composer官方网站并按照说明进行安装。
- PHP编程语言的基本知识。
- 电报帐户和设备中安装的电报应用程序。
本教程的完整代码示例可在GitHub存储库中找到。
yongkylie / 电报-laravel-教程
Laravel Framework的Telegram Bot教程
创建一个新的Laravel项目
您可以根据需要在计算机的任何目录中启动一个新的Laravel项目。有关创建新的Laravel项目的更多信息,请查看官方文档中的说明。
让我们开始吧!
打开终端,然后在本地目录中运行:
composer create-project --prefer-dist laravel/laravel blog
现在,您应该具有blog
包含Laravel项目的文件夹。通过运行进入该目录cd blog
。
为确保一切按计划进行,请进入blog
目录并运行php artisan serve
以启动我们刚刚创建的Web服务器。您的应用程序应在运行localhost:8000
。
创建电报机器人
大!现在,我们已经准备好启动Laravel项目。接下来,让我们创建我们的电报机器人!如果您想了解有关Telegram机器人的更多信息,我希望您在这里进行探索。
首先,打开您的Telegram应用程序,然后找到@botfather 。BotFather是由Telegram创建的用于管理和统治所有其他机器人的机器人(想象一下BotFather是所有机器人的教父)。
点按,开始与BotFather对话Start
。之后,键入/ newbot并按照提供的所有说明进行操作。在交互结束时,您将获得如下确认信息:
做完了!祝贺您的新机器人。您可以在t.me/YOUR_BOT_USERNAME上找到它。现在,您可以添加有关机器人的部分和个人资料图片的描述,请参阅/ help以获取命令列表。顺便说一句,当您完成酷机器人的创建后,如果您想要一个更好的用户名,请ping我们的Bot支持。在执行此操作之前,只需确保机器人已完全运行即可。
使用此令牌访问HTTP API:
有关Bot API的描述,请参见以下页面:https : //core.telegram.org/bots/api
在BotFather发送的消息中,您将获得机器人的访问令牌。我们将使用此令牌来识别您的机器人并作为您的机器人的秘密签名密钥。确保您将令牌保密!如果其他人获得了您的令牌,他们可以代表您的机器人访问并执行命令。
好的!现在我们的Bot,BOT_TOKEN
Laravel项目已经准备就绪!
将Telegram Bot与Laravel集成
在本教程中,我们将使用telegram-bot-sdk。此SDK可帮助我们从Laravel项目轻松地执行任何方法或操作。这次,我们将使用dev-develop
版本(稳定版本已经过时; v3.0成为稳定版本后,本文将进行更新)。
转到我们的Laravel项目目录并运行composer require irazasyed/telegram-bot-sdk dev-develop
。然后,在安装完成后,运行php artisan vendor:publish
以发布电报配置文件。配置文件现在应该位于中config/telegram.php
。
现在,让我们连接到目前为止已完成的所有工作!在内部,telegram.php
您应该看到许多有关该机器人的配置。让我们看一下"bots"
关键。在其中mybotkey
,将用户名值更改为Telegram bot用户名,并将令牌值更改access token
为BotFather所给的值。
处理电报更新
现在,我们获得了与项目链接的Bot访问令牌。接下来,让我们处理电报更新。
什么是电报更新?根据官方文档,
与您的漫游器建立的每个交互用户都称为更新。每个更新都将格式化为JSON序列化的对象。
因此,更新是一个对象,其中包含与我们的漫游器进行的所有交互。例如,当有人与我们的机器人发起聊天时,将进行更新。或者,当我们的漫游器添加到聊天组/超级组中时,将进行更新。
要访问电报更新,我们将进行新的API路由进行测试。在内部routes/api.php
,让我们进行一条新的API路由以获取电报更新,如下所示。
<?php
use Illuminate\Http\Request;
use Telegram;
...
Route::post('/bot/getupdates', function() {
$updates = Telegram::getUpdates();
return (json_encode($updates));
});
好的!我们调用了API路由/bot/getupdates
来接收来自Telegram服务器的更新。而且,不要忘记使用Telegram
类。通过成功获取更新,我们可以选择如何与用户对我们的机器人所做的每个操作相应地采取行动,包括邀请聊天组,处理命令或仅回复聊天。
这种获取更新的方法是使用长时间轮询来获取更新。对于高级用法,您可以设置webhook以获得更好的用户体验。
传送讯息
真正的乐趣,发送消息。
在本节中,我们将尝试向组,超级组,频道或仅向单个用户发送消息。我们将使用sendMessage
方法发送消息。在内部routes/api.php
,让我们进行如下所示的新API路由:
<?php
...
Route::post('bot/sendmessage', function() {
Telegram::sendMessage([
'chat_id' => 'RECIPIENT_CHAT_ID',
'text' => 'Hello world!'
]);
return;
});
...
让我们详细了解一下刚才编写的代码。如我们所见,sendMessage
收到的参数很少:
chat_id
:这是收件人的聊天ID。每个用户,频道,组或超级组都有自己的唯一聊天ID。要获取chat_id
,最简单的方法是尝试与我们的机器人聊天,并通过getUpdates
方法获取chat_id 。对于群组,超级群组或频道,我们需要首先邀请漫游器作为成员来获取chat_id
。text
:将作为消息发送的字符串或整数。
注意:仅当特定用户开始与机器人进行对话时,您才可以使用此方法向用户发送消息。对于组,超级组或通道,需要将漫游器设置为Admin才能发送消息。