Slack là gì?

Slack là một công cụ giao tiếp tại nơi làm việc, "một nơi duy nhất cho các tin nhắn, công cụ và file." Điều này có nghĩa là Slack là một hệ thống nhắn tin tức thì với nhiều plug-in cho các công cụ khác tại nơi làm việc. Tuy nhiên, plug-in không cần thiết để sử dụng Slack, vì chức năng chính là nói chuyện với người khác. Có hai cách để trò chuyện trong Slack: kênh (trò chuyện nhóm) và tin nhắn trực tiếp hoặc DM (trò chuyện giữa người với người). Chúng ta hãy xem nhanh giao diện người dùng.

Tại sao cần kết nối ứng dụng Laravel đến Slack

Nếu một công ty hoặc khách hàng sử dụng Slack làm công cụ làm việc, việc kết nối các ứng dụng Laravel với Slack sẽ rất hữu ích. Nó có thể được sử dụng trong các trường hợp sau: thông báo khi người dùng gửi tin nhắn, thông tin liên hệ, thông báo khi ứng dụng laravel bị lỗi, ...

Slack có thể cài đặt trên điện thoại di động giúp chúng ta nhanh chóng theo dõi thông tin mọi lúc mọi nơi để có thể xử lý kịp thời những trường hợp khẩn cấp.

Cài đặt Slack

Đầu tiên, bạn phải có tài khoản Slack. Nếu chưa có, bạn có thể đăng ký Slack tại đây.

Sau khi bạn có tài khoản Slack, hãy tải xuống phiên bản Windows của ứng dụng Slack tại đây và bạn hãy đăng nhập để cài đặt URL Slack Webhook, vì ứng dụng laravel và Slack được kết nối thông qua Webhooks.

Bước 1: Đầu tiên, bạn chọn "Browse Slack", như hình dưới đây.

Bước 2: Tiếp theo bạn chọn mục “App” như hình dưới.

Bước 3: Bạn tìm ứng dụng "Incoming WebHooks" và nhấn nút "Add".

Bước 4: Khi đó trình duyệt sẽ mở ra một tab mới và chọn "Add to Slack" như hình bên dưới.

Bước 5: Bạn chọn kênh gửi thông báo, sau đó bấm vào nút "Add Incoming Webhooks integration" như hình bên dưới.

Bước 6: Cuối cùng, thông tin của Incoming WebHooks sẽ được hiển thị, bạn có thể sửa đổi tên và hình ảnh của Incoming WebHooks.

Kết nối ứng dụng Laravel với Slack

Đầu tiên, chúng ta cần tạo một dự án Laravel mới, sử dụng lệnh sau: 

composer create-project --prefer-dist laravel/laravel laravel_slack

Tiếp theo, chúng ta sẽ kết nối với cơ sở dữ liệu như sau:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_slack
DB_USERNAME=root
DB_PASSWORD=

Tiếp theo, chúng ta hãy chạy lệnh sau để tạo cấu trúc bảng cơ sở dữ liệu:

php artisan migrate

Để tiếp tục, chúng ta mở file DatabaseSeeder.php nằm trong thư mục database\seeders và chỉnh sửa như sau:

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        \App\Models\User::factory(10)->create();
    }
}

Sau đó chạy lệnh sau để thêm dữ liệu vào bảng users:

php artisan db:seed

Trước khi gửi thông báo qua Slack, bạn phải thiết lập kênh thông báo Slack qua composer:

composer require laravel/slack-notification-channel

Thông tin cấu hình Slack sẽ được lưu trên toàn cầu trong file cấu hình của ứng dụng Laravel. Mở file .env và thêm:

SLACK_WEBHOOK="https://hooks.slack.com/services/TXXXXXXX/BXXXXXXX/XXXXXXXXXXXXXX"

Tiếp theo, chúng ta sẽ tạo thông báo bằng lệnh sau:

php artisan make:notification SlackNotification

Đi tới thư mục app\Notifications, mở file SlackNotification.php và chỉnh sửa như sau:

<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\SlackMessage;

class SlackNotification extends Notification
{
    use Queueable;

    /**
     * Create a new notification instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Get the notification's delivery channels.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function via($notifiable)
    {
        return ['slack'];
    }

    /**
     * Get the Slack representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return \Illuminate\Notifications\Messages\SlackMessage
     */
    public function toSlack($notifiable)
    {
        return (new SlackMessage)->content('ManhDanBlogs Test Slack Notification!');
    }
}

Tiếp theo, chúng ta sẽ sử dụng lệnh sau để tạo controller để gửi thông báo qua Slack:

php artisan make:controller SlackController

Nhân tiện, chúng ta sẽ tạo route cho SlackController như sau:

<?php
...
use App\Http\Controllers\SlackController;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
...
Route::resource('slack', SlackController::class)->only('index');

Để có thể gửi thông báo đến ứng dụng Slack, chúng ta có hai phương pháp sau:

Phương pháp 1: Sử dụng Trait Notifiable trong Model để gửi thông báo.

Đầu tiên bạn hãy chỉnh sửa model cần gửi thông báo như sau (Trong ví dụ này mình sẽ dụng model User):

<?php

namespace App\Models;

...
use Illuminate\Notifications\Notifiable;

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';
    }
}

Sau khi chỉnh sửa model, bạn hãy chỉnh sửa SlackController như sau để gửi thông báo đến Slack:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;
use App\Notifications\SlackNotification;

class SlackController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $user = User::first();
        $user->notify(new SlackNotification());
    }
}

Phương pháp 2: Gửi thông báo trực tiếp khi bạn không sử dụng Trait Notifiable trong model.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Notifications\SlackNotification;
use Notification;

class SlackController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
       Notification::route('slack', env('SLACK_WEBHOOK'))->notify(new SlackNotification());
    }
}

Cuối cùng, bạn hãy truy cập đường dẫn sau trên trình duyệt:

http://127.0.0.1:8000/slack

Khi bạn truy câp, một thông báo sẽ được gửi đến ứng dụng Slack như sau:

Tôi đã hướng dẫn có bạn về cách gửi thông báo đến Slack thông qua ứng dụng Laravel, tôi hy vọng bạn thích hướng dẫn này. Nếu bạn có bất kỳ câu hỏi nào hãy liên hệ với chúng tôi qua trang contact. Cảm ơn bạn.

CÓ THỂ BẠN QUAN TÂM

Laravel Validate Video Duration

Laravel Validate Video Duration

Đôi khi trong dự án, chúng ta cần xác định thời lượng video được phép upload lên server. Nhưng rất tiếc, Laravel không cung cấp validate xác định thời lượng video để chúng ta thực hiện được. Vì vậy, t...

Laravel Socialite Login With Github

Laravel Socialite Login With Github

GitHub GitHub là một nền tảng phát triển phần mềm trực tuyến. Nó được sử dụng để lưu trữ, theo dõi và cộng tác trong các dự án phần mềm. Nó giúp các nhà phát triển dễ dàng chia sẻ các tập tin mã...

Laravel One to One Eloquent Relationship

Laravel One to One Eloquent Relationship

Mối quan hệ một-một là một mối quan hệ rất cơ bản. Trong hướng dẫn này, tôi sẽ hướng dẫn bạn cách tạo dữ liệu và truy xuất dữ liệu bằng Eloquent Model. Trong hướng dẫn này, tôi sẽ tạo hai bảng là u...

Laravel Routing

Laravel Routing

Route là gì? Đúng như tên gọi của nó, Route thực hiện chức năng định tuyến, dẫn đường cho các HTTP request gửi đến đúng nơi mà ta mong muốn. Với sự phát triển mạnh mẽ của ứng dụng web ngày nay, việc...

Integrating TinyMCE in Laravel 10 using Vite

Integrating TinyMCE in Laravel 10 using Vite

TinyMCE TinyMCE là một trình soạn thảo WYSIWYG được xây dựng trên nền tảng Javascript, được phát triển dưới dạng mã nguồn mở theo giấy phép MIT bởi Tiny Technologies Inc. TinyMCE cho phép ngư...

Integrating CKFinder with Amazon S3 in Laravel

Integrating CKFinder with Amazon S3 in Laravel

CKFinder 3 CKFinder 3 là trình quản lý tập tin được tích hợp với CKEditor 4 và CKEditor 5. Nó giúp bạn dễ dàng đưa các tập tin và hình ảnh vào nội dung của Editor một cách an toàn. Đây là một tín...

Integrating OpenAI in Laravel

Integrating OpenAI in Laravel

OpenAI OpenAI là một phòng thí nghiệm nghiên cứu trí tuệ nhân tạo (AI) của Mỹ bao gồm tổ chức phi lợi nhuận OpenAI Incorporated (OpenAI Inc.) và công ty con hoạt động vì lợi nhuận OpenAI Limited Par...

Laravel One to Many Polymorphic Relationship

Laravel One to Many Polymorphic Relationship

One to Many Polymorphic Model Relationship được sử dụng khi một model thuộc về nhiều model khác trên một model kết hợp duy nhất. Ví dụ: Nếu chúng ta có bảng post và video, cả hai đều cần thêm hệ thống...

Laravel Middlewares

Laravel Middlewares

Middleware cung cấp một cơ chế thuận tiện để lọc các yêu cầu HTTP gửi đến ứng dụng bạn. Nó là một lớp trung gian nằm giữa request và controller. Bạn có thể thêm các xử lý logic trước khi gửi đến contr...

ManhDanBlogs