見出し画像

記憶ありverのLINEボットを改良したので変更箇所を解説します

はじめに

この度、下記で作成したボットの効率化&バグ修正のためにmakeの設定を調整しました。それに伴い記事の内容も更新しています。

すでにボット作成済みの方は変更箇所を特定するのが大変だと思うのでこちらの記事を参考に作業をお願いします。
※当記事は一時的なニーズに対応するためのものであり、一定期間経過後に削除する可能性が高いです

まずはver.1とver.2の変更点の概要を確認します。

ver.1
ver.2

変更箇所と意図については下記に記載します。

  • LINEから受け取ったメッセージの中身を確認して処理を分岐させた

    • スタンプ、絵文字のみ、画像などファイル全般、といったテキスト意外の情報を受け取るとエラーが発生することが分かったので対応

  • JSON関連の設定を全て撤廃し必要に応じて置き換えた

    • make設定短縮のため

    • ボット構築難易度を下げるため

以上です。

今回の内容を実装することにより新規作成ルートで2つ、2回目以降のルートで2つオペレーションを削減することができます。
が、ボット自体の機能に一切変更はないので必要な方だけ作業をしてもらうので問題ないと思います。


それでは実際に作業をしていきましょう。

LINEの処理追加

はじめに下記を実装していきます。
先に記載したとおり、現在のボットには「LINEからスタンプや絵文字のみのメッセージ、画像などのファイル送信を行うとエラーになる」という問題があります。エラーの原因はスタンプ・絵文字のみのメッセージ・ファイル送信などは「メッセージ(テキスト)が存在しない」と判定されるため、その後の処理に問題が出てくる、というものです。本工程ではまずメッセージが存在するかどうかを確認し、処理を分岐させることでこれに対処していきます。

下記の手順で作業をお願いします。

  • LINEとData storeの間にある点線を右クリックしてUnlinkを選択し、接続を解除

  • TOOLSアイコンからRouterを選択してLINEと接続

  • Data storeの左にある半円をドラッグアンドドロップしてRouterに接続

  • 下部の小さいLINEアイコンから「Send a Reply Message」を選択して新しいLINE設定を追加

  • 新しく追加したLINEの左にある半円をドラッグアンドドロップしてRouterに接続

次にData storeの左にある半円をクリックして下記画像のように設定します。

終わったら同じ用に新しく追加したLINEの左にある半円をクリックして下記画像のように設定しましょう。

Data store側が「Exists」でLINE側が「Does not exist」です。
この分岐によりLINEから受け取ったメッセージに対して

  • 空白なのか

  • テキストが入力されているのか

を判定することができます。
※LINEスタンプや絵文字のみ、ファイル添付が送信されるとメッセージは空白として扱われます

最後にLINEの「Send a Reply Message」の内容を調整しましょう。具体的には空白のメッセージが届いたときに自動返信するための内容を入力していきます。
私はおばあちゃんに下記のようにしゃべってもらうようにしました。

Reply Tokenにタグを設定するのをお忘れなく

これでLINEのエラー処理は完了です。

JSONを使わないようにして効率化する

ChatGPTのアイコンを置き換える

これまでMake an API Callの設定を使っていましたがCreate a Completionに置き換えを行います。
※これを行うことでJSONの置き換えが可能になります

今の時点ではアイコン内の設定は行わなくていいので下記のようにエラーが出ている状態で問題ありません。

分岐前の作業

次にJSONを置き換えていきましょう。下記の部分から対応します。

まずは下記のChatGPTに対する指示の文言をコピーしてどこかに控えておき、2つのJSONを削除してしまいましょう。

次に左側のArray aggregatorの設定を下記のように設定します。
Source Moduleは左隣のText parserを選択し、Target structure typeにはData storeのRecord: Messageを選択します。roleはuserとし、contentにはText parserのタグを設定しましょう。

下記のようになっているでしょうか。OKボタンを忘れずに。

次に下記を参考に新しくText parserのReplaceをArray aggregatorの間に設置します。

Text parserの中身はいつものnewline、emptystringを選択します。Global matchをYesにするのも忘れずに。
一番下のTextには先程控えておいたボットへの指示をコピペしましょう。

今回指示の設定箇所をText parserに移動させたので上記のように改行をすることが可能になりました。ボットの設定はちょこちょこいじるので人間が見やすいように記号や改行を使って記載しておきましょう。

最後に2つ目のArray aggregatorも下記のように設定しましょう。

ユーザーIDが存在しないルートの作業

次に下記のJSONを置き換えていきましょう。

まずは下記のJSONの中身をコピーします。

次に右隣のChatGPTの設定を下記のようにします。Select MethodはCreate a Chat Completionにしましょう。MessagesはMapをONにして先程コピーしたJSONのObjectを貼り付けます。

ボットの表現の幅を調整したい場合は「Show advanced settings」をONにしてTemperatureの数値を0.1〜0.9の間で変更しましょう。デフォルトは1なので変更しなくて良い場合は「Show advanced settings」をONにする必要はありません。

なお、数値が小さいほど回答が確定的な表現になり、表現の幅が狭くなります。おばあちゃんには同じような質問にもバリエーションを持った回答をしてほしいので高めに設定してあります。0.8にしている深い理由は特になく、今後も調整していくと思います。

ここまで来たらChatGPTの左にあるJSONは削除してOKです。削除しても「ユーザーIDが存在しない場合の条件設定」は維持され下記のようになります。便利ですね。

次に右隣のText parserがエラーになっているので調整します。これはChatGPTを入れ替えたことによるものなので、黒くなっているタグを新しいChatGPTアイコンの回答のタグになるように変更しましょう。一つ注意点があり、Make an API Callのときとはタグの階層が変わっています。BodyがなくChoices→Message→Contentとなります。

次に右隣のJSONを削除しましょう。
そしてさらに右隣のArray aggregatorを分岐前の設定と同じように設定します。roleがassistantになっているところだけ注意してください。

最後にLINEの設定も新しいChatGPTアイコンの回答タグに差し替えて完了です。

ユーザーIDが存在するルートの作業

最後の作業です。下記のJSONを置き換えていきましょう。
ユーザーIDが存在しないルートと同じ作業をしていくので解説が不要な方は自身で作業を行ってみてください。

先ほどと同様にChatGPTの左にあるJSONの中身をコピーしてChatGPTのMessagesにペーストしましょう。他のChatGPTの設定も先程と同様に行っていきます。ここまで完了したら左隣のJSONは削除してOKです。

次にText parserを先程同様に新しいChatGPTの回答タグに差し替えます。

次にText parserの右隣のJSONを削除し、Array aggregatorに恒例の設定を行います。

最後にLINEのタグを置き換えて完了です。

テスト

最後に動作確認を行いましょう。確認ポイントは下記です。

  • ユーザーIDが存在するルートと存在しないルートを両方テストする

    • 存在しないルートのテスト方法の例

      • Data storeの自分自身のデータを削除する

      • テスト用のData storeを別で作成してシナリオ内のData store設定を変更する(完了したら戻すのを忘れずに)

      • 自分以外の誰かにテストを依頼する

  • スタンプや画像ファイルなどを送ってみてエラーメッセージが正しく返ってくるか確認

Data storeの自身のデータを削除する方法について、LINEボットを他のユーザー向けに公開済みの方にはあまりおすすめできないですが念のためにやり方を記載します。

Data storesを開き、自分の作成したData storeのBrowseボタンを押します。下記の画面になったら削除したいレコードにチェックを付けて右上のボタンを押すと削除完了です。削除前に確認が入るので右上のボタンは2回押すことになります。

削除したら戻せないので注意してください。

以上で変更点の解説は完了です。

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