Ubuntu 16.04でFlaskとPython 3を使用してスラッシュコマンドを記述する方法

前書き

Slackは、チームのためのコミュニケーションプラットフォームです。 Slackには、チームがSlackを拡張し、他のプログラムと統合できるようにする多数のアドオンがあります。 Slack slash commandsは、メッセージ入力ボックスでアクションをすばやく簡単に実行する方法です。 たとえば、「+ / who +」と入力すると、現在のチャンネルのすべてのユーザーがリストされます。 組み込みのスラッシュコマンドの完全なリストは、https://get.slack.help/hc/en-us/articles/201259356-Slash-commandsにあります。

Slackワークスペースのメンバーが役立つと思う独自のスラッシュコマンドを作成できます。 コマンドをワークスペースにインストールしてコマンドを呼び出すと、作成したプログラムにリクエストを送信するようSlackに指示できます。 このプログラムはSlackから情報を受け取り、Slackに表示される応答を返します。 API documentationを読むと、Slackスラッシュコマンドの詳細を確認できます。

このチュートリアルでは、Ubuntu 16.04サーバーで実行されているhttp://flask.pocoo.org/[Flask]アプリを使用して、 `+ / slash `というSlackスラッシュコマンドを作成し、このコマンドをSlackワークスペースにインストールします。 。 完了したら、メッセージ入力ボックスに「 / slash +」と入力すると、Flaskアプリに情報が送信され、リクエストが処理され、Slackに短いメッセージが返されて動作が通知されます。

uWSGIアプリケーションサーバーを使用してこのFlaskアプリを提供し、リバースプロキシとしてhttps://nginx.org/[Nginx]を使用します。

前提条件

このチュートリアルを完了するには、次のものが必要です。

  • https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04 [Ubuntu 16.04初期サーバーセットアップガイド]に従って、1つのUbuntu 16.04サーバーをセットアップし、sudo non- rootユーザーとファイアウォール。

  • 既存のFlaskアプリケーションは、Nginxの背後で実行されているuWSGIで提供されていました。 チュートリアルを完了するhttps://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-16-04[uWSGIでFlaskアプリケーションを提供する方法およびUbuntu 16.04のNginx]を使用して、サーバーでこれを構成します。

  • アプリをインストールする権限を持つ開発用Slackワークスペース。お持ちでない場合は、https://slack.com/createで作成してください。

手順1-Slackアプリの作成とインストール

コードを記述する前に、まずSlackに追加機能を提供するSlackアプリを作成し、開発用Slackワークスペースにインストールします。 次に、コマンドを定義し、コマンドを呼び出すときにコマンドが要求するURLを指定します。

Slackアプリを作成するには、https://api.slack.com/appsにアクセスし、緑色の* Create New App *ボタンをクリックします。 表示されるフォームで、次の詳細を入力します。

  • *アプリ名*には、「+ DigitalOcean Slackスラッシュコマンド+」を入力します。

  • * Development Slack Workspace *では、開発ワークスペースを選択します。

次に、緑色の[アプリの作成]ボタンをクリックします。

アプリが作成されたら、* Slash Commands をクリックし、 Create New Command *ボタンをクリックします。 次のページが表示されます。

image:https://assets.digitalocean.com/articles/slack_slash_command_flask_1604/hPjGhZC.png [新しいコマンドを作成するためのページ。]

このチュートリアルでは、 `+ / slash `というコマンドを作成します。このコマンドは、HTTP POSTを介して ` http:/// slash +`のリクエストURLにデータを送信します。 そのため、次の情報を入力します。

  • * Command *フィールドに `+ / slash +`を入力します。

  • *リクエストURL *には、「+ http:/// slash +」と入力します。

  • *簡単な説明*には、「+ DigitalOcean Slackスラッシュコマンド+」を入力します。

次に、緑色の[保存]ボタンをクリックして、スラッシュコマンドの作成を終了します。

[アプリのインストール]リンクをクリックして、ワークスペースにアプリをインストールします。 緑色の[アプリをワークスペースにインストール]ボタンを押します。 次に、緑色の* Authorize *ボタンを押します。

開発用SlackワークスペースにSlackアプリを作成してインストールしましたが、スラッシュコマンドを処理するWebアプリを作成するまでコマンドは機能しません。 アプリをビルドする前に、Python環境を構成する必要があります。

ステップ2-Python環境の構成

uWSGIでFlaskアプリケーションを提供する方法およびUbuntu 16.04のNginxチュートリアルでは、 `+〜// +`にあるFlaskアプリがあります。 このディレクトリには、次のファイルとディレクトリが含まれます。

  • + .ini +

  • + .py +

  • + wsgi.py +

  • + / +

`+ .py +`のFlaskアプリを変更して、Slackスラッシュコマンドによって送信されたデータを処理し、JSON応答をSlackに返します。

https://api.slack.com/slash-commands [コマンドのAPIドキュメント]には、Slackが提供するコマンドに関連付けられた検証トークンを使用して、スラッシュコマンドを検証する必要があることが記載されています。

この検証トークンは秘密にしておく必要があるため、バージョン管理下にない「+ .env 」ファイルと呼ばれる新しいファイルに保存します。 https://github.com/theskumar/python-dotenv [` python-dotenv `]パッケージを使用して、環境変数として ` .env `のキーと値のペアをエクスポートし、それらにアクセスします。 ` .py +`の環境変数。

まず、次を実行してPython仮想環境をアクティブにします。

source /bin/activate

virtualenvがアクティブになっていることを確認するには、Bashプロンプトの左側に「()」が表示されるはずです。 検証トークンなどの秘密は、バージョン管理下に保管しないでください。 これを達成するために、環境変数として秘密をエクスポートする `+ python-dotenv `パッケージを使用します。 ` pip `を使用して、 ` python-dotenv +`パッケージをインストールします。

pip install python-dotenv

nanoまたはお好みのテキストエディターを使用して、 `+ .env +`ファイルを作成します。

nano .env

https://api.slack.com/appsにアクセスして、確認トークンを取得します。 * DigitalOcean Slackスラッシュコマンド*アプリをクリックしてから、*基本情報*をクリックします。 次に、*検証トークン*を見つけます。

image:https://assets.digitalocean.com/articles/slack_slash_command_flask_1604/ANexGpq.png [検証トークン]

トークンの値をコピーし、 `+ .env `ファイルに配置して、値を ` VERIFICATION_TOKEN +`という環境変数に割り当てます。

〜/ myproject / .env

VERIFICATION_TOKEN=

ファイルを保存し、エディターを終了します。

Flaskアプリを開発している場合、アプリに変更を加えると、uWSGIサーバーが自動的にリロードされるようになります。 これを行うには、まずエディターで `+ .ini +`を開きます:

nano .ini

この行をファイルの最後に追加して、「+ touch 」または「 .py +」でFlaskアプリを変更したときにuWSGIが自動的にリロードされるようにします

〜/ myproject / myproject.ini

...

touch-reload = .py

ファイルを保存し、エディターを終了します。

次に、スラッシュコマンドによって送信された情報を受信して​​処理し、適切な応答をSlackに返すFlaskアプリを作成します。

ステップ3 – Flaskアプリの作成

Slackで `+ / slash `コマンドを呼び出すと、Slackはサーバーにリクエストを送信します。 URLが「 / slash +」になるようにコマンドを設定したため、作成したFlaskアプリを変更して、そのエンドポイントに応答します。

エディターで `+ .py +`を開きます:

nano .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']

次のコードを追加して、「DigitalOcean Slack slashコマンドが成功しました!」というテキスト応答を送信して、Slack slashコマンドに応答するようにFlaskアプリを構成します。

〜/ 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()

ファイルを保存し、エディターを終了します。

++ systemdサービスを再起動して、コードの最新バージョンが実行されていることを確認します。

sudo systemctl restart myproject

次に、Nginxの設定を変更して、スラッシュコマンドをサポートします。

ステップ4 –コマンドを提供するためのNginxの構成

リクエストURLは `+ http:/// slash `であるため、Nginxサーバーブロックの ` location `値を ` / `から ` / slash +`に変更する必要があります。

エディターでファイル `+ / etc / nginx / sites-available / +`を開きます:

sudo nano /etc/nginx/sites-available/

`+ location `の値を ` / `から ` / slash +`に変更します。

/ etc / nginx / sites-available / myproject

...

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

ファイルを保存し、エディターを終了します。

次に、Nginx構成ファイルで構文エラーを確認します。

sudo nginx -t

Nginx構成ファイルに構文エラーがない場合は、Nginxサービスを再起動します。

sudo systemctl restart nginx

開発用Slackワークスペースにアクセスし、任意のチャンネルに「+ / slash +」と入力します。 次の応答が表示されます。

image:https://assets.digitalocean.com/articles/slack_slash_command_flask_1604/TiHgJer.png [スラックスラッシュコマンドが成功しました!]

コマンドが失敗したことを示すメッセージを受け取った場合は、構文エラーや問題がないか、 `+ myproject.py +`のコードを再確認してください。 それからもう一度やり直してください。

最後に、コマンドの開発が完了したら、Python仮想環境を非アクティブ化して、将来のPythonコマンドがシステムPythonインタープリターを使用するようにします。

deactivate

これで、 `+ / slash +`スラッシュコマンドから情報を受け取り、Slackに応答を返すFlaskアプリが正常に作成されました。

結論

このチュートリアルでは、uWSGIアプリケーションサーバーとNginxリバースプロキシサーバーによって提供されるFlaskアプリをセットアップして、Slackスラッシュコマンドを実装しました。

スラッシュコマンドの作成の基本を理解したので、チームが必要とする任意のスラッシュコマンドを実装できます。 データベースからデータを取得するコマンドを作成したり、他のAPIとやり取りしたり、コードをデプロイするためのコマンドを作成することもできます。

Related