Blog

  • Slack command & Laravel phần 2: Tạo App Slack và Command

    Slack command & Laravel phần 2: Tạo App Slack và Command

    phần trước mình đã nói về cách hoạt động của Slack command và hệ thống bên ngoài. Trong phần này mình sẽ hướng dẫn cách tạo App Slack, phân quyền cho bot, tạo và thử nghiệm command đầu tiên.

    1. Tạo App Slack

    App Slack là gì?

    App Slack (hay ứng dụng Slack) là một ứng dụng tùy chỉnh, tích hợp với nền tảng Slack cũng như các ứng dụng bên ngoài để cung cấp chức năng và quy trình làm việc cụ thể cho từng tổ chức. Để sử dụng được Slash Command thì đầu tiên chúng ta phải tạo App Slack.

    • Chọn “Create New App”
    chọn create new app để thêm app slack
    Chọn nút thêm App
    • Ta có thể chọn 1 trong 2 cách:
      • From scratch: Tạo mới hoàn toàn. Ở đây mình sẽ dùng cách này
      • From manifest: Dùng cấu hình YAML có sẵn. Mình có thể copy từ bot có sẵn và tạo theo cách này để tiết kiệm thời gian
    tạo app slack từ ban đầu - scratch
    Chọn from scratch để làm từ đầu
    • Điền tên app và chọn workspace mà mình sẽ cài đặt app vào.
    điền tên app slack và chọn workspace
    Điền tên app và chọn workspace
    • Sau khi tạo thành công thì các bạn sẽ nhìn thấy giao diện quản lý 1 app. Ở đây ta cần lưu ý phần Signing Secret sẽ được sử dụng để xác thực tính hợp lệ của dữ liệu khi gửi sang hệ thông khác.
    thông tin app
    Thông tin app
    • Vậy là mình đã tạo xong một App Slack, tiếp theo mình sẽ tạo và cài đặt quyền cho botđể có thể sử dụng Slack command.

    2. Cài đặt quyền cho bot

    • Để sử dụng Slack Command, ta cần phải cấp quyền cho bot, vì Slack command hoạt động thông qua bot.
    • Từ giao diện quản lý App, ta chọn OAuth & Permissions, sau đó tìm đến phần Scopes => Bot Token Scopes
    Vị trí Oauth & Permission trên menu
    Chọn OAth & Permissions để phân quyền bot
    • Thêm các quyền cần thiết vào ở phần Add an OAuth Scope:
      • Quyền chat:write cho phép bot gửi tin từ command
      • Quyền commands để có thể sử dụng command “/” và shortcut ở workspace
    Các quyền cần thiết cho bot
    Các quyền cần thiết cho bot
    • Giờ thì bot đã có thể đọc lệnh từ người dùng trong workspace và trả lời lại người dùng ở cả kênh chat và cả nhắn tin riêng (DM). Để sử dụng được thì mình chọn Install to < tên workspace>để cài bot này vào workspace của mình.
    install to workspace
    Cài đặt app vào workspace

    3. Tạo Slack command và thử nghiệm

    • Giờ để tạo Slack Command, mình truy cập vào phần Slash commands từ menu của App, sau đó chọn Create New Command để tạo lệnh mới
    • Điền các thông tin của lệnh vào, sau đó chọn Save để lưu
      • Command: Lệnh sẽ gõ vào trong workspace để Slack gửi sang hệ thống khác, ở đây mình đặt lệnh là “/hello-khanh
      • Request URL: url của hệ thống nhận dữ liệu. Ở đây mình dùng url “https://demo.codecungkhanh.com/api/hello-khanh” để nhận dữ liệu. Các bạn lưu ý là url này phải ở dạng https
      • Short Description: Mô tả lệnh
      • Usage Hint: Hướng dẫn sử dụng lệnh, nếu lệnh mình có thêm các tham số cho text thì nên mô tả cách dùng ở đây.
    • Để sử dụng các command vừa thêm, mình phải cài đặt lại app vào workspace để hệ thống cập nhật lệnh mới (để cài lại chúng ta vào Install App ở menu rồi chọn Reinstall to workspace).
    • Giờ vào Slack khi mình gõ “/” sẽ hiện “/hello-khanh” cùng với mô tả của nó. Tuy nhiên, khi gửi tin thì hệ thống sẽ báo “dispatch_failed”, do request_url của mình chưa tạo & chưa xử lý phản hồi về cho Slack trong vòng 3s.
    Gõ lệnh /hello-khanh ở khung chat
    Gõ lệnh ở khung chat
    Phản hồi lệnh không thành công
    Phản hồi thông báo không thành công

    Vậy là chúng ta đã tạo được command đầu tiên và đưa vào workspace để sử dụng. Trong bài kế tiếp, mình sẽ hướng dẫn cách xử lý dữ liệu ở Laravel và phản hồi lại cho Slack để không còn thông báo lỗi “dispatch_failed” nữa.

    Nguồn bài viết:

    1. Api Slack – Quick Start
    2. Slack Permission Scopes

  • Slack command & Laravel phần 1: Tìm hiểu về workflow

    Slack command & Laravel phần 1: Tìm hiểu về workflow

    Slack Command là gì?

    • Slack command (hay Slack slash command) là cách người dùng tương tác với hệ thống Slack bằng một ký tự “/” trong khung chat. Khi lệnh này được gõ, Slack sẽ gửi một yêu cầu (request) đến một hệ thống bên ngoài, ví dụ như website nội bộ, để xử lý và phản hồi.
    • Slack Command có thể gửi thông tin đến bất kỳ hệ thống nào thông qua URL được cấu hình trong Slack App. Nhờ đó, các thao tác như đặt phòng họp, tra cứu thông tin nhân viên, tạo ticket IT,… có thể được thực hiện ngay trong Slack, mà không cần mở ứng dụng, hệ thống khác.
    • Trong bài viết này, mình sẽ hướng dẫn các bạn về cách hoạt động của Slack command khi tích hợp vào một website sử dụng Laravel, từ lúc người dùng gõ lệnh, quá trình xử lý thông tin và phản hồi dữ liệu.

    Vì sao lại sử dụng Slack command?

    • Thao tác cực nhanh mà không cần rời khỏi app Slack: người dùng có thể thao tác với các command được cài sẵn để lấy dữ liệu, tương tác với các hệ thống khác mà không cần phải mở cùng lúc nhiều hệ thống. Điều này làm giảm công sức bỏ ra để đào tạo nhiều hệ thống khi có nhân sự mới tham gia vào công ty
    • Chuẩn hóa thao tác, giảm rủi ro khi thao tác trên nhiều hệ thống: ngoài xử lý nhanh thì thao tác qua Slack với các command được cài sẵn còn giúp giảm thiểu rủi ro thao tác sai trên các hệ thống.
    • Giảm thao tác nhập form lặp đi lặp lại, tiết kiệm thời gian xử lý form nhập: vì lệnh được phân tích từ cấu trúc cho sẵn, nên chỉ cần người dùng nhập đúng cú pháp trên Slack, thông tin sẽ được nhập vào hệ thống tương ứng mà không cần phải chờ load form, nhập form…
    • Có thể tận dụng notification của Slack điện thoại mà không cần làm app riêng, đây là lợi thế chung của Slack chứ không phải của riêng Slack command, tận dụng được khi website không phản hồi ngay mà lên lịch gửi 1 tin nhắn đến Slack dựa vào thông tin của command trước đó.

    Ví dụ: khi người dùng gõ lệnh sau vào đoạn chat trên Slack

    /book-room p202 ngày 15/07/2025

    Thì có thể đặt phòng 202 trên một hệ thống khác vào ngày 15/07/2025 mà không cần phải thao tác trên hệ thống đặt phòng.

    Slash command hoạt động như thế nào?

    Slack command & Laravel workflow
    Workflow Slack command & Laravel
    • Đầu tiên Slack sẽ gửi 1 chuỗi json bao gồm tên lệnh (command), nội dung lệnh mà người dùng nhập (text) và một số nội dung khác để xác thực và phản hồi đến url được cấu hình sẵn khi admin tạo lệnh.
    Dữ liệu gửi từ Slack command
    • Tiếp đó, website nhận dữ liệu (trong trường hợp này là Laravel) sau khi nhận sẽ xác thực và gửi phản hồi về cho Slack trong vòng 3 giây để hệ thống thông báo nhận lệnh thành công.
    • Sau đó, tùy theo lệnh cần xử lý, mà website dùng Laravel có thể gửi thêm phản hồi vào response_url để phản hồi lại tin nhắn. Như trong ví dụ ở trên, thì website sẽ đặt phòng theo thông tin từ Slack command và phản hồi lại thông tin đặt phòng thành công.

    Các lưu ý khi dùng Slack command:

    • Để sử dụng được command thì quản trị viên (admin) phải cài đặt trước trong Slack App và bật BOT cho workspace, BOT phải có quyền đọc ghi thì mới sử dụng được.
    • URL nhận dữ liệu phải là dạng https và phải phản hồi lại command trong vòng 3s, nếu không thì khi gõ lệnh sẽ nhận được thông báo lỗi.
    • Khi Slack command gửi yêu cầu sẽ đính kèm chữ ký (signature), dùng để xác thực tính hợp lệ của dữ liệu. Chúng ta có thể kiểm tra bằng cách mã hóa thời gian nhận yêu cầu,dữ liệu nhận được và khóa bí mật (signing secret) có được khi tạo App Slack. Mình sẽ nói rõ hơn trong bài nhận dữ liệu từ Slack.
    • response_url trong json chỉ sử dụng được trong vòng 30 phút nên nếu có dùng queue hay job xử lý quá lâu thì phải dùng api gửi tin nhắn của Slack để gửi phản hồi chứ không dùng được response_url

    Vậy là mình đã trình bày xong cách dữ liệu được gửi/nhận giữa Slack command và hệ thống bên ngoài. Trong bài tiếp theo, mình sẽ giới thiệu về cách tạo App Slack, BOT và hướng dẫn cách tạo Slack command đầu tiên.

    Nguồn bài viết

    1. Enabling interactivity with Slash commands
    2. Verifying requests from Slack