2024.03.27 5 min read AWS / Lambda / LINEBot / Python

【Part1】LINEBot × AWS で何か作ってみる【構築編】

継続的なアウトプットの一環として、LINEBot からのリクエストを AWS(API Gateway + Lambda)で処理する基盤を構築する。テキストと画像を判別して返信する簡単な Bot をつくる Part1・構築編。

AWSLambdaLINEBotPython

はじめに

継続的なアウトプットをするため何かしらのサービスを作りたいなと思い、比較的簡単そうなLINEBOTを使って何か作ろうと思います。

何を作るにしろLINEBOTのリクエストを処理する基盤を構築する必要がありますので、この記事ではそれらを作成していこうと思います。

今回作るもの

LINEBotからのリクエストをAWSで構築したAPIで処理し、返却する簡単なBotを作成したいと思います。

前提知識

API Gateway

API Gatewayは、クライアントからリクエストを受け取ってバックエンドに渡し、バックエンドからのレスポンスをクライアントに返します。

今回の構成でいうところのLINEBOTとLambdaを中継し、セキュリティや管理、監視、制御などの機能を提供するサービスです。

Lambda

Lambdaは、サーバーレスコンピューティングサービスの1つで、Lambdaを使用すると、サーバーの管理やスケーリングなどのインフラストラクチャーに関する心配をせずに、コードを実行することができます。

構築してみる

LINE BOT

LINE Developersに登録、ログインし、[新規チャネルの作成]から[Messaging API]を選択します。

プロバイダーがなければ「新規プロバイダー作成」を選択し、プロバイダ名は任意のプロバイダ名を設定してください。

チャネルアイコン、チャネル名、チャネル説明については、そのままBOTのアイコン・名前・説明になるのでBOTの内容に沿ったものを入力してください。

※チャネル名は7日間変更できないので注意してください。

「レシートAI」って何やねん…と思われた方はいったんスルーでお願いします🙇‍♂️

作成が完了したら[Messaging API設定]から**チャネルアクセストークン(長期)**を発行します。

発行したキーは後述するLambdaにて使用します。

AWS Lambdaの作成

AWSにログインし、Lambdaを作成していきます。

サービスの検索画面から[Lambda]を選択、[関数]→[関数の作成]を開きます。

関数名を入力し、お好きなランタイムを選択してください。

ここではランタイムに「Python 3.9」を選択しています。

ここまで来たら[関数の作成]を押下して完了です。

コードの作成

line-bot-sdkをインストールし、LambdaLayerに追加します。

$ pip3 install line-bot-sdk

(ライブラリのLambda Layerへの追加方法は以下を参考にしてください)

https://qiita.com/ted-17/items/2fb4ebc78f23d3ac782d

テキストと画像を判別し、返信するプログラムを作成しました。

import json
import requests
import os
from linebot import LineBotApi
from linebot.models import TextSendMessage

line_bot_api = LineBotApi(channel_access_token=os.environ['LINE_TOKEN'])

def lambda_handler(event, context):

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

    # 複数リクエストを処理
    for event in events:

        if event['message']['type'] == 'text':
            # テキストの場合
            response_text = 'テキストだよーん'
            continue

        if event['message']['type'] == 'image':
            # 画像の場合
            response_text = '画像だよーん'
            continue
        else:
            # その他の場合
            continue

    # メッセージ送信
    line_bot_api.reply_message(event['replyToken'], TextSendMessage(text=response_text))

環境変数に、LINE Developersの「Messaging API設定」で発行した**チャネルアクセストークン(長期)**をLINE_TOKENというキーの値で登録します。

このトークンを用いてチャネルにアクセスする権限を持っているか確認を行うことが可能です。

line_bot_api = LineBotApi(channel_access_token=os.environ['LINE_TOKEN'])

トリガーを作成

[トリガーを追加]からAPI Gatewayを作成します。

作成が完了するとAPI endPointが表示されるので、このURLをコピーし、LINE Developersの[Messaging API設定] > [Webhook URL]に貼り付けます。

Webhookの利用をONに設定して完了です。

試してみる

テキストと画像を判別して、文章を返してくれています。

さいごに

最後まで見ていただきありがとうございました。

簡単に出来るのでよかったらお試しください。

次回の記事はこのBOTにOCR(光学文字認識)の機能を追加します。

← 新しい記事
Pandasに少しだけ触れた
記事一覧にもどる