如何在Ubuntu 16.04上用Flask和Python 3写一个Slash命令

介绍

Slack是团队的交流平台。 Slack拥有众多的附加组件,可让团队扩展Slack,并将其与其他程序整合。 松弛斜线命令是在消息输入框中执行操作的快捷方式。 例如,输入/who列出当前频道中的所有用户。 您可以在https://get.slack.help/hc/en-us/articles/201259356-Slash-commands找到完整的内置斜杠命令列表。

您可以创建自己的斜线命令,以便您的Slack工作空间的成员找到有用的。 将命令安装到工作区并调用命令时,可以指示Slack向您编写的程序发出请求。 该程序接收来自Slack的信息并返回一个响应,该响应显示在Slack中。 您可以通过阅读API文档来了解有关Slack斜线命令的更多信息。

在本教程中,您将创建一个名为/slash的Slack斜线命令,该命令由运行在Ubuntu 16.04服务器上的Flask应用程序提供,并将此命令安装到Slack工作区。 完成后,在消息输入框中输入/slash将向Flask应用程序发送信息,Flask应用程序将处理该请求,并向Slack返回一条短消息,让您知道它的工作。

您将使用uWSGI应用程序服务器来提供此Flask应用程序,并使用Nginx作为反向代理。

先决条件

要完成本教程,您将需要:

第1步 - 创建和安装Slack App

在我们编写代码之前,我们将首先创建一个Slack应用程序 ,它为Slack提供额外的功能,并将其安装在开发Slack工作区中。 然后,我们将定义该命令并指定在调用该命令时该命令应该请求的URL。

要创建一个Slack应用程序,请访问https://api.slack.com/apps并点击绿色的创建新应用程序按钮。 在出现的表单中,输入以下详细信息:

  • 对于App Name ,输入DigitalOcean Slack slash command
  • 对于开发松弛工作区 ,请选择您的开发工作区。

然后点击绿色的创建应用程序按钮。

创建应用程序后,单击“ 削减命令” ,然后单击“ 创建新命令”按钮。 你会看到以下页面:

创建新命令的页面。

在本教程中,您将创建一个名为/slash的命令,该命令将通过HTTP POST将数据发送到http:// server_domain_or_IP /slash的请求URL。 为此,请填写以下信息:

  • /slash填写命令字段。
  • 对于请求URL ,输入http:// your_server_ip_or_domain /slash
  • 对于简短描述 ,输入DigitalOcean Slack slash command

然后在绿色的保存按钮上完成创建斜杠命令。

现在通过点击安装应用程序链接将应用程序安装到您的工作区。 按绿色的安装应用程序工作区按钮。 然后按绿色的授权按钮。

我们现在已经在开发Slack工作区中创建并安装了一个Slack应用程序,但是直到我们创建了一个处理斜杠命令的Web应用程序时,这个命令才会起作用。 在我们构建应用程序之前,我们需要配置我们的Python环境。

第2步 - 配置Python环境

Ubuntu 16.04教程中完成了如何使用uWSGI和Nginx服务Flask应用程序之后,~/ myproject /有一个Flask应用程序。 该目录包含以下文件和目录:

  • myproject .ini
  • myproject .py
  • wsgi.py
  • myprojectenv /

我们将修改myproject .py的Flask应用程序,以处理由Slack斜线命令发送的数据,并将JSON响应返回给Slack。

命令API文档指出,我们应该使用由Slack提供的与commnd相关的验证令牌来验证slash命令。

这个验证令牌应该保密,所以我们将它保存在一个名为.env文件的新文件中, .env文件不受版本控制。 我们将使用python-dotenv软件包将python-dotenv的键值对.env为环境变量,我们将在myproject .py访问这些环境变量。

首先,运行以下命令激活Python虚拟环境:

source myprojectenv/bin/activate

要确认virtualenv已激活,您应该在Bash提示符的左侧看到( myprojectenv ) 验证令牌等秘密不应该存储在版本控制下。 为了达到这个目的,我们使用导出秘密的python-dotenv包作为环境变量。 使用pip ,我们安装python-dotenv包:

pip install python-dotenv

使用纳米或您最喜爱的文本编辑器,创建.env文件:

nano .env

通过访问https://api.slack.com/apps获取验证令牌。 点击DigitalOcean Slack斜杠命令应用程序,然后点击基本信息 然后找到验证令牌

验证令牌

复制该令牌的值并将其放在.env文件中,将该值分配给名为VERIFICATION_TOKEN的环境变量:

〜/ myproject的/ .ENV
VERIFICATION_TOKEN=your_verification_token

保存该文件并退出编辑器。

当您开发Flask应用程序时,您需要在更改应用程序时自动重新加载uWSGI服务器。 要做到这一点,首先在你的编辑器中打开myproject .ini

nano myproject.ini

将此行添加到文件末尾,以确保当您touch或修改myproject .py的Flask应用程序时,uWSGI会自动重新加载

〜/ myproject的/ myproject.ini
...

touch-reload = myproject.py

保存该文件并退出编辑器。

现在我们将创建Flask应用程序,它接收和处理由slash命令发送的信息,并将相应的响应返回给Slack。

第3步 - 创建Flask应用程序

当我们调用Slack中的/slash命令时,Slack会向我们的服务器发出请求。 我们将命令配置为命中url /slash ,所以我们将改变我们创建的Flask应用来响应该端点。

在您的编辑器中打开myproject .py

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应用程序,通过发送一个文本响应“DigitalOcean Slack斜线命令成功!”来响应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服务,以确保最新版本的代码正在运行:

sudo systemctl restart myproject

现在让我们修改Ng​​inx配置来支持我们的斜杠命令。

第4步 - 配置Nginx服务命令

由于我们的请求URL是http:// server_domain_or_IP /slash ,因此我们需要将Nginx服务器块中的location值从/更改为/slash

在您的编辑器中打开文件/etc/nginx/sites-available/ myproject

sudo nano /etc/nginx/sites-available/myproject

location的值从/更改为/slash

在/ etc / nginx的/网站可用/ myproject的
...

    location /slash {
        include uwsgi_params;
        uwsgi_pass unix:/home/sammy/myproject/myproject.sock;
    }
}

保存该文件并退出编辑器。

然后检查Nginx配置文件的语法错误:

sudo nginx -t

如果Nginx配置文件没有语法错误,请重新启动Nginx服务:

sudo systemctl restart nginx

访问您的开发Slack工作区并在任何通道中输入/slash 您应该看到以下回应:

松弛斜线命令成功!

如果您收到一条消息指出该命令失败,请仔细检查myproject.py的代码是否有任何语法错误或问题。 然后再试一次。

最后,一旦你完成了你的命令的开发,关闭Python虚拟环境,以便将来的Python命令使用系统Python解释器:

deactivate

您现在已经成功创建了一个Flask应用程序,该应用程序接收来自/slash斜杠命令的信息,并将响应返回给Slack。

要确保您的服务器和Slack之间的通信安全,请使用HTTPS为请求URL加密使用斜杠命令的连接。 您可以通过在Nginx服务器上安装由Let's Encrypt发布的免费SSL证书来实现 完成之后,请务必修改Slack应用的URL并将http://更改为https://

结论

在本教程中,您通过设置由uWSGI应用程序服务器和Nginx反向代理服务器提供的Flask应用程序来实施Slack斜线命令。

现在您已经了解了创建斜线命令的基础知识,您可以实现您的团队所需的任何斜线命令。 您可以创建从数据库检索数据,与其他API进行交互的命令,甚至可以创建用于部署代码的命令。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏