※この記事はKDDI Engineer&Designer Advent Calendar 2022の6日目の記事です。
最近、高性能AIチャットボットのChatGPTが話題ですが、クラスメソッドさんがそんなChatGPTをLINEチャットボット化する方法をブログで紹介してくれました。
※ソッコー実践させていただきました。ありがとうクラメソさん!
こちらを応用して、今年流行った @jiro4989 さん作成の「テキストを壱百満天原サロメお嬢様風の口調に変換するアプリ」のWeb API版を組み合わせることで、お嬢様言葉を返してくれるLINEチャットボットを作ってみました。
意外とすんなり行かず、つまずく点が多かったため知見を残しておきたいと思います。
↑ よければ友だち追加して使ってみてください。バグ発見したらこっそりDMいただけると助かります。笑
作成の流れ
上記のクラメソさんブログおよび、引用先のYouTube動画にて解説いただいている流れは以下です。(ここでは詳細は割愛します)
- LINE Developersコンソールにログイン
- 新規プロバイダー&チャネルを作成
- 後続のMakeシナリオ内の
LINE > Watch Events
モジュールのWebhook URLを設定
- Makeアカウントを作成
- 新規シナリオを作成
-
LINE > Watch Events
モジュールを作成- LINE Messaging APIのチャンネルアクセストークンを設定
-
HTTP > Make a request
モジュールを作成し接続- レスポンスのパースを有効にすること(私ここでハマりました)
-
LINE > Send a Reply Message
モジュールを作成し接続
- LINEアプリを起動
- 今回作成された公式アカウントにメッセージ送信し動作確認
ぶち当たった課題
今回のお嬢様ボット作成にあたり、以下の課題が発生しました。
それぞれの対処法を解説していきます。
- お嬢様API用にMake HTTPモジュールのカスタマイズが必要
- 友だち追加やブロック時にエラーになってしまう
- エラー発生した際、Makeシナリオが停止してしまう
- エラー発生した際、ユーザーからはボットが無応答のままに見えてしまう
1. お嬢様API用にMake HTTPモジュールのカスタマイズが必要
変更すべき箇所は以下です。
- URL
- 最新のAPIエンドポイントを設定する(Herokuの有償化に伴い、少し前にURL変更となっているため注意)
- Headers
- ChatGPT用に利用していた
Authorization
Itemは不要のため削除する
- ChatGPT用に利用していた
- Request content
- お嬢様APIの仕様に合わせて
{ "Text": "{{1.events[].message.text}}" }
とする
- お嬢様APIの仕様に合わせて
2. 友だち追加やブロック時にエラーになってしまう
ChatGPTはあくまでOpenAIアカウントにログインをした各個人ユーザーがAPIキーを用いてプライベートにアクセスするアプリケーションのため、クラメソさんのブログでも公式LINEアカウントのブロックや新規友だち追加といったケースはスコープ外になっていると思います。
今回のお嬢様APIは一般公開されているため、作ったボットを他の人にも使ってもらえるよう「友だち追加」や「ブロック/解除」にも対応してみます。
ここで問題になるのが、フォロー/アンフォロー系の操作をした際にもLINEのMessaging APIへPOSTリクエストが飛んでしまう点です。
このままだと他の人に公式アカウントを教えるたびにエラーでMakeのシナリオが停止してしまいます。
LINEのMessaging APIリファレンスをみると、HTTPリクエストボディのうち events.type
が follow
(友だち追加)や unfollow
(ブロック)のものを無視できればよさそうです。
Makeシナリオのモジュール間のコネクターを触ってみると、都合のいいことにフィルター機能というのがあったので使ってみます。
これで message
(チャット送信)のWebhookリクエストのみを通過させることに成功しました。
3. エラー発生した際、Makeシナリオが停止してしまう /
4. エラー発生した際、ユーザーからはボットが無応答のままに見えてしまう
上記の2課題ですが、前述のフィルタリングによりこのチャットボットで発生しうるエラーはカバーできている気がするものの、例えばChatGPT APIの場合はそこそこの頻度でAPI自体が過負荷等によりエラーを吐くことが多かったので、エラーハンドリングを追加しておきます。
設定したのは以下です。
-
LINE > Send a Reply Message
モジュールの追加 -
Ignore
モジュールの追加
いずれもエラーハンドラーとして設定します。
もともと最後尾にあった LINE > Send a Reply Message
モジュールを右クリックして Add error handler
を選択しモジュールを追加していきます。
Replyモジュールは、以下のように固定のTextのみを返すよう設定しておきます。
Ignoreモジュールは特に設定項目はありませんでした。
まとめ
私はアプリ開発シロートなのですが、「ローコードで簡単開発!」と思っていたら想像以上に色々とハマり、休日をまるまる使ってしまいました。
その分、ローコードといえども学べたことは予想以上に多く、何よりとても楽しかったです!
有益な情報を発信してくれたクラスメソッドさんや、素敵なアプリを公開くださっている @jiro4989 さんには本当に感謝です。
みなさんも是非、色んなWeb APIをLINEチャットボット化してみてください。