こんにちは。
ITエンジニアのきゅうと申します。
概要
さて、第2回は早速ちょっとしたアプリ開発を基に、ハッカソンで必要なIT技術に触れていきましょう。
ということで、今回はLINEのMessageAPIとAWSのLambdaを使った、オウム返しアプリを作っていきます。
何故これが最初なのか?
何度も言っておりますが、ハッカソンはとにかく時間がありません。
その中で動くものを作るとなると、UI(ユーザインタフェース)にかける時間は限りなく少なくしたい!!
だけど、UIを疎かにするとバック処理で凄いアプリを作ったとしても、見た目がショボい為、アプリ全体もショボい評価となってしまいます。
このジレンマを解消してくれる1つの手段が、LINE Bot(MessageAPI)になります。
LINE BotはLINE DeveloperとLINE Official Accountを登録することで、
簡単にLINEのMessageAPIを呼び出し、意図した処理を行って返答するBotアプリを作成することができるのです!!
テクニカル
- Python3.11
- AWS lambda
- Line Message API
手順
LINE Developersのコンソールより、プロバイダーを作成する。
1.LINE Developersにアクセスする。
2.右上の『コンソール』をクリックする。
3.ページの真ん中にある「作成」ボタンをクリックする。
4.ポップアップした『新規プロバイダー作成』画面の赤枠内に任意のプロバイダー名を入力する。
その後、「作成」ボタンを押下する。
※今回は「Test_Provider」と入力する。
5.プロバイダーの作成に成功!!
作成したプロバイダーはまだ何もサービスが登録されていないので、
使用したいサービスを選択します。
選択できるサービスは以下になります。
- LINEログイン
- Messaing API
- ブロックチェーンサービス
- LINEミニアプリ
今回はその中の「Messaing API」を選択します。
Messaging API(チャンネル)を設定する。
1.先ほどの画面で、『Messaging API』を選択する。
2.入力画面に遷移するので、必要な内容を入力する。
※今回は画面キャプチャーの取得の関係で、スマホの画面となっておりますが、大きな違いはありません。
※一応、入力例を載せさせていただきます。
3.「作成」ボタンを押下すると、『確認』画面が表示されますので、「OK」を押下。
4.その後の情報利用に関する同意書も『同意する』を押下する。
5.チャンネルが作成されました。
AWSのLambda関数を作成する。
1.AWSのLambdaにアクセスし、「関数作成」ボタンを押下
さて、ここからはAWSにてLambda関数を作成していきます。
AWSにログインし、上部の検索テキストボックスで『Lambda』と入力し、Lambdaを開きましょう。
その後、「関数作成」ボタンを押下します。
2.関数の初期設定をします。
<以下、注意ポイント>
1.『ランタイム』については、タイミングによって表示内容がコロコロ変わります。
キャプチャー時は2023/12となりますので、最新のPythonとバージョンを選択しましょう。
2.『関数URLを有効化』にチェックを入れておきましょう。
また、認証タイプと呼ばれる選択肢が増えるので、『NONE』を選択しましょう。
その他はデフォルトでも構いません。適宜設定してくださいな。
3.関数の作成に成功。
関数の作成に成功すると、関数の一覧に命名した関数名が表示されます。
それをクリックすると以下のような画面が表示され、設定した通りの関数が作成されたことが分かります。
4.『lambda_function.py』の中身を修正する。
『lambda_function.py』の中身を以下のPythonソースで置き換えます。
- import json
-
- def lambda_handler(event, context):
- # TODO implement
- return {
- 'statusCode': 200,
- 'body': json.dumps('Hello from Lambda!')
- }
+ import logging
+ import os
+ import urllib.request
+ import json
+
+ logger = logging.getLogger()
+ logger.setLevel(logging.INFO)
+
+ def lambda_handler(event, context):
+
+ logger.info(event)
+
+ for message_event in json.loads(event["body"])["events"]:
+
+ logger.info(json.dumps(message_event))
+
+ url = "https://api.line.me/v2/bot/message/reply"
+
+ headers = {
+ "Content-Type": "application/json",
+ 'Authorization': 'Bearer ' + os.environ['ACCESSTOKEN']
+ }
+
+ data = {
+ "replyToken": message_event["replyToken"],
+ "messages": [
+ {
+ "type": "text",
+ "text": message_event["message"]["text"],
+ }
+ ]
+ }
+
+ req = urllib.request.Request(url=url, data=json.dumps(data).encode("utf-8"), method="POST", headers=headers)
+
+ with urllib.request.urlopen(req) as res:
+
+ logger.info(res.read().decode("utf-8"))
+
+ return {
+ "statusCode": 200,
+ "body": json.dumps("Hello from Lambda!")
+ }
↓↓↓ コピー用 ↓↓↓
import logging
import os
import urllib.request
import json
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
logger.info(event)
print("1.")
print(event)
for message_event in json.loads(event["body"])["events"]:
print("2.")
logger.info(json.dumps(message_event))
url = "https://api.line.me/v2/bot/message/reply"
print("3.")
headers = {
"Content-Type": "application/json",
'Authorization': 'Bearer ' + os.environ['ACCESSTOKEN']
}
print("3.")
data = {
"replyToken": message_event["replyToken"],
"messages": [
{
"type": "text",
"text": message_event["message"]["text"],
}
]
}
print("4.")
req = urllib.request.Request(url=url, data=json.dumps(data).encode("utf-8"), method="POST", headers=headers)
print("5.")
with urllib.request.urlopen(req) as res:
logger.info(res.read().decode("utf-8"))
print("6.")
return {
"statusCode": 200,
"body": json.dumps("Hello from Lambda!")
}
return {
"statusCode": 200,
"body": json.dumps("Hello from Lambda!")
}
5.環境変数を設定する。
上記のソースコードの内、
'Authorization': 'Bearer ' + os.environ['ACCESSTOKEN']
の部分で環境変数を使用しておりますので、環境変数を設定します。
そもそもLINE DevelopersのAccessTokenはどちらで確認できるのか?
-
『LINE Developers』にアクセス
-
対象のプロバイダーを選択。
6.『AWS API Gateway』の設定
- Lambda関数の上部のイメージ図より『トリガーを追加』をクリック
- 「トリガーを追加」画面で以下のように設定します。
- イメージ図の中に「API Gateway」が追加されるのでそれをクリック
- 『API endpoint:』という項目があるので、その後のURLをコピーします。
- LINE Developersの以下の場所にコピーしたエンドポイントを貼り付けます。
●(プロバイダーを選択)⇒「Message API設定」⇒『Webhook設定』
7.その他、エラーが出たときの設定
さて、以上で基本的な設定は終了です。
●(プロバイダーを選択)⇒「Message API設定」⇒『QRコード』
から、友達登録し、メッセージを送付してみましょう。
ここで、メッセージがオウム返しされなかったり、エラーが返ってきてしまう時があります。
そんな時は以下を試してみてください。
➀、「Webhookの利用」がONになっているか?
●(プロバイダーを選択)⇒「Message API設定」⇒『Webhookの利用』
について、『ON』になっている必要があります。
まずはそこを確認してみましょう!!
➁、『LINE official Account Manager』の自動応答メッセージの応答メッセージからステータスをオフにする
『LINE official Account Manager』にアクセスし、対象のアカウントを選択。
その後以下の画像の個所を確認し、『OFF(無効)』となっていることを確認しましょう。
以上、いかがでしょうか??
下記の画像のようにオウム返し出来ましたでしょうか??
簡単ですので、是非是非試してみてくださいね!!
次回は、Lambdaを外部接続させるためにNATゲートウェイを用意したいと思います。
ということで、本日はここまでです。
少しでも参考になったと思いましたら、「いいね」や「ストック」を押していただけますと、今後の励みになりますので、是非とも宜しくお願い致します。
最後までお読み頂きありがとうございました。