Slack ứng dụng chat nhóm phổ biến
Nếu bạn chưa biết Slack là gì? có thể tóm tắt qua vài câu dưới đây:
Slack là ứng dụng chat thông thường nhưng có khả năng kết nối đến hàng nghìn các ứng dụng, dịch vụ ngoài giúp quản lý thông tin làm việc theo nhóm tập trung. Các tài nguyên, thông tin dù là trong nội bộ, trên các dịch vụ cloud hay ở các hệ thống khác trên internet đều có thể tập trung về Slack. Một số ưu điểm của Slack như sau:
- Slack là dịch vụ đa nền tảng do đó mọi người có thể trao đổi với nhau từ bất kỳ nền tảng nào như Windows, Linux, MacOS, Android, iOS...
- Slack có khả năng liên kết với các ứng dụng lưu trữ của hãng thứ 3, ví dụ bạn có thể dễ dàng thiết lập kết nối Slack đến Google Drive, Dropbox, Google Calendar, Github, Task Reminder, Trello... thậm chí là cả các dịch vụ thanh toán.
- Slack là miễn phí với các tổ chức nhỏ với giới hạn lưu trữ miễn phí lên đến 10K tin nhắn, 5GB dung lượng lưu trữ và kết nối đến 5 dịch vụ hãng khác, như vậy cũng là quá đủ. Các gói tính phí sẽ có nhiều tính năng cao cấp hơn và khả năng kết nối vô hạn.
Tại sao cần kết nối ứng dụng Laravel đến Slack
Trong phần trên, chúng ta có thể thấy rằng Slack giống như một message hub, tất cả mọi thứ tập trung về Slack. Do vậy, kết nối từ ứng dụng Laravel đến Slack là rất hữu ích. Ví dụ: bạn muốn khi phát sinh một hợp đồng tín dụng mới trên hệ thống của ngân hàng, thì sẽ có một tin nhắn vào kênh của phòng Tín dụng ở Hội sở. Chuyên viên tín dụng Hội sở nắm được thông tin và quản lý, chat và hỗ trợ chuyên viên tín dụng ở chi nhánh.
Ứng dụng thực tế kết nối giữa Laravel và Slack
Tạo app trên Slack
Kết nối thông tin giữa ứng dụng Laravel với Slack là thông qua webhook, do vậy chúng ta cần tạo ra một app trên Slack để thiết lập webhook URL.
Trong trang dashboard của Slack chọn thêm ứng dụng và tìm Incoming WebHooks.
Sau khi cài đặt chúng ta có các thông tin về app trên Slack như sau:
Để kiểm tra webhook này đã hoạt động chưa, bạn có thể thực hiện gửi một request đến webhook thông qua công cụ curl
curl -X POST --data-urlencode "payload={\"channel\": \"#chatbot\", \"username\": \"All Laravel\", \"text\": \"Test thu mot thong bao den kenh #chatbot thong qua curl.\", \"icon_emoji\": \":ghost:\"}" https://hooks.slack.com/services/TXXXXXXX/BXXXXXXX/XXXXXXXXXXXXXX
Kết quả, khi vào Slack chúng ta thấy tin nhắn đã xuất hiện.
Cài đặt gói Slack Notification
Các phiên bản Laravel trước 5.8.x đều được tích hợp sẵn gói Slack Notification. Ở phiên bản mới nhất là Laravel 5.8, khi muốn kết nối ứng dụng Laravel đến Slack chúng ta cần cài đặt gói Laravel Slack Notification qua Composer.
composer require laravel/slack-notification-channel
Thiết lập thông tin Slack trong ứng dụng
Thông tin cấu hình Slack sẽ được lưu toàn cục trong file cấu hình của ứng dụng Laravel, mở file .env và thêm vào:
SLACK_WEBHOOK="https://hooks.slack.com/services/TXXXXXXX/BXXXXXXX/XXXXXXXXXXXXXX"
Khi cần truy cập đến thông tin cấu hình này, có thể sử dụng cấu trúc:
env('SLACK_WEBHOOK')
Laravel 5.8 cho phép định nghĩa url này cho từng Model. Ví dụ bạn muốn định nghĩa webhook URL này cho model User:
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
* Route notifications for the Slack channel.
*
* @param \Illuminate\Notifications\Notification $notification
* @return string
*/
public function routeNotificationForSlack($notification)
{
return 'https://hooks.slack.com/services/TXXXXXXX/BXXXXXXX/XXXXXXXXXXXXXX';
}
}
Tạo và viết code cho Notification
Tạo Notification thông qua câu lệnh artisan
php artisan make:notification SlackNotification
Khi đó một file SlackNotification.php sẽ được tạo ra trong thư mục app/Notifications. Trong Laravel có sẵn một class Illuminate\Notifications\Messages\SlackMessage để làm việc với Slack, bạn cần thêm vào phần đầu của SlackNotification:
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Messages\SlackMessage;
class SlackNotification extends Notification {
Mọi Notification class đều có phương thức via để xác định channel sẽ được sử dụng để phân phối các thông báo. Các thông báo có thể gửi đi trên các kênh mail, database, broadcast, nexmo và slack.
Do vậy, chúng ta thêm slack vào phương thức via():
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['mail', 'slack'];
}
Khi đó, trong class Notification này sẽ có phương thức toSlack(), phương thức này trả về một instance của Illuminate\Notifications\Messages\SlackMessage. Tin nhắn này có thể chứa nội dung văn bản tin nhắn hoặc có thể có file đính kèm. Chúng ta cũng có thể thiết lập thông tin người gửi và người sẽ nhận tin nhắn:
/**
* Get the Slack representation of the notification.
*
* @param mixed $notifiable
* @return SlackMessage
*/
public function toSlack($notifiable)
{
return (new SlackMessage)
->from('All Laravel')
->to('@here')
->image('https://allaravel.com/themes/allaravel/assets/img/all-laravel-logo.png')
->content('Tin nhắn đến từ ứng dụng All Laravel');
}
Để gửi thông báo từ ứng dụng Laravel đến Slack, chúng ta có hai cách.
Cách 1: nếu model User đã đăng ký trait Notifications thì thực hiện:
$user->notify(new SlackNotification());
Cách 2: Nếu ứng dụng không sử dụng User, có thể đăng ký gửi Notification theo cách riêng biệt sau:
Notification::route('slack', env('SLACK_WEBHOOK'))
->notify(new SlackNotification());
Trong ví dụ của bài viết, do để ngắn gọn chúng ta sử dụng cách hai, tạo một route để thực thi việc gửi Notification:
Route::get('/send', function() {
Notification::route('slack', env('SLACK_WEBHOOK'))
->notify(new SlackNotification());
return "Gửi tin nhắn thành công!"
});
Chạy đường dẫn /send, nếu bạn nhận được kết quả "Gửi tin nhắn thành công!", kiểm tra lại Slack sẽ thấy tin nhắn đã vào hệ thống.
Kết luận
Laravel và Slack kết hợp sẽ giúp bạn tạo ra những ứng dụng hữu ích, mọi các hoạt động bên các ứng dụng Laravel sẽ được cập nhật vào kênh chat chung của team trên Slack. Trong Slack còn rất nhiều các tính năng khác có thể kết hợp với Laravel như tính năng gửi tin nhắn có nội dung phức tạp Block Kit, tính năng sử dụng các câu lệnh bắt đầu bằng /. Chúng ta sẽ còn quay trở lại chủ đề này ở các bài viết khác. Có rất nhiều ý tưởng cho sự kết hợp này, chúc các bạn sử dụng hiệu quả trong công việc.
Source code: Laravel Slack Notification
Hướng dẫn chạy ứng dụng:
- Tải về giải nén
- Chạy composer update
- Mở file .env thay thiết lập SLACK_WEBHOOK="https://hooks.slack.com/services/DUONG_DAN_CUA_BAN" thành Webhook URL mà bạn đăng ký với Slack.
CÁC BÀI VIẾT KHÁC
0 Bình luận trong "Gửi message đến Slack chat từ ứng dụng Laravel"