在開發一個 laravel 項目時,我遇到了一個需求:需要將系統中的重要通知發送到 microsoft teams 團隊頻道中。起初,我嘗試了多種方法,但都未能成功實現這個功能。直到我發現了 laravel-notification-channels/microsoft-teams 這個庫,它讓我輕松解決了這個問題。
首先,我通過 composer 安裝了這個庫:
composer require laravel-notification-channels/microsoft-teams
安裝完成后,如果你的 Laravel 項目沒有啟用自動發現功能,你需要在 config/app.php 文件中手動添加服務提供者:
'providers' => [ // ... NotificationChannelsMicrosoftTeamsMicrosoftTeamsServiceProvider::class, ],
接下來,我需要設置 Microsoft Teams 的 webhook 連接器。你可以參考 Microsoft 的官方文檔來設置 webhook 連接器,并將 webhook URL 添加到 config/services.php 文件中:
// config/services.php ... 'microsoft_teams' => [ 'webhook_url' => env('TEAMS_WEBHOOK_URL'), ], ...
如果你有多個團隊或頻道,可以添加多個 webhook URL:
// config/services.php ... 'microsoft_teams' => [ 'sales_url' => env('TEAMS_SALES_WEBHOOK_URL'), 'dev_url' => env('TEAMS_DEV_WEBHOOK_URL'), ], ...
然后,我在通知類中使用這個通道:
use IlluminateNotificationsNotification; use NotificationChannelsMicrosoftTeamsMicrosoftTeamsChannel; use NotificationChannelsMicrosoftTeamsMicrosoftTeamsMessage; class SubscriptionCreated extends Notification { public function via($notifiable) { return [MicrosoftTeamsChannel::class]; } public function toMicrosoftTeams($notifiable) { return MicrosoftTeamsMessage::create() ->to(config('services.microsoft_teams.sales_url')) ->type('success') ->title('Subscription Created') ->content('Yey, you got a **new subscription**. Maybe you want to contact him if he needs any support?') ->button('Check User', 'https://foo.bar/users/123'); } }
你也可以在 Notifiable 模型中添加 routeNotificationForMicrosoftTeams 方法來指定 webhook URL:
public function routeNotificationForMicrosoftTeams(Notification $notification) { return config('services.microsoft_teams.sales_url'); }
如果需要即時發送通知,可以使用 Notification facade 的 route 方法:
Notification::route(MicrosoftTeamsChannel::class, null) ->notify(new SubscriptionCreated());
這個庫提供了多種方法來定制消息,例如設置標題、內容、按鈕等。同時,你還可以創建多個 section 來組織消息內容,使通知更加清晰和有條理。
使用 laravel-notification-channels/microsoft-teams 庫后,我成功地將 Laravel 項目中的通知發送到了 Microsoft Teams 中。這個庫不僅簡化了開發過程,還提供了豐富的定制選項,使得通知更加靈活和實用。通過 Composer 安裝和管理依賴包,極大地提高了開發效率和項目的可維護性。