はじめに
AWS Lambdaを使って、簡単にSlack botを作られる方法をご紹介します。
前提
以下はすでに準備されている前提となります。
- AWSアカウント
手順
1. Slack
1.1 Slack App 作成
Slack APIからアプリを作ります。
作成したアプリは後でも、名前、画像など修正ができます。
1.2 Slack アプリ パーミッション追加
上記で追加したアプリを使って、Slackチャンネルに飛べるようにパーミッションを与えます。
Slackチャンネルに作成したアプリ(bot)が追加されました。
2. AWS Lambda
2.1 AWS Console
AWSにログインして、Lambda関数
を作成します。
今回はPython
コードを使うので、Python
を選びます。
2.2 Git hub(ソースをダウンロード)
上記のgithub
でコードファイルをダウンロードします。
Lambda
にダウンロードしたzipファイルをアップロードします。
上記のようにファイルがアップされます。
2.3 お昼ご飯Bot(Random Bot)作成
slack-lambdabot-main
(上記でダウンロードしたzipファイル)を中身にある、
slack
slack_sdk
lambda-random.py
をlambda-test
(最上位ディレクトリ)にドラッグ&ドロップします。
lambda-random.py
ファイルの名前を変更します。
(lambda-sequence.py
は下記の手順で使いますので、残しておきます)
2.3.1 環境変数設定
コードを利用するため、環境変数を追加します。
Slack ApiのBot User OAuth Token
をコピーします。
Slack チャンネルからチャンネルID
をコビーします。
上記のように環境変数の編集をクリックして、キー
と、値
を入力します。
LUNCH
の値
は,
で値
を認識します。
コーピタブーでコードをDeploy
して、テストをしてみます。
上記のようにランダムで値
に入力した、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_day
のdatetime
を当番が始まる日に変更すると当番を特定な時間に飛べるようにできます。
lambda_random
の代わりにlambda_sequence
をlambda-test
にドラッグ&ドロップして、先と同じように名前もlambda_function
に変更します。
修正しましたら、コードをDeployして、テストしてみます。
当番の方の名前が飛んでくると、成功です。
2.5 トリガーを追加
上記で作成した、アプリをアラートを欲しい時間に飛んで来れるように設定します。
トリガーを追加をクリックして、EventBridgeを追加します。
今回は毎週月曜日から金曜日まで午前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 設定完了
まとめ
AWS LambdaでSlack Botを簡単に作ってみました。
テストを書く際はlambda-random.py
lambda-sequence.py
を編集して、ご利用ください。
参考
https://aws.amazon.com/jp/lambda/
https://slack.dev/python-slack-sdk/