LoginSignup
4
2

【★祝広告マネタイズ解禁★】生成AIに作らせたカルタを遊べるLINE Botの作り方

Last updated at Posted at 2023-12-22

thumb8888.png

本記事は下記Youtube動画にて解説している手順のテキスト版です。Youtube版では画面遷移等より詳しく解説してあります。是非合わせてご覧ください。

概要

貼り付けた画像_2023_12_18_19_53.png

LINE公式アカウントの収益化機能の一つ、トークルーム広告がリリースされBotのマネタイズが手軽に出来るようになりました。既にいくつかのBotに導入され、収益を得られている方もいらっしゃるかと思います。

詳しくはこちらから

今回はその記念に、相性が良いと思われる生成AIとLINEを組み合わせる例として、「生成AIカルタBot」をノーコードで作成する手順をご紹介します。

是非皆さんも作ってみてください。

作るもの

image.png

AIに生成させたテキストと画像を利用したカルタが遊べるLINE Botです。

お題を出すとお題に沿って生成された正解画像と、その類語で生成された不正解画像の2枚の画像が提示され、正解のものを選ぶ、という遊び方です。

Dixitというボードゲームが好きで、同じようなものが作れないかと思い作ってみました。

Botの開発

完成シナリオ

image.png

インポート可能なBlueprintはこちら

準備

以下のアカウントが必要となります。まだお持ちでない方はご準備ください。

LINE公式アカウント

以下からMessaging APIのチャネルを作成しておいて下さい。既存のものでも問題ありません。

Makeのアカウント

OpenAIのアカウント、課金

アカウント開設

課金

※ 本記事を試すだけであれば$3程度で十分可能です。

作っていく

Makeでのシナリオ作成

貼り付けた画像_2023_12_18_12_04.png

「Create a new scenario」をクリックします。

貼り付けた画像_2023_12_18_12_05.png

わかりやすい名前をつけておきましょう。

LINE公式アカウントとシナリオの接続

はじめにユーザーが公式アカウントに対して送ったメッセージをMakeで受け取れるように設定します。

シナリオ中央の「+」をクリック、検索窓に「LINE」と入力、出てきたLINEモジュールをクリックして下さい。

貼り付けた画像_2023_12_18_12_13.png

続いて「Watch Events」をクリック。

貼り付けた画像_2023_12_18_12_14.png

「Create a webhook」をクリック。

貼り付けた画像_2023_12_18_12_14.png

「Create a connection」をクリック。

貼り付けた画像_2023_12_18_12_15.png

公式アカウントからChannel Access Tokenをコピーし、貼り付けて「Save」をクリック。

LINE Developers > チャネル > Messaging API設定

貼り付けた画像_2023_12_18_12_19.png

下にスクロールしチャネルアクセストークンをコピー

貼り付けた画像_2023_12_18_12_19.png

貼り付けてSave。

貼り付けた画像_2023_12_18_12_16.png

Connectionが設定されました。表示されたURLをコピーし、LINE DevelopersのWebhook URL欄にペースト、Webhookの利用もオンにし、保存して下さい。

貼り付けた画像_2023_12_18_12_22.png

貼り付けた画像_2023_12_18_12_24.png

オウム返し

ちゃんと繋がっているかを確認するために、オウム返しをシナリオ上で設定してみましょう。

画面下部の「LINE」をクリック。

貼り付けた画像_2023_12_18_12_27.png

「Send a reply Message」をクリック。

貼り付けた画像_2023_12_18_12_27.png

新しく出来たモジュールを先程作成したWebhookのモジュールの方へドラッグすると自動的に接続されます。

貼り付けた画像_2023_12_18_12_28.png

Replyの方のモジュールをクリックし、reply tokenMessages > Textの2つを以下のように設定し、OKをクリックして保存します。

貼り付けた画像_2023_12_18_12_31.png

「Run once」をクリックし、公式アカウントに何か適当に呼びかけてみましょう。

貼り付けた画像_2023_12_18_12_32.png

ここまで設定できていれば呼びかけた内容をそのまま返してくれるようになっています。

image.png

シナリオ上でも呼び出しが行われたことが確認出来ます。

image.png

ChatGPTの組み込み

カルタの画像生成は以下のパラメータで2枚の画像を生成することにします。

  1. ユーザーの入力テキストから主語、述語、目的語を抜き出したもの
  2. 主語と(1)の述語の類語、目的語の類語

(1)を正答、(2)を不正解とします。

よって、ユーザーの入力から主語、述語、目的語を抜き出し、類語を生成する必要があります。

このような作業はGPTが得意とするところなのでOpenAIのモジュールを利用して設定していきましょう。

シナリオ画面下部の「+」をクリックし検索窓に「OpenAI」と入力、出てきたモジュールをクリックします。

貼り付けた画像_2023_12_18_13_04.png

「Create a Completion」をクリック。

貼り付けた画像_2023_12_18_13_04.png

OpenAIモジュールがシナリオに追加されました。ドラッグで作成済みの2つのモジュールの間にドラッグし、割り込ませます。

image.png

OpenAIアカウントとの接続を行います。「Create Connection」をクリックします。

API KeyとOrganization IDが必要ですので、インプット下部の赤字のリンクをクリックし作成&コピペしてください。

終わったらOKをクリックします。

貼り付けた画像_2023_12_18_13_09.png

接続が完了しました。

image.png

以下のようにModel、Messages > Item 1、Item 2を設定して下さい。返答結果は後で扱いやすいよう、JSON形式を指定します。

Item 1 > Message Contentは以下をペースト

## 答えはjson形式で返却してください
## jsonのキーは英語で、主語はsubject、述語はpredicate、目的語はobject、述語の類語はpredicate_synonym、目的語の類語はobject_synonymとしてください

Item 2 > Message Contentは以下をペーストし、自動補完を削除し再設定

「{{1.events[].message.text}}」という文章から出来るだけ短い主語と述語と目的語を抜き出してください。述語の類語と目的語の類語を1つ挙げ、返却結果に含めてください。

image.png

これでユーザーの自由入力テキストから主語、述語、目的語と述語、目的語の類語が生成されます。

一度Run onceをクリックして呼びかけてみると正確に生成されるのが確認できます。

image.png

貼り付けた画像_2023_12_18_13_21.png

JSON形式へのパース

GPTによる生成結果はテキスト形式です。この後利用しやすくするためパースしてそれぞれを参照できるようにします。

シナリオ画面の適当なところで右クリック、Add a moduleをクリック。

貼り付けた画像_2023_12_18_13_24.png

「JSON」を検索しクリック。

貼り付けた画像_2023_12_18_13_25.png

「Parse JSON」をクリック。

貼り付けた画像_2023_12_18_13_25.png

OpenAIモジュールとReply Messageの間に割り込ませる

image.png

モジュールをクリックして設定ダイアログを開き、Create data structureをクリック、Strictにチェックを入れる、sample dataに以下を入力し「Generate」をクリック。

サンプルデータ

{
  "subject": "子供",
  "predicate": "遊ぶ",
  "object": "サッカーボール",
  "predicate_synonym": "遊び回る",
  "object_synonym": "ボール"
}

JSON StringにはChatGPTから返されたデータを設定します。OKをクリックして保存します。

貼り付けた画像_2023_12_18_13_31.png

Run onceして動作確認してみましょう。

無事テキストがパースされ、変数に格納されました。

image.png

画像の生成

正解画像

次に画像のDALL-Eを利用して画像を生成します。まずは正解画像を生成からです。

右下のOpenAIのボタンをクリックし、「Genarate an Image」をクリックします。

貼り付けた画像_2023_12_18_13_41.png

JSONモジュールの後に割り込ませます。

image.png

以下のように設定します。

貼り付けた画像_2023_12_18_13_43.png

結果の確認のため、シナリオ最後のReply Messageの内容を生成した画像のURLに変更します。

モジュールをクリックして設定ダイアログを開く

貼り付けた画像_2023_12_18_13_46.png

Messages > Item 1 > Textの内容をDALL-Eの方のOpenAIモジュールのData[] > URLに変更

貼り付けた画像_2023_12_18_13_46.png

保存して動作確認してみましょう。

同じように呼びかけると・・・

貼り付けた画像_2023_12_18_13_50.png

生成された画像が返ってきます。

img-7pBMCoVNvqocDmmlMTCnCSP7.png

不正解画像

次に不正解画像です。手順は同様なのですが、設定を以下のように変更し、正解画像生成モジュールの後に割り込ませて下さい。

貼り付けた画像_2023_12_18_13_53.png

貼り付けた画像_2023_12_18_13_54.png

正解インデックスのランダム化

後は画像に正解or不正解データを埋め込んでカルタを作れば終わり、と言いたいところなのですが、このまま進めるとシナリオ実行中は常に同じ位置の画像が正解となるような出題しか設定出来ません。

これではクイズになりませんので、正解がランダムな位置になるよう設定する必要があります。

ということで、Toolsでランダムな変数を作りましょう。下部の工具アイコンをクリックし「Set variable」をクリック。

貼り付けた画像_2023_12_18_14_00.png

割り込ませます。

image.png

以下のように設定します。式は入力フィールドクリック後に右側に出てくるパネルのタブから式タブをクリックすることで設定出来ます。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3136343135332f66633465383265642d363834622d623638642d623834662d6437666464313635643364312e706e67.png

これで変数correct_indexには0もしくは1が入ります。中が見えない箱に0もしくは1の番号が書かれたボールが入っており、そこから1つだけ引くようなイメージです。

handsball.png

ちなみに*の後に来る数字を増やせばバリエーションも増えますので3択、4択にしたい時はそのようにします。

何度か動作確認してみましょう。無事ランダムに正解位置となる変数がランダムに生成されているのが確認出来ます。

貼り付けた画像_2023_12_18_14_07.png

貼り付けた画像_2023_12_18_14_07.png

LINE Botからカルタを返信

疲れてきましたか?私も疲れてきましたが頑張ります。もう一息です。

次にLINEからユーザーへの返答をカルタに変更します。

モジュールをクリック、TypeをTemplateに変更します。

貼り付けた画像_2023_12_18_14_11.png

Alternative Textに「問題」と入力、Template TypeをImage Carouselに変更します。

貼り付けた画像_2023_12_18_14_12.png

Columnsの下のAdd itemを2回クリック。

貼り付けた画像_2023_12_18_14_13.png

それぞれ以下のように設定します。

なお先程作成したランダムな正解位置によって順番を変えるため、ifを利用しています。こちらも式と同様に入力フィールドクリック後に右側に出てくるパネルの左から2番目のタブで設定できます。

ランダムな数字で処理を分けるため、このような形になります。

huseikai.png

3択、4択にしたい時はswitchを利用します。

image.png

貼り付けた画像_2023_12_18_14_17.png

貼り付けた画像_2023_12_18_14_20.png

これでカルタの完成です。

動作確認してみましょう。

無事に動いているようですね!

貼り付けた画像_2023_12_18_19_18.png

微妙な類語がたくさんありそうなふわっとした言葉を使うと、どちらが正解か迷うような面白い問題が出来ます。

image.png

image.png

image.png

フィルタ設定

最後に、ユーザーが画像をタップした時に発言される「正解!」「不正解!〜」に対しては問題生成の要求ではないため、以後の処理をスキップしましょう。フィルター機能を利用します。

webhookと文面解析のモジュールを繋いでいる点線をクリック、出てきたメニューから「Set up a filter」をクリック。

貼り付けた画像_2023_12_18_14_46.png

以下のようにフィルタ名と条件を設定します。

貼り付けた画像_2023_12_18_14_48.png

モジュール間の間隔を空けてやることでフィルタ名が表示されます。

image.png

動作確認してみましょう。画像タップ時の正解!や不正解!というテキストは処理をスキップされていることが確認出来ます。

image.png

エラー処理

エラー処理は紙面の都合上割愛していますが、実際にサービスとしてリリースするためには各種例外処理が必要です。ご注意下さい。

まとめ

いかがでしたか?

LINE Messaging APIに含まれるリッチなメッセージ形式に加えChatGPTとDALL-Eの両方の使い方を紹介したかったため若干内容は無理矢理ですが、プログラミングの知識が無くても簡単にサービスが作れることがおわかり頂けたのではないかと思います。

話題性があり、誰でも簡単に使えるLINEのAPIと生成AIを組み合わせることで、プログラミングの知識があまりない方でも多くのユーザーに使われるサービスを作り出すことが可能な時代が到来しました。

皆さんも是非アイディアを形にし、トークルーム広告でマネタイズに挑戦してみてください。

面白いサービスの登場を心よりお待ちしています。

Special Thanks!

本記事の執筆にあたり、LINE API × Makeの第一人者であり、LINE Developer Communityで頻繁に登壇されているおきなかがいこつさんにレビュー頂きました。ありがとうございます。

以下はおきなかさんが登壇され、MakeとLINEのAPIの解説をして頂いた勉強会のアーカイブの一部です。とても参考になりますので、是非ご覧ください。

4
2
0

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
  3. You can use dark theme
What you can do with signing up
4
2