概要
最近、LINE Messaging API x AWS Lambda x Google スプレッドシート を連携してサクッと便利ツールを作っている日々です♪ 個人的にサクッと作れる便利ツールとして、UI をLINE Messaging API にして、ロジック をAWS Lambda に、DB をGoogle スプレッドシート で作るという構成が簡単に出来て気に入っています。
そこで今回はLINE Messaging API x AWS Lambda の連携編 になります。 LINE Messaging API と AWS Lambda をWebhookを使ってHTTPSで連携します。 LINE Developersアカウントがあれば誰でも簡単・無料 で出来るので、気になった人はやってみてください。
Lambdaの良書が増えてきたので、おすすめ本5冊を以下で紹介しています。Lambdaについて本格的に勉強したい方はぜひ読んでみてください。
AWS Lambdaおすすめ書籍5冊の紹介
前提条件
LINE Developersアカウント(LINE Business ID)取得
無料で作成できるのでアカウントがない人は取得しましょう。
AWS Lambda関数の HTTP(S) エンドポイント割り当て
LINEからLambdaに連携するために、Lambda関数にHTTP(S) エンドポイントが必要になります。Lambdaを作成する際に、関数 URL を有効化 する方法が簡単ですが、アクセス制御はしっかり行ってHTTP(S) エンドポイントを公開しましょう。
公式ページ
Messaging APIを始めようhttps://developers.line.biz/ja/docs/messaging-api/getting-started/
LINE Developersにログイン
まずは、LINEにログインします。 LINE Developersアカウント(LINE Business ID)を作成していない人はアカウントを作成 から作成します。
https://account.line.biz/login
プロバイダー/チャネル作成
ログイン後、LINE DevelopersコンソールというLINEの画面でプロバイダー とチャネル を作成します。
プロバイダー:サービスを提供し、ユーザーの情報を取得する開発者個人、企業、または団体等のことです。個人で運用する場合は自由に登録すれば良いと思います。
チャネル:LINEが提供する機能を、サービス提供者が利用するための通信路です。今回の場合は、AWS Lambdaと LINE Messaging API を使って連携するLINEアプリのことです。
参考ページhttps://developers.line.biz/ja/docs/line-developers-console/overview/
プロバイダー作成
それではプロバイダー から作成していきます。 LINE Developersコンソールの画面操作だけで作成できるので簡単です。
LINE Developersコンソールにログイン後、表示される左メニューのプロバイダー を選択しし、プロバイダーの作成 を選択します。
作成画面が表示されるため、任意のプロバイダー名を入力し、作成ボタンで作成されます。 簡単ですね。
チャネル作成
続いてチャネルの作成に移ります。 こちらもLINE Developersコンソールの画面操作だけで作成できます。
プロバイダーを選択する(今回は、AWS Lambdaとの連携が目的なのでLambdaProvider というプロバイダーを作成しています)と、チャネルの設定画面が表示されるため、AWS Lambdaと連携する Messaging API をクリックします。
チャネルの種類 が Messaging API になっていること、プロバイダー が作成したプロバイダー になっていることを確認しましょう。あとは、必須項目を自身の情報で入力すれば大丈夫です。 利用規約を確認して、作成 ボタンを押しましょう。
チャネル設定
無事にチャネルが作成されたらチャネルの設定 に移ります。 この設定作業でAWS Lambdaとの連携情報 、認証情報 、LINEアプリの応答メッセージの設定 などを行います。
作成したチャネルを選択します。(今回は、MessagingLambda というチャネル名で作成しています)
Messaging API設定 をクリックします。
ページ中央にあるWebhook URL に連携するAWS Lambdaの公開されたURLを編集 ボタンを押して設定します。
URLを設定すると、検証 ボタンやWebhookの利用 、Webhookの再送 、エラーの統計情報 の設定ができるようになるので、必要な設定を行います。Webhookの利用 は必ず必要になるので、必ずON にします。
ページ下部にあるチャネルアクセストークン を設定します。LambdaからこのLINEアプリに連携する際に指定するキー になる情報なので外部に漏れないないように管理しましょう。
応答/あいさつメッセージのカスタマイズ
ページ中央部にある応答メッセージ /あいさつメッセージ の編集 ボタンからこのLINEアプリにメッセージを送った時の応答メッセージ 、LINEアプリを友だち追加した時のあいさつメッセージ を編集できます。必要であれば編集しましょう。
編集 ボタンをクリックすると以下の応答設定 用の専用画面が表示されるため、専用画面で設定を変更します。
今回、AWS Lambdaから応答メッセー ジを自動作成して送信予定のため、応答メッセージ をオフ に設定します。
AWS Lambdaの実装
いよいよここからはAWS Lambda側の実装になります。 前提条件のところに書きましたが、LINEと連携するためHTTP(S) エンドポイントが公開されているLambda関数の使用が前提になります。 今回は、最も基本的なLINEからLambdaにメッセージを送った時にLambdaからLINEへの応答メッセージを送る方法 と、LambdaからLINEへプッシュメッセージを送る方法 を記載します。
応答メッセージを送る
LINEからLambdaにメッセージを送った時に送られたメッセージをもとにして応答メッセージを送信するAPIは以下になります。
https://developers.line.biz/ja/reference/messaging-api/#send-reply-message
具体的には以下のhttpsリクエストを応答メッセージとして送信する必要があります。
curl -v -X POST https://api.line.me/v2/bot/message/reply \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-d '{
"replyToken":"{Reply token}",
"messages":[
{
"type":"text",
"text":"Hello, user"
},
{
"type":"text",
"text":"May I help you?"
}
]
}'
channel access token :LINE Developersコンソールで発行したチャネルアクセストークンを設定します。
Reply token :メッセージのやり時の度にLINEからLambdaに送られたリクエストメッセージの中からReply token を取得して設定します。
LINEから送られてくるリクエストメッセージのReply tokenの具体例は以下になります。replyToken 部から取得しましょう。text 部にLINEから送られてくるメッセージが格納されており、userId 部がLINEの送信者を特定するIDになります。(userId は次の「プッシュメッセージを送る」で使用します)
{
"destination": "xxxxxxxxxx",
"events": [
{
"type": "message",
"message": {
"type": "text",
"id": "14353798921116",
"text": "Hello, world"
},
"timestamp": 1625665242211,
"source": {
"type": "user",
"userId": "U80696558e1aa831..."
},
"replyToken": "{Reply token}",
"mode": "active",
"webhookEventId": "01FZ74A0TDDPYRVKNK77XKC3ZR",
"deliveryContext": {
"isRedelivery": false
}
}
]
}
実際にLambdaで replyToken を取得して、応答メッセージを送信するサンプルは以下になります。
import json
import requests
from pprint import pprint
def lambda_handler(event, context):
#=========================
# LINEからのリクエスト解析
#=========================
bodyjson = json.loads(event['body'])
messagetext = bodyjson['events'][0]['message']['text']
print("messagetext: " + messagetext)
replyToken = bodyjson['events'][0]['replyToken']
print("replyToken: " + replyToken)
#=========================
# LINEへのレスポンス作成
#=========================
resmessage = [
{'type':'text','text':messagetext}
]
payload = {'replyToken': replyToken, 'messages': resmessage}
# カスタムヘッダーの生成(dict形式)
headers = {'content-type': 'application/json', 'Authorization': 'Bearer XXX'}
# headersにカスタムヘッダーを指定
r = requests.post("https://api.line.me/v2/bot/message/reply", headers=headers, data=json.dumps(payload))
print("LINEレスポンス:" + r.text)
return
LINEから送られてきたメッセージをそのまま送り返すサンプルになっています。 LINEからのメッセージと replyToken を取得して、応答メッセージ用のhttpsリクエストに設定して送信すればOKです。簡単ですね。
プッシュメッセージを送る
次はLambdaからLINEにプッシュメッセージを送るAPIは以下になります。
https://developers.line.biz/ja/reference/messaging-api/#send-push-message
具体的には以下のhttpsリクエストを送信することでプッシュメッセージを送ることができます。
curl -v -X POST https://api.line.me/v2/bot/message/push \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-d '{
"to": "{user id}",
"messages":[
{
"type":"text",
"text":"Hello, world1"
},
{
"type":"text",
"text":"Hello, world2"
}
]
}'
channel access token:LINE Developersコンソールで発行したチャネルアクセストークンを設定します。
user id:プッシュメッセージを送りたい相手の userId を設定します。(userId は「応答メッセージを送る」で確認したLINEからメッセージが送られてきた時のリクエスト内容から確認できます)
実際にLambdaでプッシュメッセージを送信するサンプルは以下になります。
import json
import requests
from pprint import pprint
def lambda_handler(event, context):
#===========================
# LINEへのPUSHメッセージ作成
#===========================
resmessage = [
{'type':'text','text':'メッセージ1'},
{'type':'text','text':'メッセージ2'}
]
payload = {'to': 'XXX', 'messages': resmessage}
# カスタムヘッダーの生成(dict形式)
headers = {'content-type': 'application/json', 'Authorization': 'Bearer XXX'}
# headersにカスタムヘッダーを指定
r = requests.post("https://api.line.me/v2/bot/message/push", headers=headers, data=json.dumps(payload))
print("LINEレスポンス:" + r.text)
return
['to': 'XXX ']:プッシュメッセージを送りたい相手の userId を設定します。
[Bearer XXX ]:LINE Developersコンソールで発行したチャネルアクセストークンを設定します。
送信先のuserIdとチャネルアクセストークンを設定するだけになります。こちらも簡単ですね。
まとめ
今回は、LINE Messaging API x AWS Lambda の連携編 を説明しました。 基本的にはLINE Developersコンソール上の設定作業がメインで、Lambda上の実装はMessaging API のリファレンス通りやるだけなので比較的簡単にできたのではないでしょうか。 これで何かあったらLINEにメッセージを送るとツールを動かせたり、定期的にLambdaを起動してLINEにメッセージを送ったりできるので簡単なツールだったら自分でサクッと作ってしまおうかなと思って個人的には気に入っている方法になります。 興味がある方がいたらぜひやってみてください。