5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS Lambdaを使ってSlack botを作る方法

Last updated at Posted at 2022-03-13

はじめに

AWS Lambdaを使って、簡単にSlack botを作られる方法をご紹介します。

  • お昼ご飯を選ぶBot (ランダム)
    random.png
  • 当番ローテーションBot (シーケンシャル)
    sequence.png

前提

以下はすでに準備されている前提となります。

  • AWSアカウント

手順

1. Slack

1.1 Slack App 作成

Slack APIからアプリを作ります。
nagare1.png
nagare 2.png
nagare 3.png
作成したアプリは後でも、名前、画像など修正ができます。

1.2 Slack アプリ パーミッション追加

上記で追加したアプリを使って、Slackチャンネルに飛べるようにパーミッションを与えます。
nagare 4.png
nagare 5.png
nagare 7.png
nagare 8.png
nagare 9.png
nagare 10.png
nagare 11.png
nagare 12.png
Slackチャンネルに作成したアプリ(bot)が追加されました。

2. AWS Lambda

2.1 AWS Console

AWSにログインして、Lambda関数を作成します。
今回はPythonコードを使うので、Pythonを選びます。
nagare 13.png
nagare 14.png

2.2 Git hub(ソースをダウンロード)

上記のgithubでコードファイルをダウンロードします。
nagare 15.png
nagare 16.png
Lambdaにダウンロードしたzipファイルをアップロードします。
nagare 17.png
上記のようにファイルがアップされます。

2.3 お昼ご飯Bot(Random Bot)作成

nagare 17.5.png
slack-lambdabot-main(上記でダウンロードしたzipファイル)を中身にある、
slack slack_sdk lambda-random.pylambda-test(最上位ディレクトリ)にドラッグ&ドロップします。
nagare 18.png
lambda-random.pyファイルの名前を変更します。
(lambda-sequence.pyは下記の手順で使いますので、残しておきます)

2.3.1 環境変数設定

コードを利用するため、環境変数を追加します。
nagare 19.png
nagare 20.png
Slack ApiのBot User OAuth Tokenをコピーします。
nagare 21.png
Slack チャンネルからチャンネルIDをコビーします。
nagare 22.png
nagare 23.png
上記のように環境変数の編集をクリックして、キーと、を入力します。
LUNCH,を認識します。
nagare 24.png
コーピタブーでコードをDeployして、テストをしてみます。
nagare 25.png
上記のようにランダムでに入力した、Lunchメニューが飛んでくると、成功です。

2.4 当番ローテーションBot

def lambda_handler(event, context):
    
    from os import environ
    from slack_sdk import WebClient
    from slack_sdk.errors import SlackApiError
    from datetime import datetime

    client = WebClient(token=environ['SLACK_TOKEN'])
    touban_list = ["オンジョ","チョンサン","ナムラ","スヒョク","グィナム"]
    today = datetime.now() 
    start_day = datetime(2022,3,13)
    try:
        response = client.chat_postMessage(
            channel=environ['SLACK_CHANNEL'],
            text=f"今日の当番は{(touban_list[ (today-start_day).days % len(touban_list) ])}さんです")
        print(response)
    except SlackApiError as e:
        # You will get a SlackApiError if "ok" is False
        assert e.response["error"]    # str like 'invalid_auth', 'channel_not_found'
    return 0

touban_listに当番を方の名前を、start_daydatetimeを当番が始まる日に変更すると当番を特定な時間に飛べるようにできます。
nagare 26.png
lambda_randomの代わりにlambda_sequencelambda-testにドラッグ&ドロップして、先と同じように名前もlambda_functionに変更します。
nagare 27.png
修正しましたら、コードをDeployして、テストしてみます。
nagare 28.png
当番の方の名前が飛んでくると、成功です。

2.5 トリガーを追加

上記で作成した、アプリをアラートを欲しい時間に飛んで来れるように設定します。
nagare 29.png
トリガーを追加をクリックして、EventBridgeを追加します。
nagare 30.png
今回は毎週月曜日から金曜日まで午前10時にトリガーを設定します。
https://docs.aws.amazon.com/ja_jp/eventbridge/latest/userguide/eb-create-rule-schedule.html
Cron式の設定は上記のURLをから確認できます。
*AWSはUTC時間を使用しているため、JST(UTC時間+9)に変更する必要があります。

2.6 設定完了

nagare 31.png
設定済みになります。

まとめ

AWS LambdaでSlack Botを簡単に作ってみました。
テストを書く際はlambda-random.py lambda-sequence.pyを編集して、ご利用ください。

参考

https://aws.amazon.com/jp/lambda/
https://slack.dev/python-slack-sdk/

5
2
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
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?