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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1295942/69abddd1-4446-eed3-4e88-d851c7e2d385.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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1295942/a9925e1c-bf2b-23f4-618f-24093958b6ee.png)

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




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

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

```python:lambda_fanction.py
import json

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

```

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

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1295942/107f3683-53ef-afb7-e3a1-44b197defcfa.png" width="30%">

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

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

![スクリーンショット 2021-04-15 18.40.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1295942/3e388398-846c-f1b5-467d-ad6d5919193f.png)

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

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

![スクリーンショット 2021-04-15 18.44.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1295942/e029e572-cefc-6375-a409-567a14eb1b1d.png)


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

![スクリーンショット 2021-04-15 18.45.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1295942/cc72b9b7-4f69-02d4-5d38-0139eda8c309.png)

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1295942/a4b768b1-d2ef-f689-c22e-88aa9218a9e7.png)

「 Install to Workspace 」をクリック！


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


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1295942/bce2d287-9439-ed73-76ee-b5afbf18ca7c.jpeg" width="80%">


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


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

```python: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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1295942/6a1e74c1-8f31-2ced-d0eb-631a92baaf71.png)

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

##　　参考記事

https://coxcox.hatenablog.com/entry/2017/08/16/163719

https://api.slack.com/events/channel_created

https://api.slack.com/methods/chat.postMessage#arg_link_names