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


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

 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 」を押す。すると下の画像のような画面に遷移するかと思います。

  そして、「 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 」のイベントを追加します

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

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

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

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

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

「 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"))

  試してみよう

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

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

  参考記事