Slack是团队的沟通平台。Slack有许多附加组件,可以让团队扩展Slack,并将其与其他程序集成。slash命令是在消息输入框中执行操作的快捷方式。例如,键入/who
列出当前频道中的所有用户。
您可以创建自己的slash命令,Slack工作区的成员可以找到它们。将命令安装到工作区并调用该命令时,可以指示Slack向您编写的程序发出请求。该程序从Slack接收信息并返回响应,该响应显示在Slack中。您可以通过阅读API文档了解有关slash命令的更多信息。
在本教程中,您将创建一个Slack命令/slash
,该命令由在Ubuntu 16.04服务器上运行的Flask应用程序提供支持,并将此命令安装到Slack工作区。完成后,输入/slash
消息输入框将向Flask应用程序发送信息,该应用程序将处理请求并向Slack返回一条短消息,告知您它是否有效。
您将使用uWSGI应用程序服务器为此Flask应用程序提供服务,并使用Nginx作为反向代理。
要完成本教程,您需要:
在编写代码之前,我们将首先创建一个Slack应用程序,它为Slack提供附加功能,并将其安装在开发Slack工作区中。然后我们将定义命令并指定命令在调用命令时应该请求的URL。
要创建Slack应用程序,请访问https://api.slack.com/apps
并单击绿色的“创建新应用程序”按钮。在显示的表单中,输入以下详细信息:
然后单击绿色的“ 创建应用程序”按钮。创建应用程序后,单击“ Slash Commands”,然后单击“ Create New Command”按钮。您将看到以下页面:
在本教程中,您将创建一个名为的命令/slash,该命令将通过HTTP POST将数据发送到请求URL 。为此,请填写以下信息:http://server_domain_or_IP/slash
/slash
填写命令字段。http://your_server_ip_or_domain/slash
然后在绿色的“ 保存”按钮上完成创建斜杠命令。
现在,通过单击Install App链接将应用程序安装到您的工作区。按绿色“将应用程序安装到工作区”按钮。然后按绿色授权按钮。
我们现在已经在开发Slack工作区中创建并安装了一个Slack应用程序。但是在我们创建一个处理slash命令的Web应用程序之前,该命令将无法运行。在我们构建应用程序之前,我们需要配置我们的Python环境。
使用uWSGI和Nginx完成如何为Flask应用程序提供服务之后,您将找到一个Flask应用程序。该~/myproject/
目录包含以下文件和目录:
myproject.ini
myproject.py
wsgi.py
myprojectenv/
我们将修改Flask应用程序myproject.py
以对Slack slash命令发送的数据进行操作,并向Slack返回JSON响应。命令的API文档声明我们应该使用Slack提供的与commnd关联的验证令牌来验证slash命令。
此验证令牌应保密,因此我们将其保存在一个名为.envfile
的新文件中,该文件不受版本控制。
我们将使用python-dotenv
包将.env
中的键值对导出为环境变量,我们将访问这些环境变量myproject.py
。
首先,运行以下命令激活Python虚拟环境:
$ source myprojectenv/bin/activate
要确认virtualenv
已激活,您应该在Bash提示的左侧看到。诸如验证令牌之类不应存储在版本控制之下。为此,我们使用python-dotenv
包将密钥导出为环境变量。使用pip
安装python-dotenv
包
(myprojectenv) $ pip install python-dotenv
使用nano
或您喜欢的文本编辑器,创建.env
文件:
(myprojectenv) $ nano .env
访问https://api.slack.com/apps
获取验证令牌。单击Tencent Slack slash 命令应用程序,然后单击基本信息。然后找到 验证令牌。
复制令牌的值并将其放在.env
文件中,将值分配给名为的环境变量VERIFICATION_TOKEN
:
~/myproject/.env
VERIFICATION_TOKEN=your_verification_token
保存文件并退出编辑器。
在开发Flask应用程序时,您需要在对应用程序进行更改时自动重新加载uWSGI服务器。要执行此操作,请先myproject.ini
在编辑器中打开:
(myprojectenv) $ nano myproject.ini
将此行添加到文件末尾,以确保在您修改Flask应用程序时自动重新加载uWSGImyproject.py
〜/ myproject的/ myproject.ini
...
touch-reload = myproject.py
保存文件并退出编辑器。
现在我们将创建Flask应用程序,该应用程序接收并处理slash命令发送的信息,并向Slack返回适当的响应。
当我们在Slack中调用/slash
命令时,Slack将向我们的服务器发出请求。我们配置命令为指向url /slash
,因此我们将创建的Flask应用程序以响应Slack。
myproject.py
在编辑器中打开:
(myprojectenv) $ nano myproject.py
删除文件的内容。我们将从头开始创建一个新的应用程序。
添加此代码导入Flask并加载其他模块以处理JSON数据和发出Web请求:
~/myproject/myproject.py
#!/usr/bin/env python
from flask import Flask, jsonify, request
然后添加加载dotenv
模块的代码。读取.env
您创建的文件的内容。将其内容加载到环境变量中,然后从环境中提取验证令牌,并将其存储在verification_token
变量中:
~/myproject/myproject.py
...
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']
现在添加此代码以配置Flask应用程序以通过发送“Tencent Slack slash命令成功!”的文本响应来响应Slack斜杠命令:
~/myproject/myproject.py
...
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()
保存文件并退出编辑器。
重新启动myproject
systemd服务以确保正在运行最新版本的代码:
(myprojectenv) $ sudo systemctl restart myproject
现在让我们修改Nginx配置以支持我们的slash命令。
因为我们的请求URL是http://server_domain_or_IP/slash
,所以我们需要将Nginx服务器块中的位置值从/
更改为/slash
。
在编辑器中打开/etc/nginx/sites-available/myproject
文件 :
(myprojectenv) $ sudo nano /etc/nginx/sites-available/myproject
将location
的值从/
更改为/slash
:
/etc/nginx/sites-available/myproject
...
location /slash {
include uwsgi_params;
uwsgi_pass unix:/home/sammy/myproject/myproject.sock;
}
}
保存文件并退出编辑器。
然后检查Nginx配置文件是否存在语法错误:
(myprojectenv) $ sudo nginx -t
如果Nginx配置文件没有语法错误,请重新启动Nginx服务:
(myprojectenv) $ sudo systemctl restart nginx
访问您的开发Slack工作区并输入/slash
。您应该看到以下响应:
如果您收到一条消息,指出命令失败,请仔细检查代码myproject.py
是否存在任何语法错误或问题。然后再试一次。
最后,在完成开发命令后,停用Python虚拟环境,以便将来的Python命令使用系统Python解释器:
(myprojectenv) $ deactivate
您现在已经成功创建了一个Flask应用程序,它从/slash
slash命令接收信息并返回对Slack的响应。
为确保服务器与Slack之间的通信安全,请使用HTTPS为请求URL加密slash命令的连接。完成后,请务必修改Slack应用程序的URL并更改http://
为https://
。
在本教程中,您通过设置由uWSGI应用程序服务器和Nginx反向代理服务器提供服务的Flask应用程序来实现Slack slash命令。了解了创建slash命令的基础知识后,可以实现团队所需的任何slash命令。可以创建从数据库检索数据,与其他API交互,甚至创建用于部署代码的命令。您也可以参考五款 Slack 开源替代品找到适合自己的工具。
参考文献:《How to Write a Slash Command with Flask and Python 3 on Ubuntu 16.04》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。