はじめに
これは前回作成した記事「「アイネクライネナハトムジーク」に出てくる斉藤さんをミスチルの桜井さんとして再現してみた」の続きになります。
気になった方は上記の記事をまず読むことをおすすめします。
作ったもの
まずはどんなものを作ったか紹介します。
こちらで友達登録したら試すことができます!
https://lin.ee/WEqJMO7 すみません。公開停止しています。
使い方はシンプルです。
桜井さんに何か話しかけます。
そうするとその心境に合うようなミスチルの曲の一部を桜井さんが歌ってくれます。(正確にはテキストで返信してくれます)
裏でCOTOHAの感情分析APIを活用していて、
送信した文章と感情スコアの近い歌詞の一部を返すようになっています。
なのであまり内容が一致してないことも多々あることはご了承ください。(お遊び感覚でお使いください。。)

コロナによる自粛疲れを希望がちらつかすといった表現で励ましているような気がします。
システム概要
歌詞フレーズと感情スコアを格納するDBへの登録部分は前回の記事を参照してください。
今回はLINEから送って返信が返ってくるまでの構成を紹介します。
構成はシンプルでLINEのMessaging API、AWSのAPI Gateway、Lambda、RDS、COTOHAのAPIを利用しています。
① - ②:LINE Messaging APIを使ってLINEからWeb HookによりAPI Gatewayを呼び出すようにする
③:API Gatewayの設定により作成したLambda関数を呼び出す
④:COTOHA APIを呼び出して送ったメッセージの感情スコアを取得
⑤:感情スコアの近い歌詞のフレーズをRDS上に作成したDBから取得
⑥ - ⑦:取得したフレーズをLINEの返信としてMessaging APIにより返す
各サービスの詳細説明
設定に手こずりそうなAPI Gateway、Lambda、LINE Messaging APIの説明をします。
RDSとCOTOHAについては特に難しい設定はないため、省略させていただきます。
API Gatewayの設定
(2) RESTの新しいAPIとして作成
(3) 新しいメソッドの作成
POSTで作成します。
(4) Lambdaの登録
Lambdaが実行できるように統合タイプを「Lambda関数」、Lambda関数にLambda名を入力
(5) 統合リクエストをクリック
(6) HTTPヘッダーの設定
名前をAuthentication、マッピング元を'Bearer <LINEのアクセストークン>' として登録します。
LINEのアクセストークンの取得については後述します。
登録したらこちらに入力しましょう。
(7) APIのデプロイ
「アクション」→APIのデプロイをクリックし、
ステージ名を入力してデプロイします。(ここではprodとする)
(8) APIのURIの発行
デプロイされると左メニューのステージ→prod→POSTにURLが発行されているはずです。
後のLINE Messaging APIのWebhookとして登録するのでどこかにURLをコピーしておきましょう。
Lambdaの設定
ソースコードはGitHubのlambda/lambda.pyを参照してください。
注意点としては、DBの接続情報、COTOHA APIの接続情報、LINE APIのトークン情報はLambdaの環境変数に登録していることです。
また、デフォルトでmysql-connector-pythonが入っていないためLambda上に入れる必要があります。
今回はLambdaのレイヤーを利用しました。
使い方はここを参照すると良いでしょう。
LINE Messaging APIの設定
初めて使う方は、チャネル作成についてはこちらを参照してください。
最低限必要な設定は以下です。
(1) Webhookの設定
事前にAPI Gatewayで作成したURLを登録します。
(2) アクセストークンの発行
(3) 自動応答の設定をオフにする
これを設定しないと関係ない返信をしてしまいます。
(4) Messaging APIの設定確認
LINE Official Account Managerに飛び、
左メニューのMessaging APIをクリックし、Webhook URLが登録されているか確認してください。
登録されていなければ(1)同様にAPIのURLを入力します。
参考
以下記事を参考にさせていただきました。