LoginSignup
5

posted at

updated at

お嬢様LINEチャットボットを開発いたしましてよ!

※この記事はKDDI Engineer&Designer Advent Calendar 2022の6日目の記事です。


最近、高性能AIチャットボットのChatGPTが話題ですが、クラスメソッドさんがそんなChatGPTをLINEチャットボット化する方法をブログで紹介してくれました。

※ソッコー実践させていただきました。ありがとうクラメソさん!

スクリーンショット 2022-12-05 22.21.54.png

こちらを応用して、今年流行った @jiro4989 さん作成の「テキストを壱百満天原サロメお嬢様風の口調に変換するアプリ」のWeb API版を組み合わせることで、お嬢様言葉を返してくれるLINEチャットボットを作ってみました。

スクリーンショット 2022-12-05 22.10.25.png

意外とすんなり行かず、つまずく点が多かったため知見を残しておきたいと思います。

S_gainfriends_2dbarcodes_GW.png 友だち追加
↑ よければ友だち追加して使ってみてください。バグ発見したらこっそりDMいただけると助かります。笑

本記事ならびにプログラムはjiro4989様、ならびにANYCOLOR様提示の注意事項ならびにガイドラインに則り公開しています。

作成の流れ

上記のクラメソさんブログおよび、引用先の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アプリを起動
    • 今回作成された公式アカウントにメッセージ送信し動作確認

ぶち当たった課題

今回のお嬢様ボット作成にあたり、以下の課題が発生しました。
それぞれの対処法を解説していきます。

  1. お嬢様API用にMake HTTPモジュールのカスタマイズが必要
  2. 友だち追加やブロック時にエラーになってしまう
  3. エラー発生した際、Makeシナリオが停止してしまう
  4. エラー発生した際、ユーザーからはボットが無応答のままに見えてしまう

1. お嬢様API用にMake HTTPモジュールのカスタマイズが必要

変更すべき箇所は以下です。

  • URL
  • Headers
    • ChatGPT用に利用していた Authorization Itemは不要のため削除する
  • Request content
    • お嬢様APIの仕様に合わせて { "Text": "{{1.events[].message.text}}" } とする

スクリーンショット 2022-12-06 1.35.21.png

2. 友だち追加やブロック時にエラーになってしまう

ChatGPTはあくまでOpenAIアカウントにログインをした各個人ユーザーがAPIキーを用いてプライベートにアクセスするアプリケーションのため、クラメソさんのブログでも公式LINEアカウントのブロックや新規友だち追加といったケースはスコープ外になっていると思います。
今回のお嬢様APIは一般公開されているため、作ったボットを他の人にも使ってもらえるよう「友だち追加」や「ブロック/解除」にも対応してみます。

ここで問題になるのが、フォロー/アンフォロー系の操作をした際にもLINEのMessaging APIへPOSTリクエストが飛んでしまう点です。
このままだと他の人に公式アカウントを教えるたびにエラーでMakeのシナリオが停止してしまいます。

LINEのMessaging APIリファレンスをみると、HTTPリクエストボディのうち events.typefollow (友だち追加)や unfollow (ブロック)のものを無視できればよさそうです。

Makeシナリオのモジュール間のコネクターを触ってみると、都合のいいことにフィルター機能というのがあったので使ってみます。

スクリーンショット 2022-12-06 0.40.00.png

これで message (チャット送信)のWebhookリクエストのみを通過させることに成功しました。

3. エラー発生した際、Makeシナリオが停止してしまう /
4. エラー発生した際、ユーザーからはボットが無応答のままに見えてしまう

上記の2課題ですが、前述のフィルタリングによりこのチャットボットで発生しうるエラーはカバーできている気がするものの、例えばChatGPT APIの場合はそこそこの頻度でAPI自体が過負荷等によりエラーを吐くことが多かったので、エラーハンドリングを追加しておきます。

設定したのは以下です。

  • LINE > Send a Reply Message モジュールの追加
  • Ignore モジュールの追加

いずれもエラーハンドラーとして設定します。
もともと最後尾にあった LINE > Send a Reply Message モジュールを右クリックして Add error handler を選択しモジュールを追加していきます。

スクリーンショット 2022-12-06 0.46.33.png

Replyモジュールは、以下のように固定のTextのみを返すよう設定しておきます。
Ignoreモジュールは特に設定項目はありませんでした。

スクリーンショット 2022-12-06 0.49.29.png

まとめ

私はアプリ開発シロートなのですが、「ローコードで簡単開発!」と思っていたら想像以上に色々とハマり、休日をまるまる使ってしまいました。
その分、ローコードといえども学べたことは予想以上に多く、何よりとても楽しかったです!

有益な情報を発信してくれたクラスメソッドさんや、素敵なアプリを公開くださっている @jiro4989 さんには本当に感謝です。

みなさんも是非、色んなWeb APIをLINEチャットボット化してみてください。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
5