LINEBOTを作る 2023/08/07

現在時刻 2023/8/6 13:51

外暑いですね。
クーラーガンガンにしながら室内作業ですよ。

さて、実は今LINEBOTのプロトタイプを公開しようとしておりまして
その流れでLINEBOTの作り方を記事にしてみようと思います。
必要なモノは
・LINE公式アカウント
・AWSのアカウント
AWS Lambdaを使用します。
AWS Lambdaって何?って方は以下参照

ざっくり流れは

LINE公式でチャネルアクセストークン・シークレットトークン発行

AWS Lambdaの環境変数に追加

SDKをインストールしてzipで固めてAWS Lambda

そのzipをLambda関数のレイヤーに追加

API Gatewayを設定

そのURLを LINE Developerのwebhookに設定

他に必要なSDKを同じ要領でインストール→zip→レイヤー追加

ソースコード書いて終わり


LINEとAWS Lambdaを繋げるためにLINE Developersからチャネルアクセストークンを発行します。
チャネルアクセストークンについては以下参照

次にWindowsの方はWSLを連携させたVSCodeのターミナルを開く、
Macの方はターミナルを開く。
WSLが入っていない場合は以下にUbuntu環境を構築する方法とWSLとVSCodeの連携方法のURLを記載しておくのが連携しよう。

ターミナルを開いたら任意のフォルダで

mkdir python
cd python

pyhtonというフォルダを作ります。

これは、AWS LambdaにpyhtonのSDKをレイヤーとして追加するときの
zipファイルは必ずpythonという名前でフォルダを作らなきゃいけないからです。pythonフォルダに移動したあと…

sudo apt update
sudo apt install python3-pip

とりあえずアップデートしております。
そのあとでline-bot-sdkを取得します。

pip install line-bot-sdk -t . --no-user
ls

lsするとこんな感じ

aenum                            attrs                               frozenlist-1.4.0.dist-info    past                             typing_extensions-4.7.1.dist-info
aenum-3.1.15.dist-info           attrs-23.1.0.dist-info              future                        pycache                      typing_extensions.py
aiohttp                          bin                                 future-0.18.3.dist-info       pydantic                         urllib3
aiohttp-3.8.5.dist-info          certifi                             idna                          pydantic-2.1.1.dist-info         urllib3-2.0.4.dist-info
aiosignal                        certifi-2023.7.22.dist-info         idna-3.4.dist-info            pydantic_core                    wrapt
aiosignal-1.3.1.dist-info        charset_normalizer                  libfuturize                   pydantic_core-2.4.0.dist-info    wrapt-1.15.0.dist-info
annotated_types                  charset_normalizer-3.2.0.dist-info  libpasteurize                 python_dateutil-2.8.2.dist-info  yarl
annotated_types-0.5.0.dist-info  dateutil                            linebot                       requests                         yarl-1.9.2.dist-info
async_timeout                    deprecated                          line_bot_sdk-3.2.0.dist-info  requests-2.31.0.dist-info
async_timeout-4.0.2.dist-info    Deprecated-1.2.14.dist-info         multidict                     six-1.16.0.dist-info
attr                             frozenlist                          multidict-6.0.4.dist-info     six.py

ぎっしり入ってきます。
中が確認出来たら

cd ..
sudo apt install zip 

 cd .. で上の階層に戻ります。

zip -r python.zip python

戻った後でzipで固めます。
固めたらAWS Lambdaに移る!

AWS Lambda→レイヤー→レイヤーの作成
さっき固めたzipをアップして、設定は大体こんな感じで…。
ライセンス:https://github.com/line/line-bot-sdk-python/blob/master/LICENSE


レイヤー作ったら次関数の作成。

関数名は任意。
ランタイムはレイヤーとおんなじ。
他は初期設定。

関数が出来上がったら…

Layersを選択
レイヤーの追加
カスタムレイヤーでさっき追加したレイヤーを選択して追加。
追加されてますね!

次にAPI Gatewayを作成。


トリガー追加


API Gatewayを選択


なぜか英語


API Gatewayが追加されてる
API endpointを踏んでみると
"Hello from Lambda!"
と表示されるはず。

環境変数を設定する

Messaging API のチャネルアクセストークンとチャネルシークレットを
環境変数に設定します。

編集


ここでキーにCHANNEL_ACCESS_TOKEN、CHANNEL_SECRET、を設定。
値はそれぞれLINE Developersから
チャンネルアクセストークンとチャンネルシークレットを探してコピペ。

チャンネルシークレットはLINE Developersのプロバイダからチャンネル基本設定にある


環境変数を設定したら

LINE Developersコンソールに入りWebhook URLを設定。

編集
さっきのAPIGatewayでHello Lambda!!を出したURLを貼り付ける
URLを入れると更新ボタンが
検証ボタンに変わるから、検証を押して成功が出れば連携は出来ている


この辺の設定は任意だが、エラーの統計情報を入れておくと
webhook受け取り失敗した時にログで確認ができるようになるので
オンにしといたほうが良い。

Messaging API設定→応答メッセージ→編集

Webhookを使うので応答メッセージはオフで


あとは同じ要領でOpenAIのシークレットキーとSDKを手に入れてzipで固めて
レイヤーに追加。

↑に飛んで、アカウントを登録していなければ登録しよう。
登録したあと
右上の
Pearsonal→View API Keys→Create New secret key

発行するシークレットキーの名前。
何で使ってるキーなのか分かるようにしておこう。

発行が終わるとシークレットキーをコピー出来る。
この時にコピーしておかないと再発行しないといけなくなるので要注意。

それをさっきと同じ要領でLambda側の環境変数にSECRET_KEYとかの名前で登録しておく。
SDKのインストールも同じで、さっきのpyhtonフォルダとpython.zipはどっかによけるかdeleteした上でもう一回…

mkdir python
cd python

pythonフォルダに移った後で、

pip install openai -t . --no-user
ls

インストールが終わっていればこんな感じ↓


aiohttp                    async_timeout-4.0.2.dist-info  certifi                             frozenlist-1.4.0.dist-info  openai                     tqdm-4.65.0.dist-info
aiohttp-3.8.5.dist-info    attr                           certifi-2023.7.22.dist-info         idna                        openai-0.27.8.dist-info    urllib3
aiosignal                  attrs                          charset_normalizer                  idna-3.4.dist-info          requests                   urllib3-2.0.4.dist-info
aiosignal-1.3.1.dist-info  attrs-23.1.0.dist-info         charset_normalizer-3.2.0.dist-info  multidict                   requests-2.31.0.dist-info  yarl
async_timeout              bin                            frozenlist   

そして一つ上の階層に戻ってpyhtonフォルダをzipに固める。

cd ..
zip -r python.zip python
ls

lsで中身を見るとzipが出来ているはず。

python  python.zip

zipに固めたらさっきと同じ要領でレイヤー追加していく。

レイヤーの作成を押下


ライセンス
https://github.com/openai/openai-python/blob/main/LICENSE

作成が終わったら関数にレイヤー追加。

追加!

ここまで出来たらラムダのタイムアウト設定をちょっと変えます。

タイムアウトが3秒になってる

編集ボタンを押下してタイムアウト時間をのばしましょう。
MAX15分までいけます。

あとは僕が前に書いた記事のboto3使う記事を参照して、
同じ要領でレイヤー追加して
これから書く有料記事を参照して
ソースコード貼っちゃえば
トレーニングBOTが完成します。(するはずw)


この記事が気に入ったらサポートをしてみませんか?