Line API × AWS Lambda×Slack Incoming WebhookでLineのメッセージをSlackに自動投稿させる
2020.11.10.火
はじめに
社内ではコミュニケーションツールとしてSlackを活用しているものの、お客様によってはビジネスでの連絡でもLINEを使用している方が多くいらっしゃいます。
LINEでのやりとりは社内共有に時間ロスが発生してしまう為、今回LINE BOTを作成しLINEからSlackに投稿するツールを作ってみました。
SlackアプリでIncomming Webhooks を設定
Slackアプリの作成方法はこちらの記事で紹介しておりますので予め作成を済ませておいてください。
AWS Lambdaで関数を作成
AWS Lambdaはサーバレスと呼ばれるサーバーを持たないプログラム実行の為のサービスです。
実行したい処理だけをプログラムで書いて実行した分だけ課金される料金体系になっています。
お試しのつもりで、今回は手軽に済ます為にもこちらを利用しました。
Lambdaを使用する為にはAPI Gatewayの作成が必要になります。
Lamdaで使用できるコードは現在、Java、Go、PowerShell、Node.js、C#、Python、Rubyとなります。
今回はPython3.8を選んでコードを記述しました。
LINEからメッセージをSlackに転送する為、予め作成しておいたSlackのWebhookのURL指定が必要です。
import os
import json
import urllib.request
#Slack Webhookへ送信する
def send_slack(msg):
#Slack Webhook URLを指定する
url ='https://hooks.slack.com/services/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
headers = {
'Content-Type': 'application/json; charset=utf-8'
}
message = {
"username": "Python",
"icon_emoji": ":snake:",
"attachments": [
{
"fields": [
{
"title": "LINE",
"value": msg,
"short": False
}
]
}
]
}
req = urllib.request.Request(url, data=json.dumps(message).encode("utf-8"), method='POST', headers = headers)
with urllib.request.urlopen(req) as res:
logger.info(res.read().decode("utf-8"))
def lambda_handler(event, context):
#LINE BOTから送信されたメッセージを受け取り、Slack Webhookへ送信する
for message_event in json.loads(event['body'])['events']:
send_slack(message_event['message']['text'])
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
LINE BOTを作成
Line Developersにアクセスします
初めて利用する場合、プロバイダーの作成が必要なので案内に従って進めてください。
続けてチャネルを作成します。
新規チャネル作成をクリックするとチャネルの種類を選択するポップアップが開きますので、今回はMessaging APIを選択します。
作成されたチャネルで必要な情報を入力しておきます。
※今回チャネル名は「line2slackくん」にしました。
その後「Messaging API設定」タブを選択して「Webhook設定」でWebhookの利用をONにしたうえAWS Lambdaを呼び出すAPI GatewayのエンドポイントをWebhook URLに設定します。
試してみる
LINEアプリインストール済の端末からカメラでQRコードを読み込み、ボットを友達登録します。
LINEアプリからグループに招待します。
投稿してみる
見事Slackに通知されました!
まとめ
急にグループに知らないBOTを追加されると悪いことしてるんじゃと疑われますので、必ず了解いただいてからにしましょう!