chatwork to Discord webhookを使ったLambda python

暑い日が続きますがエアコンつけっぱなしでウーバーイーツ生活で外に出ないので実際暑いか知りません あすてるです

さてchatworkが色々あって嫌いなのでdiscordやslackに流そうとしました 大体検索で出てくるのは gasを使ってサーバーレスでこのコピペで5分おきとかにapi叩いて差分持ってきますよってやつ それをやりたいわけじゃない 割とリアルタイムで送りたいのでchatworkのwebhookを使う

流れ chatwork webhook -> API Gateway(aws) -> Lambda(aws) -> discord webhook

discordのwebhookのキー取得に関しては各自で(簡単なので)

まずlambdaから python 3.8でimport requestsを使うのでレイヤーにrequestsを追加します

macで [shell gutter="false"] mkdir python cd python pip3 install -t ./ requests cd .. zip -r requests.zip python/ [/shell] AWS Lambda -> その他のリソース -> レイヤー レイヤーの作成 -> 適当に名前をつけて .zipファイルをアップロード

Lambda -> 関数 -> 関数の作成 一番下のレイヤー -> レイヤーの追加 -> さっき作ったものを選択

lambda_function.py [shell gutter="false"] import json import requests def lambda_handler(event, context): jsonItem = json.dumps(event) j = json.loads(jsonItem) webhook_body = eval(j["body"]) account_id = webhook_body["webhook_event"]["account_id"] webhook_text = webhook_body["webhook_event"]["body"]

webhook_url = 'https://discord.com/api/webhooks/1234567890/swedrftgyhujikol3edrftgyhujikedrftghyujikrfgthyujikdsadsadsadsadsa'
main_content = {
    "content":  "account_id(" + str(account_id) + "): " + webhook_text
}

requests.post(webhook_url,main_content)

return {
    'statusCode': 200,
}

[/shell]

Lambdaは終わり

API Gateway -> API作成 HTTP API -> 統合を追加 -> Lambda -> さっき作ったやつを選択 -> 次へ ルートを設定 メソッド -> POST リソースパス -> /ch -> 次へ ステージを設定 -> 次へ -> 作成

作成したAPIのURLをコピー https://abcd123abc.execute-api.ap-northeast-1.amazonaws.com

chatwork サービス連携 -> Webhook さっきのURLに/chをつけて貼り付け Webhook URL: https://abcd123abc.execute-api.ap-northeast-1.amazonaws.com/ch イベント: 流したいものを設定する 今回は特定ルームのものを流したいのでルームイベント -> メッセージ作成 -> ルームID(対象書く)

作成した後時間がかかる場合がありますみたいなこと書いてるけど以外とすぐ反映されてる

設定した部屋でチャット打つ discordに流れる

終わり、良かったですね

ログを見たい 作ったLambda -> モニタリング -> CloudWatchのログを表示