つよく、やさしく、泥臭く生きていくブログ

日常とポエムと、ときどき技術

LINE bot その3

LINEからAWS API Gatewayをとおしてlambdaを叩くことができた.
次は、叩かれたlambdaからLINEに返すことをする。
LINE botあてに送ったメッセージをそのまま返す、いわゆるオウム返しというやつをする。

チャンネルアクセストーク

発行
  • LINE developersで、MassagingAPI設定から、チャネルアクセストークンを発行する
Lambdaの環境変数に設定
  • Lambdaの関数画面で、環境変数を編集する
  • キー: CHANNEL_ACCESS_TOKEN
  • 値: Bearer LINEで発行したチャンネルアクセストーク
    頭にBearer を付けるのが必要

例えば LINEで発行したトークンが HogePiyoだった場合、
Lambdaで設定するときは Bearer HogePiyo という値を設定する

Lambda関数の編集

lambda_function.pyを以下のように変更し、デプロイする。
これで、LINE botに何かメッセージを送れば同じことを返事してくれる。

import json
import urllib.request
import os

def reply(replyToken, message):
    url = "https://api.line.me/v2/bot/message/reply"
    method = "POST"
    headers = {
        'Authorization': os.environ['CHANNEL_ACCESS_TOKEN'],
        'Content-Type': 'application/json'
    }
    params = {
        "replyToken": replyToken,
        "messages": message
    }

    # リクエスト組み立て
    request = urllib.request.Request(
        url,
        json.dumps(params).encode("utf-8"),
        method=method,
        headers=headers
    )

    # リクエスト投げる
    with urllib.request.urlopen(request) as res:
        return res.read()


def lambda_handler(event, context):
    # LINEから送られてきた内容から必要なものを取り出す
    event_body = json.loads(event['body'])['events'][0]    
    reply_token = event_body['replyToken']
    text = event_body['message']['text']
    
    # LINEに返すメッセージを組み立てる
    message = [
        {
            "type": "text",
            "text": text
        }
    ]

    reply(reply_token, message)    
    return

次回は、googleカレンダーとの連携