AWS サーバーレスを使った翻訳 LINE Bot の製作
概要
- 学習のため、初めての LINE Bot 製作を行いました。AWS サーバーレスを使った和英翻訳を行うLINE Bot となります。AWS を利用したLINE Bot に興味がある方の入門として活用頂けたらありがたいです。
LINE Bot のシステム構成
- 以下、今回製作したLINE Bot のシステム構成となります。
- AWS サーバーレスには、Amazon API Gateway, AWS Lambda, Amazon Translate を使用しています。
完成のLINEアプリイメージ
- 今回の記事を通して製作したLINE Bot の完成したイメージを先にお見せします。
- 「こんにちわ」と送信した場合、LINE Bot から自動応答メッセージと和英翻訳された「Hello」が応答として返ります。
翻訳 LINE Bot の製作
LINE Developers にログインしてアカウント, Provider を作成する
- LINE のMessaging APIを始めるにあたって、事前準備として、LINE Developers のコンソールにログインして、アカウント, Provider を作成します。
- 詳しい手順は、以下のドキュメントを参照下さい。
- 以下に、私が行った手順を説明します。
- LINE Developersコンソールにログインします。私の場合は、「LINEアカウントでログイン」を選択しました。
- LINE Developersコンソールに初めてログインした場合は、下記の画面が表示されます。
- 開発者アカウントとして、名前、メールアドレスを入力します。使用許諾をチェックします。
- 「Create my account」を押します。
- 開発者アカウントが登録できました。
- 次に、以下のホーム画面が表示されます。「Create new provider」を選択します。(プロバイダーを作成済みの場合は、表示されません)
- Provider の名前を入力します。「Create」を押します。(プロバイダはアプリを提供する組織を差し、個人や企業の名前を入力します)
- Provider が作成されました。
LINE Developers にMessaging APIチャネルを準備する
- LINE のMessaging APIを始めるにあたって、チャネルを作成する必要があります。以下チャネルの説明です。(LINE Developers のドキュメントより引用)
チャネルは、Messaging APIやLINEログインといったLINEプラットフォームが提供する機能を、プロバイダーが開発するサービスで利用するための通信路です。LINEプラットフォームを利用するには、まずチャネルを作成します。このチャネルに紐づくアクセストークンなどの情報を利用することで、Messaging APIの各機能を使えます。
- 先ほどの続きで、Provider のChannelsタブから「Create Message API Channnel」を選択します。
- Channnel type に「Messaging API」、Provider に先ほど作成した名前、Company or owner’s country or region に「Japan」を選択、任意で Channnel icon を指定します。
- 続けて、Channnel name、Channnel description を指定、Category、Subcategory を選択、Email address を指定します。なお、Channnel name には、"LINE" などの予約語は使用できない様です。
- 最後に使用許諾をチェックして、「Create」を押します。
- 以下の画面が表示されます。「OK」を押します。
- Channnel が作成されました。
Messaging APIチャネルのシークレット、アクセストークンを発行
- 作成されたChannnel にて、「Basic settings」タブを選択します。「Channel secret 」をコピーし、後で使用するためシークレットを控えておきます。
- 続けて、「Messaging API」タブを選択します。
- 「Channel access token」の「Issue」を押します。
- トークンが発行されました。後で使用するためトークンを控えておきます。
AWS サーバーレスによる Api構築
- ここからは、AWSを利用したサーバーレスによるApi 構築です。先ず、Lambda 関数を作成します。
- 事前に、Amazon Translate を使用するためのIAM ロールを作成しておきましょう。
- AWS管理ポリシーのTranslateFullAccess,AWSLambdaBasicExecutionRole の2つを割り当てれば問題ありません。
- 関数名にlambda-translate 、ランタイムにPython 3.9 を使用しています。
- コードは下記を使用します。
- コンソールにコードを貼り付けた場合は、ライブラリ linebot が使用できないため、下記のエラーが出力されます。
- [ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function’: No module named 'linebot’
- こちらに紹介した方法を参考に、開発環境でデプロイパッケージを作成します。デプロイパッケージのファイル名は、lambda_function.zip とします。
- コンソールにコードを貼り付けた場合は、ライブラリ linebot が使用できないため、下記のエラーが出力されます。
import os
import json
import logging
import boto3
from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import FollowEvent, MessageEvent, TextMessage, TextSendMessage, StickerMessage, StickerSendMessage
logger = logging.getLogger()
logger.setLevel(logging.INFO)
handler = WebhookHandler(os.environ.get('LINE_CHANNEL_SECRET'))
linebot = LineBotApi(os.environ.get('LINE_CHANNEL_ACCESS_TOKEN'))
translate = boto3.client('translate')
def lambda_handler(event, context):
logger.info(event)
line_events_message_text = json.loads(event['body'])['events'][0]['message']['text']
logger.info(line_events_message_text)
response = translate.translate_text(
Text=line_events_message_text,
SourceLanguageCode="auto",
TargetLanguageCode="en"
)
translated_result = response.get('TranslatedText')
logger.info(translated_result)
linebot.reply_message(
json.loads(event['body'])['events'][0]['replyToken'],
TextSendMessage(text=translated_result)
)
return {
'statusCode': 200
}
- デプロイパッケージ(lambda_function.zip)を使用して、コードをデプロイします。
- API Gateway を作成します。/translate リソース、POSTメソッドを作成します。先ほど作成したLambda 関数を登録します。「Lambda プロキシ統合の使用」は有効とします。
- Lambda、API Gateway 構築の詳しい手順は、こちらの記事を参照ください。
- Api をデプロイします。ステージ名をdev としています。
- デプロイされたApi のエンドポイントを確認します。
- 最後に、Lambda の環境変数をセットします。
- 環境変数 LINE_CHANNEL_SECRET および LINE_CHANNEL_ACCESS_TOKEN に、以前の手順で準備したMessaging APIチャネルのシークレット、アクセストークンを使用します。
- これでApi の構築が完了しました。
Messaging APIチャネルに Webhook URL を登録する
- 作成されたChannnel にて、「Messaging API」を選択します。Webhook URL にて、「Edit」を押します。
- デプロイしたAPI のエンドポイントを登録します。エンドポイントの最後に、/translate のパスを付けることを忘れずに。
- Use webhook を有効に設定します。
LINE アカウントに自動応答メッセージを設定する
- LINE Official Account Manager (以下URL) にログインします。
- 自動応答メッセージを作成します。以下は、サンプルです。
QRコードを読み取りLINE Bot を友達追加する
- 最後に、LINEアプリにLINE Bot を友だち追加します。LINE Developers に戻り、Channnel の「Messaging API」を選択します。
- LINEアプリの「友だち追加」からQRコードを使用し、LINE Bot を友だち追加します。
LINE Bot をテストしてみる
- LINE Bot に日本語を入力して、動作確認を行います。
- 無事に、和英翻訳された結果が返って来ました。
- このようにAWS サーバーレスと組み合わせることで、手軽にLINE Bot を製作することができました!
- 記事に登場するApi のエンドポイントおよび各種設定は、検証後に削除済みとなります。