2
5

More than 3 years have passed since last update.

AWS LambdaでのLine Bot作成手順

Posted at

概要

AWS LambdaでのLineBot作成手順をまとめました。line-bot-sdk-pythonを使わずに1から書いてみました。
ほぼほぼ「参考」の記事を使っています。

webhokとは

開発の手順紹介

技術

  • Python
  • AWS Lambda

流れ

  1. Lmabda関数の作成
  2. LineDeveloperの登録
  3. おうむ返しBot作成
  4. Botを少しいじってみよう

全体

import json  
import logging  
import os  
import urllib.request  

# ログ出力の準備  
logger = logging.getLogger()  
logger.setLevel(logging.INFO)  

def lambda_handler(event, context):  
    # リクエスト内容をログ出力  
    logger.info(event)  

    body = json.loads(event['body'])  

    for event in body['events']:  
        # 応答用のメッセージオブジェクトのリストを定義  
        messages = []  
        # 2. Webhookイベントタイプがmessageであり、  
        if event['type'] == 'message':  
            # 3. メッセージタイプがtextの場合に、  
            if event['message']['type'] == 'text':  
                # 4. 受信したテキストの内容をメッセージオブジェクトとする  
                if event['message']['text'] == 'ほんと':
                    messages.append({  
                            'type': 'image',  
                            'originalContentUrl': 'https://www.bizcourt.space/bizmarket/assets_c/2019/06/a_ocean_eyes_logo_bg_white_02-thumb-autox227-1304.png',
                            'previewImageUrl': 'https://www.bizcourt.space/bizmarket/assets_c/2019/06/a_ocean_eyes_logo_bg_white_02-thumb-autox227-1304.png'
                            })
                else:
                    messages.append({  
                          'type': 'text',  
                          'text': event['message']['text']+ 'です' 
                        })  

                # 応答メッセージのリクエスト情報を定義  
                url = 'https://api.line.me/v2/bot/message/reply'  
                headers = {  
                    'Content-Type': 'application/json',  
                    # 環境変数からLINEチャネルアクセストークンを取得  
                    'Authorization': 'Bearer ' + os.environ['LINE_CHANNEL_ACCESS_TOKEN']  
                    }  
                data = {  
                    # 応答用トークンとメッセージオブジェクトを設定  
                    'replyToken': event['replyToken'],  
                    'messages': messages  
                }  
                request = urllib.request.Request(url, data = json.dumps(data).encode('utf-8'), method = 'POST', headers = headers)  
                with urllib.request.urlopen(request) as response:  
                    # レスポンス内容をログ出力  
                    logger.info(response.read().decode("utf-8"))  
    return {  
        'statusCode': 200,  
        'body': json.dumps('Hello from Lambda!')  
    } 

詳細

1. Lmabda関数の作成

Python の AWS Lambda 関数ハンドラー

2. LineDeveloperの登録

公式ドキュメント

3. おうむ返しBot作成

Postリクエストを投げる

urllib.requestのライブラリを使う。
公式ドキュメント
使い方のサンプル・・・Python の HTTP クライアントは urllib.request で十分

環境変数の登録
AWS Lambda 環境変数の使用より

import os
region = os.environ['AWS_REGION']

で環境変数を使える。

4. Botを少しいじってみよう

・画像を返してみる
公式ドキュメントの画像オブジェクト
このドキュメントを参考に

messages.append({  
                            'type': 'image',  
                            'originalContentUrl': '画像のURL',
                            'previewImageUrl': '画像のURL'
                            })

とすれば画像を返せます。

参考:【LINE botから画像送信する方法】問いかけると柴犬の画像を返してくれるLINE botを作ってみた

参考

LINE Messaging API × AWS Lambdaによる簡易応答システム #1: LINE〜Lambdaをつなげる

←こちらサービスが切れてリンク切れのようです。

感想・今後・・・

  • Lambda便利ですね。
  • コードの読解力もっとあげたい!
  • LineBotはもっといろいろ応用できそうなので、これから頑張りたい。
2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5