前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Ubuntu 16.04上使用Flask和Python 3编写Slash命令

如何在Ubuntu 16.04上使用Flask和Python 3编写Slash命令

原创
作者头像
物花无语
修改2018-08-10 11:46:29
2.9K0
修改2018-08-10 11:46:29
举报
文章被收录于专栏:云计算教程系列

介绍

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作为反向代理。

准备

要完成本教程,您需要:

  • 一个Ubuntu 16.04服务器,包括一个sudo非root用户和一个防火墙。
  • 使用Nginx和uWSGI的Flask应用程序
  • 具有安装应用程序权限的开发Slack工作区,如果没有请创建一个。

第1步 - 创建和安装Slack App

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

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

  • 对于App Name,请输入Tencent Slack slash command。
  • 对于Development Slack Workspace,选择您的开发工作区。

然后单击绿色的“ 创建应用程序”按钮。创建应用程序后,单击“ Slash Commands”,然后单击“ Create New Command”按钮。您将看到以下页面:

Create New Command
Create New Command

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

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

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

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

我们现在已经在开发Slack工作区中创建并安装了一个Slack应用程序。但是在我们创建一个处理slash命令的Web应用程序之前,该命令将无法运行。在我们构建应用程序之前,我们需要配置我们的Python环境。

第2步 - 配置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虚拟环境:

代码语言:txt
复制
$ source myprojectenv/bin/activate

要确认virtualenv已激活,您应该在Bash提示的左侧看到。诸如验证令牌之类不应存储在版本控制之下。为此,我们使用python-dotenv包将密钥导出为环境变量。使用pip安装python-dotenv

代码语言:txt
复制
(myprojectenv) $ pip install python-dotenv

使用nano或您喜欢的文本编辑器,创建.env文件:

代码语言:txt
复制
(myprojectenv) $ nano .env

访问https://api.slack.com/apps获取验证令牌。单击Tencent Slack slash 命令应用程序,然后单击基本信息。然后找到 验证令牌

The verification token
The verification token

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

~/myproject/.env

代码语言:txt
复制
VERIFICATION_TOKEN=your_verification_token

保存文件并退出编辑器。

在开发Flask应用程序时,您需要在对应用程序进行更改时自动重新加载uWSGI服务器。要执行此操作,请先myproject.ini在编辑器中打开:

代码语言:txt
复制
(myprojectenv) $ nano myproject.ini

将此行添加到文件末尾,以确保在您修改Flask应用程序时自动重新加载uWSGImyproject.py

〜/ myproject的/ myproject.ini

代码语言:txt
复制
...

touch-reload = myproject.py

保存文件并退出编辑器。

现在我们将创建Flask应用程序,该应用程序接收并处理slash命令发送的信息,并向Slack返回适当的响应。

第3步 - 创建Flask应用程序

当我们在Slack中调用/slash命令时,Slack将向我们的服务器发出请求。我们配置命令为指向url /slash,因此我们将创建的Flask应用程序以响应Slack。

myproject.py在编辑器中打开:

代码语言:txt
复制
(myprojectenv) $ nano myproject.py

删除文件的内容。我们将从头开始创建一个新的应用程序。

添加此代码导入Flask并加载其他模块以处理JSON数据和发出Web请求:

~/myproject/myproject.py

代码语言:txt
复制
#!/usr/bin/env python

from flask import Flask, jsonify, request

然后添加加载dotenv模块的代码。读取.env您创建的文件的内容。将其内容加载到环境变量中,然后从环境中提取验证令牌,并将其存储在verification_token变量中:

~/myproject/myproject.py

代码语言:txt
复制
...
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

代码语言:txt
复制
...

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服务以确保正在运行最新版本的代码:

代码语言:txt
复制
(myprojectenv) $  sudo systemctl restart myproject

现在让我们修改Nginx配置以支持我们的slash命令。

第4步 - 配置Nginx支持slash命令

因为我们的请求URL是http://server_domain_or_IP/slash,所以我们需要将Nginx服务器块中的位置值从/更改为/slash

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

代码语言:txt
复制
(myprojectenv) $ sudo nano /etc/nginx/sites-available/myproject

location的值从/更改为/slash

/etc/nginx/sites-available/myproject

代码语言:txt
复制
...

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

保存文件并退出编辑器。

然后检查Nginx配置文件是否存在语法错误:

代码语言:txt
复制
(myprojectenv) $ sudo nginx -t

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

代码语言:txt
复制
(myprojectenv) $ sudo systemctl restart nginx

访问您的开发Slack工作区并输入/slash。您应该看到以下响应:

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

最后,在完成开发命令后,停用Python虚拟环境,以便将来的Python命令使用系统Python解释器:

代码语言:txt
复制
(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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 第1步 - 创建和安装Slack App
  • 第2步 - 配置Python环境
  • 第3步 - 创建Flask应用程序
  • 第4步 - 配置Nginx支持slash命令
  • 结论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档