Thứ ba, 30/06/2020 | 00:00 GMT+7

Cách tạo Slackbot bằng Python trên Ubuntu 20.04

Slack là một nền tảng giao tiếp được thiết kế cho năng suất tại nơi làm việc. Nó bao gồm các tính năng như nhắn tin trực tiếp, các kênh công khai và riêng tư, cuộc gọi thoại và video cũng như tích hợp bot. Slackbot là một chương trình tự động có thể thực hiện nhiều chức năng khác nhau trong Slack, từ gửi tin nhắn đến kích hoạt tác vụ đến cảnh báo về các sự kiện nhất định.

Trong hướng dẫn này, bạn sẽ xây dựng một Slackbot bằng ngôn ngữ lập trình Python . Python là một ngôn ngữ phổ biến tự hào về tính đơn giản và dễ đọc. Slack cung cấp một API Slack Python phong phú để tích hợp với Slack để thực hiện các việc thông thường như gửi tin nhắn, thêm biểu tượng cảm xúc vào tin nhắn, v.v. Slack cũng cung cấp API sự kiện Python Slack để tích hợp với các sự kiện trong Slack, cho phép bạn thực hiện các hành động trên các sự kiện như tin nhắn và đề cập.

Là một bằng chứng thú vị về khái niệm sẽ chứng minh sức mạnh của Python và các API Slack của nó, bạn sẽ xây dựng một CoinBot — một Slackbot giám sát một kênh và khi được kích hoạt, sẽ lật một đồng xu cho bạn. Sau đó, bạn có thể sửa đổi CoinBot của bạn để đáp ứng mọi ứng dụng thực tế hơn một chút .

Lưu ý hướng dẫn này sử dụng Python 3 và không tương thích với Python 2.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần:

Bạn có thể cần kiểm tra hướng dẫn này trên server có địa chỉ IP công cộng. Slack cần có khả năng gửi các sự kiện như tin nhắn tới bot của bạn. Nếu bạn đang thử nghiệm trên một máy local , bạn cần chuyển tiếp lưu lượng truy cập qua firewall tới hệ thống local của bạn . Nếu bạn đang tìm cách phát triển trên server cloud , hãy xem hướng dẫn này về Cách sử dụng mã Visual Studio để phát triển từ xa thông qua Plugin Remote-SSH .

Bước 1 - Tạo Slackbot trong giao diện user Slack

Đầu tiên, hãy tạo ứng dụng Slack của bạn trong Control panel API Slack. Đăng nhập vào không gian làm việc của bạn trong Slack thông qua trình duyệt web và chuyển đến Control panel API . Bây giờ hãy nhấp vào nút Tạo ứng dụng .

Tạo ứng dụng Slack của bạn

Tiếp theo, bạn sẽ được yêu cầu nhập tên ứng dụng của bạn và chọn không gian làm việc Slack phát triển. Đối với hướng dẫn này, đặt tên ứng dụng của bạn là CoinBot và chọn không gian làm việc mà bạn có quyền truy cập administrator . Khi bạn đã hoàn thành việc này, hãy nhấp vào nút Tạo ứng dụng .

Đặt tên cho ứng dụng Slack của bạn và chọn không gian làm việc

Khi ứng dụng của bạn được tạo, bạn sẽ thấy trang tổng quan ứng dụng mặc định sau.Trang tổng quan này là nơi bạn quản lý ứng dụng của bạn bằng cách đặt quyền, đăng ký sự kiện, cài đặt ứng dụng vào không gian làm việc, v.v.

 Control panel  ứng dụng Slack mặc định

Để ứng dụng của bạn có thể đăng tin nhắn lên một kênh, bạn cần cấp cho ứng dụng quyền gửi tin nhắn. Để thực hiện việc này, hãy nhấp vào nút Quyền trong console .

Chọn nút Quyền trong  Control panel

Khi bạn đến trang OAuth & Permissions , hãy cuộn xuống cho đến khi bạn tìm thấy phần Phạm vi của trang. Sau đó tìm tiểu mục Phạm vi Bot Token trong phạm vi và nhấp vào nút Thêm phạm vi OAuth .

Chọn nút Thêm phạm vi OAuth

Bấm vào nút đó rồi gõ chat:write . Chọn quyền đó để thêm nó vào bot của bạn. Điều này sẽ cho phép ứng dụng đăng tin nhắn lên các kênh mà nó có thể truy cập. Để biết thêm thông tin về các quyền hiện có, hãy tham khảo Tài liệu của Slack .

Thêm trò chuyện: viết Quyền

Đến đây bạn đã thêm quyền thích hợp, đã đến lúc cài đặt ứng dụng của bạn vào không gian làm việc Slack của bạn. Cuộn lại trên trang OAuth & Permissions và nhấp vào nút Install App to Workspace ở trên cùng.

Cài đặt ứng dụng vào không gian làm việc

Nhấp vào nút này và xem lại các việc mà ứng dụng có thể thực hiện trong kênh. Khi bạn đã hài lòng, hãy nhấp vào nút Cho phép để kết thúc quá trình cài đặt.

Cài đặt ứng dụng vào không gian làm việc

Sau khi bot được cài đặt, bạn sẽ được cung cấp Mã thông báo truy cập OAuth của user Bot để ứng dụng của bạn sử dụng khi cố gắng thực hiện các hành động trong không gian làm việc. Hãy tiếp tục và sao chép mã thông báo này; bạn cần nó sau này.

Lưu mã thông báo truy cập

Cuối cùng, thêm bot mới được cài đặt của bạn vào một kênh trong không gian làm việc của bạn. Nếu bạn chưa tạo kênh, bạn có thể sử dụng #general channel được tạo theo mặc định trong không gian làm việc Slack của bạn. Tìm ứng dụng trong phần Ứng dụng của thanh chuyển trong ứng dụng Slack của bạn và nhấp vào ứng dụng đó. Khi bạn đã hoàn tất, hãy mở menu Chi tiết ở phía trên bên phải. Nếu khách hàng Slack của bạn không phải là toàn chiếu nó sẽ trông giống như một i trong một vòng tròn.

Nhấp vào biểu tượng chi tiết ứng dụng

Để hoàn tất việc thêm ứng dụng của bạn vào một kênh, hãy nhấp vào nút Thêm được biểu thị bằng ba dấu chấm trong trang chi tiết và chọn Thêm ứng dụng này vào kênh… . Nhập kênh của bạn vào phương thức xuất hiện và nhấp vào Thêm .

Thêm ứng dụng vào kênh

Đến đây bạn đã tạo thành công ứng dụng của bạn và thêm nó vào một kênh trong không gian làm việc Slack của bạn. Sau khi bạn viết mã cho ứng dụng của bạn , nó sẽ có thể đăng tin nhắn trong kênh đó. Trong phần tiếp theo, bạn sẽ bắt đầu viết mã Python để cung cấp năng lượng cho CoinBot .

Bước 2 - Cài đặt môi trường nhà phát triển Python của bạn

Trước tiên, hãy cài đặt môi trường Python của bạn để bạn có thể phát triển Slackbot.

Mở một terminal và cài đặt python3 và các công cụ có liên quan vào hệ thống của bạn:

  • sudo apt install python3 python3-venv

Tiếp theo, bạn sẽ tạo một môi trường ảo để cô lập các gói Python của bạn khỏi quá trình cài đặt hệ thống của Python. Để làm điều này, trước tiên hãy tạo một folder mà bạn sẽ tạo môi trường ảo của bạn . Tạo một folder mới tại ~/.venvs :

  • mkdir ~/.venvs

Bây giờ hãy tạo môi trường ảo Python của bạn:

  • python3 -m venv ~/.venvs/slackbot

Tiếp theo, kích hoạt môi trường ảo của bạn để bạn có thể sử dụng các gói cài đặt và cài đặt Python của nó:

  • source ~/.venvs/slackbot/bin/activate

Dấu nhắc shell của bạn bây giờ sẽ hiển thị môi trường ảo trong ngoặc đơn. Nó trông giống như sau :

Bây giờ sử dụng pip để cài đặt các gói Python cần thiết vào môi trường ảo của bạn:

  • pip install slackclient slackeventsapi Flask

slackclientslackeventsapi tạo điều kiện cho Python tương tác với các API của Slack. Flask là một khung web vi mô phổ biến mà bạn sẽ sử dụng để triển khai ứng dụng của bạn :

Đến đây bạn đã cài đặt môi trường nhà phát triển của bạn , bạn có thể bắt đầu viết Slackbot Python của bạn :

Bước 3 - Tạo lớp thông báo Slackbot bằng Python

Tin nhắn trong Slack được gửi qua tải trọng JSON được định dạng cụ thể . Đây là một ví dụ về JSON mà Slackbot của bạn sẽ tạo và gửi dưới dạng tin nhắn:

{    "channel":"channel",    "blocks":[       {          "type":"section",          "text":{             "type":"mrkdwn",             "text":"Sure! Flipping a coin....\n\n"          }       },       {          "type":"section",          "text":{             "type":"mrkdwn",             "text":"*flips coin* The result is Tails."          }       }    ] } 

Bạn có thể tạo thủ công JSON này và gửi nó theo cách thủ công, nhưng thay vào đó, hãy xây dựng một lớp Python không chỉ xử lý dung lượng tải này mà còn mô phỏng việc lật đồng xu.

Trước tiên, hãy sử dụng lệnh touch để tạo file có tên coinbot.py :

  • touch coinbot.py

Tiếp theo, mở file này bằng nano hoặc editor yêu thích của bạn:

  • nano coinbot.py

Bây giờ, hãy thêm các dòng mã sau để nhập các thư viện liên quan cho ứng dụng của bạn. Thư viện duy nhất bạn cần cho lớp này là thư viện random từ Thư viện chuẩn Python. Thư viện này sẽ cho phép ta mô phỏng một lần lật đồng xu.

Thêm các dòng sau vào coinbot.py để nhập tất cả các thư viện cần thiết:

coinbot.py
# import the random library to help us generate the random numbers import random 

Tiếp theo, tạo lớp CoinBot của bạn và một version của lớp này
để tạo dung lượng tin nhắn. Thêm các dòng sau vào coinbot.py để tạo lớp CoinBot :

coinbot.py
... class CoinBot: 

Bây giờ thụt lề từng cái một và tạo hằng số, hàm tạo và phương thức cần thiết cho lớp của bạn. Đầu tiên, hãy tạo hằng số sẽ giữ cơ sở của trọng tải thư của bạn. Phần này chỉ định rằng hằng số này thuộc loại phần và văn bản được định dạng thông qua dấu xuống. Nó cũng chỉ định văn bản bạn muốn hiển thị. Bạn có thể đọc thêm về các tùy chọn trọng tải khác nhau trong tài liệu trọng tải thư Slack chính thức .

Nối các dòng sau vào coinbot.py để tạo mẫu cơ sở cho tải trọng:

coinbot.py
...     # Create a constant that contains the default text for the message     COIN_BLOCK = {         "type": "section",         "text": {             "type": "mrkdwn",             "text": (                 "Sure! Flipping a coin....\n\n"             ),         },     } 

Tiếp theo, tạo một phương thức khởi tạo cho lớp của bạn để bạn có thể tạo một version bot riêng biệt cho mọi yêu cầu. Đừng lo lắng về chi phí bộ nhớ ở đây; trình thu gom rác Python sẽ dọn dẹp các trường hợp này khi chúng không còn cần thiết nữa. Mã này đặt kênh người nhận dựa trên một tham số được truyền cho hàm tạo.

Nối các dòng sau vào coinbot.py để tạo hàm tạo:

coinbot.py
...     # The constructor for the class. It takes the channel name as the a     # parameter and sets it as an instance variable.     def __init__(self, channel):         self.channel = channel 

Bây giờ viết mã mô phỏng để lật một đồng xu. Ta sẽ tạo ngẫu nhiên một hoặc một số không, đại diện cho đầu hoặc đuôi tương ứng.

Nối các dòng sau vào coinbot.py để mô phỏng việc lật đồng xu và trả lại trọng tải đã tạo:

coinbot.py
...     # Generate a random number to simulate flipping a coin. Then return the      # crafted slack payload with the coin flip message.     def _flip_coin(self):         rand_int =  random.randint(0,1)         if rand_int == 0:             results = "Heads"         else:             results = "Tails"          text = f"The result is {results}"          return {"type": "section", "text": {"type": "mrkdwn", "text": text}}, 

Cuối cùng, tạo một phương thức thủ công và trả về toàn bộ trọng tải thư, bao gồm cả dữ liệu từ phương thức khởi tạo của bạn, bằng cách gọi phương thức _flip_coin của bạn.

Nối các dòng sau vào coinbot.py để tạo phương thức sẽ tạo tải trọng đã hoàn thành:

coinbot.py
...     # Craft and return the entire message payload as a dictionary.     def get_message_payload(self):         return {             "channel": self.channel,             "blocks": [                 self.COIN_BLOCK,                 *self._flip_coin(),             ],         } 

Đến đây bạn đã hoàn thành lớp CoinBot và nó đã sẵn sàng để thử nghiệm. Trước khi tiếp tục, hãy xác minh file đã hoàn thành của bạn, coinbot.py , chứa những nội dung sau:

coinbot.py
# import the random library to help us generate the random numbers import random  # Create the CoinBot Class class CoinBot:      # Create a constant that contains the default text for the message     COIN_BLOCK = {         "type": "section",         "text": {             "type": "mrkdwn",             "text": (                 "Sure! Flipping a coin....\n\n"             ),         },     }      # The constructor for the class. It takes the channel name as the a      # parameter and then sets it as an instance variable     def __init__(self, channel):         self.channel = channel      # Generate a random number to simulate flipping a coin. Then return the      # crafted slack payload with the coin flip message.     def _flip_coin(self):         rand_int =  random.randint(0,1)         if rand_int == 0:             results = "Heads"         else:             results = "Tails"          text = f"The result is {results}"          return {"type": "section", "text": {"type": "mrkdwn", "text": text}},      # Craft and return the entire message payload as a dictionary.     def get_message_payload(self):         return {             "channel": self.channel,             "blocks": [                 self.COIN_BLOCK,                 *self._flip_coin(),             ],         } 

Lưu và đóng file .

Đến đây bạn đã có một lớp Python sẵn sàng để thực hiện công việc cho Slackbot của bạn , hãy đảm bảo lớp này tạo ra một trọng tải thư hữu ích và bạn có thể gửi nó đến không gian làm việc của bạn .

Bước 4 - Kiểm tra tin nhắn của bạn

Bây giờ hãy kiểm tra xem lớp này có tạo ra một trọng tải thích hợp không. Tạo một file có tên
coinbot_test.py :

  • nano coinbot_test.py

Bây giờ hãy thêm đoạn mã sau. Đảm bảo thay đổi tên kênh trong phần khởi tạo của lớp coin_bot = coinbot("# YOUR_CHANNEL_HERE ") . Mã này sẽ tạo một ứng dụng client Slack bằng Python sẽ gửi thông báo đến kênh bạn chỉ định rằng bạn đã cài đặt ứng dụng vào:

coinbot_test.py
from slack import WebClient from coinbot import CoinBot import os  # Create a slack client slack_web_client = WebClient(token=os.environ.get("SLACK_TOKEN"))  # Get a new CoinBot coin_bot = CoinBot("#YOUR_CHANNEL_HERE")  # Get the onboarding message payload message = coin_bot.get_message_payload()  # Post the onboarding message in Slack slack_web_client.chat_postMessage(**message) 

Lưu và đóng file .

Trước khi có thể chạy file này, bạn cần xuất mã thông báo Slack mà bạn đã lưu ở Bước 1 dưới dạng biến môi trường:

  • export SLACK_TOKEN="your_bot_user_token"

Bây giờ hãy kiểm tra file này và xác minh tải trọng được tạo và gửi bằng cách chạy tập lệnh sau trong terminal của bạn. Đảm bảo rằng môi trường ảo của bạn đã được kích hoạt. Bạn có thể xác minh điều này bằng cách xem văn bản (slackbot) ở phía trước dấu nhắc bash của bạn. Chạy lệnh này, bạn sẽ nhận được một thông báo từ Slackbot của bạn với kết quả của một lần lật xu:

  • python coinbot_test.py

Kiểm tra kênh mà bạn đã cài đặt ứng dụng của bạn và xác minh bot của bạn đã thực sự gửi thông báo lật đồng xu. Kết quả của bạn sẽ là đầu hoặc đuôi.

Kiểm tra lật đồng xu

Đến đây bạn đã xác minh Slackbot của bạn có thể lật đồng xu, tạo tin nhắn và gửi tin nhắn, hãy tạo Flask để chạy vĩnh viễn ứng dụng này và làm cho nó mô phỏng việc lật đồng xu và chia sẻ kết quả khi nào nó nhìn thấy một số văn bản nhất định trong tin nhắn được gửi trong kênh.

Bước 5 - Tạo ứng dụng Flask để chạy Slackbot của bạn

Đến đây bạn đã có một ứng dụng đang hoạt động có thể gửi tin nhắn đến không gian làm việc Slack của bạn , bạn cần tạo một quy trình chạy lâu dài để bot của bạn có thể nghe tin nhắn được gửi trong kênh và trả lời chúng nếu văn bản đáp ứng các tiêu chí nhất định. Bạn sẽ sử dụng Flask khuôn khổ web Python để chạy quy trình này và lắng nghe các sự kiện trong kênh của bạn.

Trong phần này, bạn sẽ chạy ứng dụng Flask của bạn từ một server có địa chỉ IP công khai để API Slack có thể gửi cho bạn các sự kiện. Nếu bạn đang chạy local này trên máy trạm cá nhân của bạn , bạn cần chuyển tiếp cổng từ firewall cá nhân của bạn tới cổng sẽ chạy trên máy trạm của bạn. Các cổng này có thể giống nhau và hướng dẫn này sẽ được cài đặt để sử dụng cổng 3000 .

Trước tiên, hãy điều chỉnh cài đặt firewall của bạn để cho phép lưu lượng truy cập qua cổng 3000 :

  • sudo ufw allow 3000

Bây giờ hãy kiểm tra trạng thái của ufw :

  • sudo ufw status

Bạn sẽ thấy một kết quả như thế này:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 3000 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 3000 (v6) ALLOW Anywhere (v6)

Bây giờ, hãy tạo file cho ứng dụng Flask của bạn. Đặt tên file này là app.py :

  • touch app.py

Tiếp theo, mở file này trong editor yêu thích của bạn:

  • nano app.py

Bây giờ hãy thêm các statements nhập sau. Bạn sẽ nhập các thư viện sau vì những lý do sau:

  • import os - Để truy cập các biến môi trường
  • import logging - Để ghi log các sự kiện của ứng dụng
  • from flask import Flask - Để tạo ứng dụng Flask
  • from slack import WebClient - Để gửi tin nhắn qua Slack
  • from slackeventsapi import SlackEventAdapter - Để nhận các sự kiện từ Slack và xử lý chúng
  • from coinbot import CoinBot - Để tạo một version CoinBot của bạn và tạo tải trọng tin nhắn.

Nối các dòng sau vào app.py để nhập tất cả các thư viện cần thiết:

app.py
import os import logging from flask import Flask from slack import WebClient from slackeventsapi import SlackEventAdapter from coinbot import CoinBot 

Bây giờ, hãy tạo ứng dụng Flask của bạn và đăng ký Bộ điều hợp sự kiện Slack vào ứng dụng Slack của bạn tại điểm cuối /slack/events . Điều này sẽ tạo một tuyến đường trong ứng dụng Slack của bạn, nơi các sự kiện Slack sẽ được gửi và nhập. Để làm điều này, bạn cần lấy một mã thông báo khác từ ứng dụng Slack của bạn , bạn sẽ thực hiện việc này sau trong hướng dẫn. Khi bạn nhận được biến này, bạn sẽ xuất nó dưới dạng biến môi trường có tên SLACK_EVENTS_TOKEN . Hãy tiếp tục và viết mã của bạn để đọc khi tạo SlackEventAdapter , ngay cả khi bạn chưa đặt mã thông báo.

Nối các dòng sau vào app.py để tạo ứng dụng Flask và đăng ký bộ điều hợp sự kiện vào ứng dụng này:

app.py
... # Initialize a Flask app to host the events adapter app = Flask(__name__)  # Create an events adapter and register it to an endpoint in the slack app for event ingestion. slack_events_adapter = SlackEventAdapter(os.environ.get("SLACK_EVENTS_TOKEN"), "/slack/events", app) 

Tiếp theo, tạo một đối tượng khách hàng web sẽ cho phép ứng dụng của bạn thực hiện các hành động trong không gian làm việc, cụ thể là để gửi tin nhắn. Điều này tương tự như những gì bạn đã làm khi kiểm tra file coinbot.py trước đây.

Nối dòng sau vào app.py để tạo slack_web_client này:

app.py
... # Initialize a Web API client slack_web_client = WebClient(token=os.environ.get("SLACK_TOKEN")) 

Bây giờ, hãy tạo một hàm có thể được gọi để tạo một version của CoinBot , sau đó sử dụng version này để tạo một tải trọng tin nhắn và chuyển tải trọng tin nhắn đến ứng dụng client web Slack để gửi. Hàm này sẽ nhận một tham số duy nhất là channel , tham số này sẽ chỉ định kênh nào nhận được thông báo.

Nối các dòng sau vào app.py để tạo hàm này:

app.py
... def flip_coin(channel):     """Craft the CoinBot, flip the coin and send the message to the channel     """     # Create a new CoinBot     coin_bot = CoinBot(channel)      # Get the onboarding message payload     message = coin_bot.get_message_payload()      # Post the onboarding message in Slack     slack_web_client.chat_postMessage(**message) 

Đến đây bạn đã tạo một chức năng để xử lý các khía cạnh nhắn tin của ứng dụng, hãy tạo một chức năng giám sát các sự kiện Slack cho một hành động nhất định và sau đó thực thi bot của bạn. Bạn sẽ cấu hình ứng dụng của bạn để phản hồi với kết quả của một lần lật đồng xu mô phỏng khi ứng dụng nhìn thấy cụm từ “Này Sammy, Hãy lật một đồng xu”. Bạn sẽ chấp nhận bất kỳ version nào của điều này — trường hợp này sẽ không ngăn ứng dụng phản hồi.

Đầu tiên, hãy trang trí hàm của bạn bằng cú pháp @slack_events_adapter.on cho phép hàm của bạn nhận các sự kiện. Chỉ định rằng bạn chỉ muốn các sự kiện message và để hàm của bạn chấp nhận một tham số trọng tải chứa tất cả thông tin Slack cần thiết. Sau khi bạn có tải trọng này, bạn sẽ phân tích văn bản và phân tích nó. Sau đó, nếu nó nhận được cụm từ kích hoạt, ứng dụng của bạn sẽ gửi kết quả của một lần lật đồng xu mô phỏng.

Nối mã sau vào app.py để nhận, phân tích và xử lý các tin nhắn đến:

app.py
# When a 'message' event is detected by the events adapter, forward that payload # to this function. @slack_events_adapter.on("message") def message(payload):     """Parse the message event, and if the activation string is in the text,     simulate a coin flip and send the result.     """      # Get the event data from the payload     event = payload.get("event", {})      # Get the text from the event that came through     text = event.get("text")      # Check and see if the activation phrase was in the text of the message.     # If so, execute the code to flip a coin.     if "hey sammy, flip a coin" in text.lower():         # Since the activation phrase was met, get the channel ID that the event         # was executed on         channel_id = event.get("channel")          # Execute the flip_coin function and send the results of         # flipping a coin to the channel         return flip_coin(channel_id) 

Cuối cùng, tạo một phần main sẽ tạo một trình ghi log để bạn có thể xem nội dung bên trong của ứng dụng cũng như chạy ứng dụng trên địa chỉ IP bên ngoài của bạn trên cổng 3000 . Để nhập các sự kiện từ Slack, chẳng hạn như khi một thư mới được gửi đi, bạn phải kiểm tra ứng dụng của bạn trên một địa chỉ IP công khai.

Nối các dòng sau vào app.py để cài đặt phần chính của bạn:

app.py
if __name__ == "__main__":     # Create the logging object     logger = logging.getLogger()      # Set the log level to DEBUG. This will increase verbosity of logging messages     logger.setLevel(logging.DEBUG)      # Add the StreamHandler as a logging handler     logger.addHandler(logging.StreamHandler())      # Run your app on your externally facing IP address on port 3000 instead of     # running it on localhost, which is traditional for development.     app.run(host='0.0.0.0', port=3000) 

Đến đây bạn đã hoàn thành ứng dụng Flask và nó đã sẵn sàng để thử nghiệm. Trước khi bạn tiếp tục xác minh file đã hoàn thành của bạn , app.py chứa thông tin sau:

app.py
import os import logging from flask import Flask from slack import WebClient from slackeventsapi import SlackEventAdapter from coinbot import CoinBot  # Initialize a Flask app to host the events adapter app = Flask(__name__) # Create an events adapter and register it to an endpoint in the slack app for event injestion. slack_events_adapter = SlackEventAdapter(os.environ.get("SLACK_EVENTS_TOKEN"), "/slack/events", app)  # Initialize a Web API client slack_web_client = WebClient(token=os.environ.get("SLACK_TOKEN"))  def flip_coin(channel):     """Craft the CoinBot, flip the coin and send the message to the channel     """     # Create a new CoinBot     coin_bot = CoinBot(channel)      # Get the onboarding message payload     message = coin_bot.get_message_payload()      # Post the onboarding message in Slack     slack_web_client.chat_postMessage(**message)   # When a 'message' event is detected by the events adapter, forward that payload # to this function. @slack_events_adapter.on("message") def message(payload):     """Parse the message event, and if the activation string is in the text,      simulate a coin flip and send the result.     """      # Get the event data from the payload     event = payload.get("event", {})      # Get the text from the event that came through     text = event.get("text")      # Check and see if the activation phrase was in the text of the message.     # If so, execute the code to flip a coin.     if "hey sammy, flip a coin" in text.lower():         # Since the activation phrase was met, get the channel ID that the event         # was executed on         channel_id = event.get("channel")          # Execute the flip_coin function and send the results of         # flipping a coin to the channel         return flip_coin(channel_id)  if __name__ == "__main__":     # Create the logging object     logger = logging.getLogger()      # Set the log level to DEBUG. This will increase verbosity of logging messages     logger.setLevel(logging.DEBUG)      # Add the StreamHandler as a logging handler     logger.addHandler(logging.StreamHandler())      # Run our app on our externally facing IP address on port 3000 instead of     # running it on localhost, which is traditional for development.     app.run(host='0.0.0.0', port=3000) 

Lưu và đóng file .

Bây giờ ứng dụng Flask của bạn đã sẵn sàng để phục vụ ứng dụng của bạn, hãy thử nghiệm nó.

Bước 6 - Chạy ứng dụng Flask của bạn

Cuối cùng, tập hợp mọi thứ lại với nhau và thực thi ứng dụng của bạn.

Đầu tiên, hãy thêm ứng dụng đang chạy của bạn làm trình xử lý được ủy quyền cho Slackbot của bạn.

Điều hướng đến phần Thông tin cơ bản của ứng dụng của bạn trong giao diện user Slack . Cuộn xuống cho đến khi bạn tìm thấy phần Thông tin đăng nhập ứng dụng .

Bí mật ký kết Slack

Sao chép Bí mật ký và xuất nó dưới dạng biến môi trường SLACK_EVENTS_TOKEN :

  • export SLACK_EVENTS_TOKEN="MY_SIGNING_SECRET_TOKEN"

Với điều này, bạn có tất cả các mã thông báo API cần thiết để chạy ứng dụng của bạn . Tham khảo Bước 1 nếu bạn cần cập nhật về cách xuất SLACK_TOKEN của bạn . Đến đây bạn có thể khởi động ứng dụng của bạn và xác minh nó thực sự đang chạy. Đảm bảo rằng môi trường ảo của bạn đã được kích hoạt và chạy lệnh sau để khởi động ứng dụng Flask của bạn:

  • python3 app.py

Bạn sẽ thấy một kết quả như thế này:

(slackbot) [20:04:03] sammy:coinbot$ python app.py  * Serving Flask app "app" (lazy loading)  * Environment: production    WARNING: This is a development server. Do not use it in a production deployment.    Use a production WSGI server instead.  * Debug mode: off  * Running on http://0.0.0.0:3000/ (Press CTRL+C to quit) 

Để xác minh ứng dụng của bạn đã hoạt động, hãy mở một cửa sổ terminal mới và curl địa chỉ IP của server của bạn với đúng cổng tại /slack/events :

  • curl http://YOUR_IP_ADDRESS:3000/slack/events

curl sẽ trả về như sau:

Output
These are not the slackbots you're looking for.

Nhận được thông báo These are not the slackbots you're looking for. , cho biết rằng ứng dụng của bạn đang hoạt động.

Bây giờ, hãy để ứng dụng Flask này chạy trong khi bạn hoàn tất việc cấu hình ứng dụng của bạn trong giao diện user Slack .

Trước tiên, hãy cấp cho ứng dụng của bạn các quyền thích hợp để ứng dụng có thể nghe tin nhắn và phản hồi tương ứng. Nhấp vào Đăng ký sự kiện trong thanh bên giao diện user và bật nút radio Bật sự kiện .

Bật nút sự kiện

Khi bạn đã hoàn thành việc đó, hãy nhập địa chỉ IP, cổng và điểm cuối /slack/events vào trường URL yêu cầu . Đừng quên tiền tố giao thức HTTP . Slack sẽ cố gắng kết nối với điểm cuối của bạn. Khi nó đã được thực hiện thành công, bạn sẽ thấy một dấu kiểm màu xanh lá cây với từ Đã xác minh bên cạnh nó.

URL yêu cầu đăng ký sự kiện

Tiếp theo, mở rộng Đăng ký sự kiện bot và thêm quyền message.channels vào ứng dụng của bạn. Điều này sẽ cho phép ứng dụng của bạn nhận tin nhắn từ kênh của bạn và xử lý chúng.

Đăng ký quyền đối với các sự kiện bot

Sau khi thực hiện xong việc này, bạn sẽ thấy sự kiện được liệt kê trong phần Đăng ký sự kiện bot . Tiếp theo, nhấp vào nút Lưu thay đổi màu xanh lá cây ở góc dưới cùng bên phải.

Xác nhận và Lưu thay đổi

Sau khi thực hiện việc này, bạn sẽ thấy một biểu ngữ màu vàng trên đầu màn hình thông báo rằng bạn cần cài đặt lại ứng dụng của bạn để áp dụng các thay đổi sau. Mỗi khi thay đổi quyền, bạn cần cài đặt lại ứng dụng của bạn . Nhấp vào liên kết cài đặt lại ứng dụng của bạn trong biểu ngữ này để cài đặt lại ứng dụng của bạn.

Cài đặt lại biểu ngữ ứng dụng của bạn

Bạn sẽ thấy màn hình xác nhận tóm tắt các quyền mà bot của bạn sẽ có và hỏi bạn có muốn cho phép cài đặt nó hay không. Nhấp vào nút Cho phép màu xanh lá cây để kết thúc quá trình cài đặt.

Xác nhận cài đặt lại

Đến đây bạn đã hoàn thành việc này, ứng dụng của bạn đã sẵn sàng. Quay lại kênh mà bạn đã cài đặt CoinBot và gửi tin nhắn có chứa cụm từ Hey Sammy, Flip a coin trong đó. Bot của bạn sẽ lật một đồng xu và trả lời kết quả. Chúc mừng! Bạn đã tạo một Slackbot!

Này Sammy, Lật đồng xu

Kết luận

Khi bạn đã hoàn tất việc phát triển ứng dụng của bạn và bạn đã sẵn sàng chuyển nó sang production , bạn cần phải triển khai nó đến một server . Điều này là cần thiết vì server phát triển Flask không phải là một môi trường production an toàn. Bạn sẽ được phục vụ tốt hơn nếu triển khai ứng dụng của bạn bằng WSGI và thậm chí có thể bảo mật domain và cung cấp cho server của bạn bản ghi DNS. Có nhiều tùy chọn để triển khai các ứng dụng Flask, một số tùy chọn được liệt kê bên dưới:

Có nhiều cách khác để triển khai ứng dụng của bạn ngoài những cách này. Như thường lệ, khi nói đến triển khai và cơ sở hạ tầng, hãy làm những gì phù hợp nhất với bạn .

Trong mọi trường hợp, bây giờ bạn có một Slackbot mà bạn có thể sử dụng để lật đồng xu để giúp bạn đưa ra quyết định, chẳng hạn như ăn gì cho bữa trưa.

Bạn cũng có thể lấy mã cơ sở này và sửa đổi nó để phù hợp với nhu cầu của bạn , cho dù đó là hỗ trợ tự động, quản lý tài nguyên, hình ảnh về mèo hoặc bất cứ điều gì bạn có thể nghĩ ra. Bạn có thể xem toàn bộ tài liệu Python Slack API tại đây .


Tags:

Các tin liên quan

Cách sử dụng ThreadPoolExecutor trong Python 3
2020-06-23
Cách sử dụng module sqlite3 trong Python 3
2020-06-02
Cách thiết lập notebook Jupyter với Python 3 trên Ubuntu 20.04 và Kết nối qua Đường hầm SSH
2020-05-19
Cách cài đặt Phân phối Python Anaconda trên Ubuntu 20.04 [Khởi động nhanh]
2020-05-19
Cách cài đặt Phân phối Python Anaconda trên Ubuntu 20.04
2020-05-06
Cách cài đặt Python 3 và thiết lập môi trường lập trình trên server Ubuntu 20.04
2020-04-24
Cách cài đặt Python 3 và thiết lập môi trường lập trình trên server Ubuntu 18.04
2020-04-24
Cách cài đặt Python 3 và thiết lập môi trường lập trình trên Ubuntu 20.04 [Quickstart]
2020-04-24
Cách cài đặt Python 3 và thiết lập môi trường lập trình trên Ubuntu 18.04 [Quickstart]
2020-04-24
Cách cài đặt Python 3 và thiết lập môi trường lập trình trên CentOS 8
2020-04-10