Cách viết lệnh Slash với Flask và Python 3 trên Ubuntu 16.04
Slack là một nền tảng giao tiếp dành cho các group . Slack có nhiều tiện ích bổ sung cho phép các group mở rộng Slack và tích hợp nó với các chương trình khác. Lệnh gạch chéo là một cách nhanh chóng và dễ dàng để thực hiện các hành động trong hộp nhập thư. Ví dụ: nhập/who
liệt kê tất cả user trong kênh hiện tại. Bạn có thể tìm thấy danh sách đầy đủ các lệnh gạch chéo tích hợp tại https://get.slack.help/hc/en-us/articles/201259356-Slash-commands . Bạn có thể tạo các lệnh gạch chéo của riêng mình mà các thành viên trong không gian làm việc Slack của bạn thấy hữu ích. Khi bạn cài đặt lệnh vào vùng làm việc của bạn và gọi lệnh, bạn có thể hướng dẫn Slack đưa ra yêu cầu đối với chương trình bạn đã viết. Chương trình này nhận thông tin từ Slack và trả về một phản hồi, được hiển thị trong Slack. Bạn có thể tìm hiểu thêm về các lệnh Slack slack bằng cách đọc tài liệu API .
Trong hướng dẫn này, bạn sẽ tạo một lệnh Slack Slack có tên là /slash
, được cung cấp bởi ứng dụng Flask chạy trên server Ubuntu 16.04 và cài đặt lệnh này vào không gian làm việc Slack của bạn. Sau khi bạn hoàn tất, nhập /slash
vào hộp nhập tin nhắn sẽ gửi thông tin đến ứng dụng Flask, ứng dụng này sẽ xử lý yêu cầu và gửi lại một tin nhắn ngắn cho Slack để bạn biết rằng nó đã hoạt động.
Bạn sẽ cung cấp ứng dụng Flask này bằng server ứng dụng uWSGI và sử dụng Nginx làm Reverse Proxy .
Yêu cầu
Để hoàn thành hướng dẫn này, bạn cần :
- Một server Ubuntu 16.04 được cài đặt theo hướng dẫn cài đặt server ban đầu Ubuntu 16.04 , bao gồm user không phải root có quyền sudo và firewall .
- Một ứng dụng Flask hiện có được cung cấp với uWSGI chạy sau Nginx. Hoàn thành hướng dẫn Cách cung cấp ứng dụng Flask với uWSGI và Nginx trên Ubuntu 16.04 để cấu hình điều này trên server của bạn.
- Không gian làm việc Slack phát triển có quyền cài đặt ứng dụng, Nếu bạn chưa có, hãy tạo một không gian làm việc tại https://slack.com/create .
Bước 1 - Tạo và cài đặt ứng dụng Slack
Trước khi viết mã, trước tiên ta sẽ tạo một ứng dụng Slack , ứng dụng này cung cấp chức năng bổ sung cho Slack và cài đặt nó trong không gian làm việc Slack phát triển. Sau đó, ta sẽ xác định lệnh và chỉ định URL mà lệnh sẽ yêu cầu khi ta gọi lệnh.
Để tạo ứng dụng Slack, hãy truy cập https://api.slack.com/apps và nhấp vào nút Tạo ứng dụng mới màu xanh lục. Trong biểu mẫu xuất hiện, hãy nhập các chi tiết sau:
- Đối với Tên ứng dụng , hãy nhập
DigitalOcean Slack slash command
. - Đối với Không gian làm việc phát triển Slack , hãy chọn không gian làm việc phát triển của bạn.
Sau đó nhấp vào nút Tạo ứng dụng màu xanh lá cây.
Khi ứng dụng được tạo, hãy nhấp vào Lệnh Slash và sau đó nhấp vào nút Tạo Lệnh mới . Bạn sẽ thấy trang sau:
Đối với hướng dẫn này, bạn sẽ tạo một lệnh có tên là /slash
, lệnh này sẽ gửi dữ liệu qua HTTP POST đến một URL yêu cầu là http:// server_domain_or_IP /slash
. Để có, hãy điền các thông tin sau:
- Điền vào trường Lệnh bằng
/slash
. - Đối với URL yêu cầu , hãy nhập
http:// your_server_ip_or_domain /slash
. - Đối với Mô tả ngắn gọn , hãy nhập
DigitalOcean Slack slash command
.
Sau đó vào nút Save màu xanh lục để kết thúc việc tạo lệnh gạch chéo.
Bây giờ, hãy cài đặt ứng dụng vào không gian làm việc của bạn bằng cách nhấp vào liên kết Cài đặt ứng dụng . Nhấn nút Install App to Workspace màu xanh lục. Sau đó nhấn nút Ủy quyền màu xanh lá cây.
Hiện ta đã tạo và cài đặt một ứng dụng Slack trong không gian làm việc Slack đang phát triển, nhưng lệnh sẽ không hoạt động cho đến khi ta tạo một ứng dụng web xử lý lệnh gạch chéo. Trước khi có thể xây dựng ứng dụng, ta cần cấu hình môi trường Python của bạn .
Bước 2 - Cấu hình Môi trường Python
Sau khi hoàn thành hướng dẫn Cách cung cấp ứng dụng Flask với uWSGI và Nginx trên Ubuntu 16.04 , bạn có một ứng dụng Flask nằm trong ~/ myproject /
. Thư mục này chứa các file và folder sau:
-
myproject .ini
-
myproject .py
-
wsgi.py
-
myprojectenv /
Ta sẽ sửa đổi ứng dụng Flask trong myproject .py
để hành động trên dữ liệu được gửi bởi lệnh Slack Slack và trả về phản hồi JSON cho Slack.
Tài liệu API cho các lệnh nêu rõ rằng ta nên xác thực lệnh gạch chéo bằng cách sử dụng mã xác minh được liên kết với dấu phẩy, do Slack cung cấp.
Mã thông báo xác minh này phải được giữ bí mật, vì vậy ta sẽ lưu nó vào một file mới có tên là file .env
không được giữ dưới sự kiểm soát của version . Ta sẽ sử dụng gói python-dotenv
để xuất các cặp key-value trong .env
dưới dạng các biến môi trường và ta sẽ truy cập các biến môi trường đó trong myproject .py
.
Đầu tiên, kích hoạt môi trường ảo Python bằng lệnh:
- source myprojectenv/bin/activate
Để xác nhận virtualenv đã được kích hoạt, bạn sẽ thấy ( myprojectenv )
ở phía bên trái của dấu nhắc Bash. Các bí mật như mã thông báo xác minh không được lưu trữ dưới sự kiểm soát của version . Để làm điều này, ta sử dụng gói python-dotenv
xuất các bí mật dưới dạng các biến môi trường. Sử dụng pip
, ta cài đặt gói python-dotenv
:
- pip install python-dotenv
Sử dụng nano hoặc editor yêu thích của bạn, tạo file .env
:
- nano .env
Nhận mã xác minh bằng cách truy cập https://api.slack.com/apps . Nhấp vào ứng dụng lệnh gạch chéo DigitalOcean Slack sau đó nhấp vào Thông tin cơ bản . Sau đó tìm Mã xác minh .
Sao chép giá trị cho mã thông báo và đặt nó vào file .env
, gán giá trị cho một biến môi trường có tên VERIFICATION_TOKEN
:
VERIFICATION_TOKEN=your_verification_token
Lưu file và thoát khỏi editor .
Khi bạn đang phát triển một ứng dụng Flask, bạn cần server uWSGI tự động reload khi bạn áp dụng các thay đổi đối với ứng dụng. Để thực hiện việc này, trước tiên hãy mở myproject .ini
trong trình soạn thảo của bạn:
- nano myproject.ini
Thêm dòng này vào cuối file đảm bảo rằng uWSGI tự động reload khi bạn touch
hoặc sửa đổi ứng dụng Flask trong myproject .py
... touch-reload = myproject.py
Lưu file và thoát khỏi editor .
Bây giờ ta sẽ tạo ứng dụng Flask nhận và xử lý thông tin được gửi bởi lệnh gạch chéo và trả về phản hồi thích hợp cho Slack.
Bước 3 - Tạo ứng dụng Flask
Khi ta gọi lệnh /slash
trong Slack, Slack sẽ đưa ra yêu cầu tới server của ta . Ta đã cấu hình lệnh để nhấn url /slash
, vì vậy ta sẽ thay đổi ứng dụng Flask mà ta đã tạo để phản hồi với điểm cuối đó.
Mở myproject .py
trong trình soạn thảo của bạn:
- nano myproject.py
Xóa nội dung của file . Ta sẽ tạo một ứng dụng mới từ đầu.
Thêm mã này để nhập Flask và tải các module bổ sung để xử lý dữ liệu JSON và thực hiện các yêu cầu web:
#!/usr/bin/env python from flask import Flask, jsonify, request
Sau đó, thêm mã này để tải module dotenv
. đọc nội dung của file .env
bạn đã tạo. tải nội dung của nó vào các biến môi trường và sau đó tìm nạp mã xác minh từ môi trường, lưu trữ nó trong biến verification_token
:
... import os import dotenv dotenv_path = os.path.join(os.path.dirname(__file__), '.env') dotenv.load_dotenv(dotenv_path) verification_token = os.environ['VERIFICATION_TOKEN']
Bây giờ, hãy thêm mã này để cấu hình ứng dụng Flask để phản hồi lệnh Slack Slack bằng cách gửi một phản hồi văn bản cho biết “Lệnh gạch chéo DigitalOcean thành công!”:
... app = Flask(__name__) @app.route('/slash', methods=['POST']) def slash(): if request.form['token'] == verification_token: payload = {'text': 'DigitalOcean Slack slash command is successful!'} return jsonify(payload) if __name__ == '__main__': app.run()
Lưu file và thoát khỏi editor .
Khởi động lại dịch vụ myproject
systemd đảm bảo version mới nhất của mã của bạn đang chạy:
- sudo systemctl restart myproject
Bây giờ, hãy sửa đổi cấu hình Nginx để hỗ trợ lệnh chém của ta .
Bước 4 - Cấu hình Nginx để Phục vụ Lệnh
Vì URL yêu cầu của ta là http:// server_domain_or_IP /slash
, nên ta cần thay đổi giá trị location
trong khối server Nginx của ta từ /
to /slash
.
Mở file /etc/nginx/sites-available/ myproject
trong editor :
- sudo nano /etc/nginx/sites-available/myproject
Thay đổi giá trị cho location
từ /
thành /slash
:
... location /slash { include uwsgi_params; uwsgi_pass unix:/home/sammy/myproject/myproject.sock; } }
Lưu file và thoát khỏi editor .
Sau đó, kiểm tra file cấu hình Nginx để biết lỗi cú pháp:
- sudo nginx -t
Nếu không có lỗi cú pháp nào với file cấu hình Nginx, hãy khởi động lại dịch vụ Nginx:
- sudo systemctl restart nginx
Truy cập không gian làm việc Slack đang phát triển của bạn và nhập /slash
vào bất kỳ kênh nào. Bạn sẽ thấy phản hồi sau:
Nếu bạn nhận được thông báo cho biết rằng lệnh không thành công, hãy kiểm tra lại mã trong myproject.py
xem có bất kỳ lỗi hoặc sự cố cú pháp nào không. Sau đó, hãy thử lại.
Cuối cùng, khi bạn đã phát triển xong lệnh của bạn , hãy hủy kích hoạt môi trường ảo Python để các lệnh Python trong tương lai sử dụng trình thông dịch Python hệ thống:
- deactivate
Đến đây bạn đã tạo thành công một ứng dụng Flask nhận thông tin từ lệnh /slash
chéo chéo và trả về phản hồi cho Slack.
Để đảm bảo giao tiếp giữa server của bạn và Slack được an toàn, hãy mã hóa kết nối cho lệnh gạch chéo bằng HTTPS cho URL yêu cầu. Bạn có thể thực hiện bằng cách cài đặt certificate SSL miễn phí do Let's Encrypt cấp trên server Nginx . Khi bạn hoàn tất, hãy nhớ sửa đổi URL cho ứng dụng Slack của bạn và thay đổi http://
thành https://
.
Kết luận
Trong hướng dẫn này, bạn đã triển khai lệnh gạch chéo Slack bằng cách cài đặt ứng dụng Flask được cung cấp bởi server ứng dụng uWSGI và server Reverse Proxy Nginx.
Đến đây bạn đã biết những điều cơ bản về cách tạo lệnh gạch chéo, bạn có thể triển khai bất kỳ lệnh gạch chéo nào mà group của bạn cần. Bạn có thể tạo các lệnh truy xuất dữ liệu từ database , tương tác với các API khác hoặc thậm chí tạo các lệnh để triển khai mã.
Các tin liên quan
Cách cài đặt Phân phối Python Anaconda trên Ubuntu 16.042017-12-27
Cách cài đặt Python 3 và thiết lập môi trường lập trình cục bộ trên Ubuntu 16.04
2017-12-20
Cách cài đặt Python 3 và thiết lập môi trường lập trình cục bộ trên Ubuntu 16.04
2017-12-20
Hiểu từ điển bằng Python 3
2017-11-21
Cách sử dụng * args và ** kwargs trong Python 3
2017-11-20
Cách làm việc với control panel tương tác Python
2017-06-21
Cách viết câu lệnh có điều kiện trong Python 3
2017-06-16
Cách cài đặt pygame và tạo mẫu để phát triển trò chơi bằng Python 3
2017-06-15
Cách chuyển mã Python 2 sang Python 3
2017-05-17
Cách chuyển mã Python 2 sang Python 3
2017-05-17