基本的なslackbotの作成方法:初心者向けガイド

更新:Slack APIの変更を反映するために、6月28日にコードとチュートリアルが更新されました

Slackbots:なぜそれらを使用するのですか?

この投稿のチュートリアル部分に入る前に、これが価値のあるプロジェクトとツールになり得る理由を見てみましょう。

Slackは、チーム全体のコミュニケーションのためにますます人気のあるツールです。JIRA、Googleドライブなど、広く使用されている他のプロジェクト管理ツール用のプラグインが含まれるようになりました。たるんだユーザーなら誰でも知っています—会話の中からできることが多ければ多いほど良いのです。

slackbotの一般的な用途は、タスクが完了したとき(テストビルドやランチの準備ができたときなど)の単純な通知機能から、ユーザーの意志でコマンドを実行するインタラクティブなボタンベースのボットまで多岐にわたります。ポーリングメカニズム、会話型ボットなどを構築できます。

Pythonプログラミング環境のセットアップ

Windowsユーザーで、これまでPythonを使用したことがない場合は、Pythonをインストールする必要があります。Linux / Macユーザー:UnixにはPythonが付属しています!

インストールしたら、ターミナルを起動して入力するpythonpython3(複数のインストールがある場合)、それが機能し、そこにあることを確認します。

また、コード用の優れたテキストエディタがあることを確認してください。sublimeとatomは優れた選択肢です。

オプション:仮想環境で作業することも役立つ場合があります。依存関係が多い場合に適しています。

pip install virtualenv virtualenv tutorial source tutorial/bin/activate

また、チュートリアルGitHubリポジトリをフォークして、ローカルマシンに複製する必要があります。これは、このチュートリアルのフレームワークとしてそのコードを使用するためです。

これを行うには、リポジトリに移動Forkして右上をクリックします。フォークされたリポジトリは/ slackbot-tutorialである必要があります。Clone or download統計バーの下の右側にある緑色のボタンを押して、URLをコピーします。ターミナルに戻り、リポジトリのクローンを作成します。

cd Desktop/ git clone //github.com/yourusername/slackbot-tutorial.git cd slackbot-tutorial/ sublime . (or open your text editor and open this directory)

Slackアプリ

slackbotを作成するには、スタンドアロンボットとSlackアプリの2つの方法があります。アプリは今後、より幅広い機能を可能にし、ボットユーザーを作成するためのSlackの推奨ルートです。

//api.slack.com/appsに移動し、右上を押しCreate New Appます。名前を付けて、ボットをテストするためのチャネルを作成できるワークスペースを選択します。後でいつでもボットを別のワークスペース用に再構成したり、Slack AppDirectoryに投稿したりできます。

開発目的で作成したワークスペースに#testチャネルを作成することをお勧めします。または、何かをテストしてもかまわないユーザーが比較的少ないチャネルを作成することをお勧めします。

最初にやりたいことは、ボットトークンを取得することです。上記のページが表示されたら、[ボット]をクリックします。いくつかのスコープを追加します。これらは、アプリのボットユーザーが持つ権限を決定します。開始するには、chat:writeそしてim:writeおそらく十分です。

さて、実際にトークンを取得するOAuth & Permissionsには、左側のサイドバーに移動する必要があります。

ここでInstall the App to the Workspace、必要なトークンを生成して生成することができます。経験則として、ボットトークンはで始まりますxoxb-.

また、[基本情報]> [アプリの資格情報]の下にある署名シークレットも必要になります。

ボットとして機能する

Now you have the credentials necessary to make API calls and act as your bot. To test this out, fire up a terminal and run this (with the correct token and channel name):

curl -X POST \ -H 'Authorization: Bearer xoxb-your-token' \ -H 'Content-type: application/json;charset=utf-8' \ --data '{"channel":"#test","text":"Hello, Slack!"}' \ //slack.com/api/chat.postMessage

If you go to that channel in your slack workspace, you should now see a message from your bot! You just made an HTTP POST request — asked a server to post a message somewhere.

Programming the Bot

We want to do the above programatically. There are a few different ways you can set up a slackbot. I’ll cover the following:

  • Triggered periodically (on a schedule) to say something
  • /slash commands

The second requires a server running, while the first does not.

Scheduled Messages

Let’s say you want to periodically send a message somewhere — maybe every Monday morning. Go to the text editor where you opened up slackbot-tutorial.

You should see a file scheduled.py. Take a look: sendMessage is a function that fires off the API call to slack and posts a message. At the bottom, you’ll see the main method: what executes when you run the script. Here, you’ll see a few things to note:

  • SLACK_BOT_TOKEN is pulled from os.environ['SLACK_BOT_TOKEN'] — how? Run export SLACK_BOT_TOKEN="xoxb-your-token" in your terminal to set this variable.
  • a scheduler is used here, and there’s an infinite loop that checks for events on the scheduler. By default here, I’ve scheduled the sendMessage function to be called every minute.

To test this out, go back to the terminal where you’re in the slackbot-tutorial directory and run

export SLACK_BOT_TOKEN="xoxb-your-token" python scheduled.py

You should see the log messages print. Make sure you’ve changed channel=#test in the code to your test channel name (if different) and added your bot (in the slack channel, type /invite @botname. Let it run for a couple minutes and watch the messages show up on Slack!

This is, of course, a super basic implementation of a scheduled message sender — you can actually do this just with slackbot /remind #test “Hello, Slack!” every Monday at 9am.

The true power here is that you can substitute in any function for sendMessage, leveraging the power of interfacing with external services through APIs, doing math, etc and then constructing a message to post.

Slash Commands

This one requires a little more setup — go back to your app settings > Slash Commands. Create a new slash command: for example, /test. For the request URL, you’ll need to either deploy this web server (I use Heroku), or run a local ngrok instance to test it. The latter will run it locally, and is best for testing. You can brew install ngrok or get it from here.

In the starter code repo, look for slashCommand.py to start understanding this method. To start the server, run python server.py. The Request URL to put in Slack will be given by your ngrok instance and the @app.route in your code — it would be something like //a1234b5cde6f.ngrok.io/slack/test (the bold part comes from the route defined in the code). You should be able to test the slash commands in your Slack workspace. From the tutorial code, try /test.

Moving Forward

Now you have a very basic slackbot that either operates on a command or runs every so often. Be creative with how you use it! Think about what else you can link this skeleton to to make it more useful.

Other ways your bot might respond

  1. Actions/responses could be triggered by mentions or certain phrases. This requires running a server and listening the messages somewhere.
  2. You bot could be conversational, and might contribute to threads. Check out some NLP to get started on having intelligible conversation! Word2Vec + TensorFlow or Keras might be a place to start. DialogFlow is also great.
  3. Link it up with some other APIs. Maybe you want to be able to interact with a Google Sheet and run some calculations. You might want to send other users a message based on some actions. Integrate buttons. Perhaps you want to trigger messages based on something else.