LoginSignup
1
3

More than 1 year has passed since last update.

【 Slack Bot 】チャンネルが作成されたら通知しよう!

Last updated at Posted at 2021-04-16

Slack Appを使用し、さらにサーバレスで実装してみました!今回使用するのはPython、AWSのLambda、API Gatewayです。

image.png

 API GatewayとLambdaの設定

  AWSのLambda、API Gatewayについては過去のhttps://qiita.com/ymktmk_tt/items/7ad4e63e62795bb2418b に細かいことを書いてあるので同じように設定してみてください。

  では、始めます !!

 Slack Appを作成

  https://api.slack.com/ にアクセスして「 Create a custom app 」 を押して、「 Create New App 」を押す。すると下の画像のような画面に遷移するかと思います。

スクリーンショット 2021-04-15 18.09.09.png

  そして、「 App Name 」と「 Development Slack Workspace 」を入力し、「 Create App 」をクリックするとアプリケーションが作成されます

 Slack Appの設定 その① -- 「 Event Subscriptions 」

 Lambda関数のlambda_fanction.pyに一旦下記のように記述してください。Slack Appとの連携確認が必要なためです。

lambda_fanction.py
import json

def lambda_handler(event, context):
    return json.loads(event['body'])['challenge']

 そして、Slack API メニューから「 Event Subscriptions 」を選択

「 Request URL 」にAPI GatewayとLambdaを設定するで作成したAPI Gatewayのエンドポイントを入力します。しばらくして「Verified」になればOKです!

少し下にスクロールして「 Subscribe to Bot Events 」に「 channel_created 」のイベントを追加します

スクリーンショット 2021-04-15 18.40.54.png

  Slack Appの設定 その② -- 「 権限の付与 」

OAuth & Permissionsをクリックして、Scopesにてこの3つを追加しましょう。

スクリーンショット 2021-04-15 18.44.44.png

Botのtokenが必要なのでそれをメモしておきます。Slack API メニューから「 OAuth & Permissions 」を選択して「 Bot User OAuth Access Token 」に書かれているtokenをコピーします。

スクリーンショット 2021-04-15 18.45.41.png

 Slack Appの設定 その③ -- 「 Install App 」

Slack API メニューから「 Install App 」を選択

image.png

「 Install to Workspace 」をクリック!

アプリケーションインストールの確認画面が表示されるので問題なければ「 Allow 」をクリックします。

インストールされるとSlackの画面でアプリケーションが起動しているのを確認できます。

さて、いよいよ Lambda関数にコードを書いていきましょう!

lambda_fanction.py
import logging

import os
import json
import urllib.request

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):

    logger.info(event)

    channelName = json.loads(event['body'])['event']['channel']['name']
    channelId = json.loads(event['body'])['event']['channel']['id']

    url = "https://slack.com/api/chat.postMessage"

    headers = {
        "Content-type" : "application/json",
        "Authorization" : "Bearer "+ os.environ['TOKEN']

    }

    data  = {
        'channel': '通知したいチャンネルID(このAppが存在する)',
        'text': '新しいチャンネル: ' + '#' + channelName,
        'link_names' : 1,
    }

    req = urllib.request.Request(url=url, data=json.dumps(data).encode('utf-8'), method='POST', headers=headers)

    with urllib.request.urlopen(req) as res:

        logger.info(res.read().decode("utf-8"))

  試してみよう

通知したいチャンネルに作成したアプリケーションを追加しましょう。

スクリーンショット 2021-04-15 20.04.06.png

できました! slack API ドキュメントを見るとさらに色々な機能をつけることができます。もしエラーが出てしまってもドキュメントに解決方法が載っていますよ!

  参考記事

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3