Cách tích hợp Slack vào app NodeJS


1038

Slack là gì ?

“Slack mang cả nhóm đến với nhau, cho dù bạn ở đâu”. Được sử dụng rộng rãi trong thế giới chuyên nghiệp và nhiều ứng dụng doanh nghiệp cung cấp tùy chọn chia sẻ trực tiếp lên Slack. Bài viết này sẽ trình bày những kiến ​​thức cơ bản về cách kết nối ứng dụng nút của bạn với Slack và gửi tin nhắn văn bản.

Slack cung cấp một APIs dễ sử dụng. Chúng tôi sẽ sử dụng API web của Slack tại đây.

Những gì bạn cần từ Slack

Nếu bạn đã nghiên cứu về xác thực và API, bạn hẳn đã nghe nói về token (bearer, jwt…) và key, Tương tự như vậy để kết nối ứng dụng NodeJS của bạn với Slack, bạn cần có token và key.

Đọc bài về Xác thực : Authentication trong Nodejs là gì ? Tại sao quan trọng ?

Đầu tiên, bạn cần tạo một ứng dụng trên Slack, ứng dụng này sẽ xuất hiện trực tiếp trong thư mục ứng dụng Slack (loại play store).

Đi tới https://api.slack.com/apps, chọn  Create New App và làm theo các bước

Image for post
Create New App

Sau khi xây dựng ứng dụng trên Slack, bạn sẽ đến trang ‘Thông tin cơ bản’, trang này sẽ có hai thông tin chính mà chúng ta cần.

nodejs

Note Client Id và Client Secret, chúng ta sẽ sử dụng chúng sau.

Bây giờ chúng ta token authentication từ Slack để gọi các method được cung cấp thay mặt cho người dùng để gửi tin nhắn. Để làm được điều đó, chúng ta cần thiết lập một số thứ.

Setup redirect URL và thêm scopes

Sau khi người dùng cấp quyền cho ứng dụng Slack của bạn, bạn nhận được code sẽ được sử dụng để truy xuất bearer token, nhưng ở đâu? Để làm được điều đó, chúng ta cần thiết lập ‘redirect URL’. Đây là route mà request sẽ được chuyển hướng với code.

Đi tới ‘OAuth & Permissions’, tại đây bạn có thể thêm URL chuyển hướng. Bây giờ, tôi sẽ thêm http://localhost:3000/connecttoslack

nodejs

Scopes là các quyền được yêu cầu bởi mỗi phương thức API để được sử dụng. Có hai loại scope:

  • 1. Phạm vi Bot (Nếu bạn muốn tương tác với Slack với tư cách là một bot)
  • 2. Phạm vi người dùng (Nếu bạn muốn tương tác với Slack thay mặt cho người dùng)

Chúng ta sẽ chat:write  vào cả hai phạm vi. Để làm điều đó bên dưới URL redirect có phần Scopes, ở đó bạn có thể thêm scopes.

Setup app NodeJS

  1. Tạo một thư mục có tên là slack-integration và khởi chạy ứng dụng node
mkdir slack-integration
cd slack-integration
npm init -y

2. Thêm phụ thuộc:

// For creating server
npm install express// Slack web API module
npm install @slack/web-api// For sending api calls
npm install axios

3. Thêm một thư mục public bên trong slack-integration để cung cấp các tệp tĩnh trên máy chủ. Và thêm index.html vào nó

mkdir public
touch ./public/index.html

4. Tạo server.js bên trong slack-integration và thêm phần sau vào nó

const express = require('express');
const app = express();
const axios = require('axios');
const { WebClient } = require('@slack/web-api');
const PORT = 3000;// this will allow us to use slack api methods
const client = new WebClient();app.use(express.static('public'));
app.use(express.json());app.listen(PORT, () => {
    console.log('listening at', PORT);
});

Client-side Code

Bạn cần thực hiện request từ phía máy khách của mình để tích hợp Slack. Thao tác này sẽ thực hiện đăng nhập Slack và trả lại authorization token (Bearer token). Slack cung cấp cho bạn nút làm sẵn để sử dụng. Thêm code bên dưới vào index.html:

Image for post
Button created by code below
<a href="https://slack.com/oauth/v2/authorize?client_id=[clientId retrived from above]&scope=[scopes you need]&user_scope=[user scopes you need]&redirect_uri=http://localhost/connecttoslack"><img alt="Add to Slack" height="40" width="139" src="https://platform.slack-edge.com/img/add_to_slack.png" srcSet="https://platform.slack-edge.com/img/add_to_slack.png 1x, https://platform.slack-edge.com/img/add_to_slack@2x.png 2x" /></a>

Nhấp vào nút này sẽ đưa người dùng đến trang anh ta sẽ cho phép ứng dụng của bạn tương tác với Slack thay mặt anh ta. URL chuyển hướng mà bạn đã chuyển trong redirect_uri là nơi yêu cầu sẽ được gửi từ trang này. Nó sẽ có một code xác thực sẽ được sử dụng để lấy token bằng phương thức oauth.v2.access.

LƯU Ý: Đảm bảo rằng redirect_uri bạn đang cung cấp được liệt kê trên Slack trong URL chuyển hướng

Setup route để xử lý URI redirect và gửi tin nhắn tới Slack

Trong server.js của bạn, hãy thêm một route /connecttoslack và truy xuất token và sử dụng token đó, chúng ta sẽ gửi tin nhắn đến Slack bằng method postMessage () của Slack. Nó nhận một đối tượng làm argument và trả về promise cùng với response.




const express = require('express');
const app = express();
const axios = require('axios');
const { WebClient } = require('@slack/web-api');
const PORT = 3000;// this will allow us to use slack api methods
const client = new WebClient();app.use(express.static('public'));
app.use(express.json());// code is a query parameter
app.get('/connecttoslack', async (req, res) => {
    const auth = await client.oauth.v2.access({
        code: req.query.code,
        client_id: <your_client_id>,
        client_secret: <your_client_secret>,
        redirect_uri:'http://localhost:4000/connecttoslack'
    });
    try {
        // Sending Message to slack
        const res = await client.chat.postMessage({
            token: auth.authed_user.access_token,
            channel: <channelName>,
            text: <Enter your message to send>,
            as_user: true});
        console.log(res);} catch (e) {}
});app.listen(PORT, () => {
    console.log('listening at', PORT);
});

 Bạn đã gửi thành công một tin nhắn tới Slack. Kiểm tra kênh mà bạn đã đề cập và bạn sẽ thấy tin nhắn bạn đã gửi.

Kết luận

Qua bài viết bạn có thể sử dụng Slack kết hợp với NodeJS.

Tham khảo thêm về NodeJS tại đây: Hướng dẫn sử dụng AWS Lambda

Tham khảo thêm về React tại đây: Top 5 thư viện ReactJS nhất định phải biết


Like it? Share with your friends!

1038