使用通知通道自动发布到 Telegram
发布于 作者: Eric L. Barnes
Laravel 通知在您需要通过各种渠道发送通知时非常有用。根据文档,这些通知的最初用例是发送快速的信息消息,以通知用户应用程序中发生的事件。例如,如果您正在编写计费应用程序,则可以通过电子邮件和短信渠道向用户发送“发票已支付”通知。
但是,它们不应仅限于这些类型的通知。例如,在这个网站上,每次发布新文章时,我都希望它发布到所有社交渠道和社区,社区已经为各种服务创建了许多驱动程序。
几个月前,我创建了一个新的区域,即一个只读的Laravel 新闻 Telegram 群组,过去,我会手动将当天的新文章添加到其中。您可以想象,有一天我忘记了,然后是第二天,然后是第三天,等等。我知道我必须自动发送新文章,这就是Telegram 通知包的作用,让我们看看如何设置它并自动将通知发送到您的 Telegram 房间。
创建 Telegram 机器人
在您能够向房间发送消息之前,您必须创建一个机器人。首先,向@BotFather发送一条新消息,操作如下
You: /newbotBotFather: Alright, a new bot. How are we going to call it? Please choose a name for your bot. You: MyTestBotBotFather: Good. Now let's choose a username for your bot. It must end in bot. Like this, for example: TetrisBot or tetris_bot. You: MyNewBotBotFather: Done! Congratulations on your new bot. ... Use this token: xxxxxx
现在,您将在稍后需要该令牌将其添加到您的 .env 文件中,因此请将其保留在手边。
将机器人添加到您的房间
打开您的 Telegram 房间并转到设置 -> 管理员,然后将您刚创建的机器人添加到频道。这将授予它向房间发布新消息的权限。
安装 Telegram 通知
安装过程与任何 Laravel 包的安装过程类似。首先需要该包
composer require laravel-notification-channels/telegram
将其添加到 app.php 中的提供程序中
'providers' => [ ... NotificationChannels\Telegram\TelegramServiceProvider::class,],
添加配置数组
// config/services.php...'telegram-bot-api' => [ 'token' => env('TELEGRAM_BOT_TOKEN', 'YOUR BOT TOKEN HERE')],
最后,打开 .env 并添加您的令牌
TELEGRAM_BOT_TOKEN=1234:232jkl42l4j23kl
创建新的通知类
在我的用例中,我将在发布新文章时发送通知,因此我将通过 artisan 创建一个新的 PostPublished 通知类
php artisan make:notification PostPublished
现在打开该文件并调整 via
方法以告诉它使用 TelegramChannel
public function via($notifiable){ return [TelegramChannel::class];}
接下来,创建一个 toTelegram
方法,其中将包含您要发送的详细信息
public function toTelegram($post){ return TelegramMessage::create() ->to('@laravelnews') ->content($post->title.' https://news.laravel.net.cn/'. $post->uri);}
在本例中,它是发送到 @laravelnews 房间,内容包括文章标题和文章链接。
添加可通知特性
通知可以通过两种方式之一发送。通过 Notification facade 或通过向模型添加 Notifiable 特性。当您需要将通知发送给多个可通知实体(例如用户集合)时,建议使用 facade。
在本例中,它仅基于一项内容发送,因此我在 Post 模型中添加了该特性。
use Illuminate\Notifications\Notifiable;class Post extends Model{ use Notifiable;
发送您的第一个通知
现在,所有内容都已设置并准备就绪,剩下的就是发送第一个通知。从模型中获取单一项目,然后发出通知
$post = \App\Post::find(1);$post->notify(new \App\Notifications\PostPublished());
如果一切正确,您将在 Telegram 频道中立即看到它。
使用WordPress 作为后端 设置此网站后,我的同步系统运行并找到并创建新文章时,它现在会自动发送到Telegram 和Twitter,我在之前的文章中介绍过。
如果您是 Telegram 用户,请加入@laravelnews 群组,我已经创建了一个简单的Laravel 贴纸包。它只有两个贴纸,但希望有一天我能添加更多贴纸。