![見出し画像](https://assets.st-note.com/production/uploads/images/119628358/rectangle_large_type_2_396a67e1aa055bd8dfa5e4ce9d4601a2.png?width=1200)
LINEグループのマスコット:『ルーラちゃんbot』を作ってみた
KMRさんのSlackボット『牛のケイイチ』がかわいかったので、LINE用のキャラクターボットに私も挑戦。
『ミニバラ研究所』さんの看板猫『ルーラちゃん』のボットを作ってみました。
ミニバラ研究所 水谷早苗先生のInstagramです。
初めに考えた工程
1.「LINE Developers」の設定
2.コードを書き、GASの設定
3.「ルーラちゃん」のトリガー設定とキャラ設定
可愛くて賢いメス猫、一人称は「ルーラ」。
癒し系で悩みを話すと聞いてくれる。
「きっとんとーん♪」「にゃー」「またお話してね」と言わせたい。
4.ボットの返答に関する設定
素材
・『GPTー3.5』のAPIキー
・『DALL·E 3』で作成した猫のアイコン
・ChatGPTに書かせた、GASのプログラム
![](https://assets.st-note.com/img/1698002392432-mdy20cuoRC.png?width=1200)
参考サイト
以下のサイトで、APIキーやwebhookの意味が分かりやすく整理されていました。
Slackアプリももう一度復習しようと思います。
こちらは、ChatGPTにキャラクターを持たせる方法が分かりやすく書いてありました。
記事中で紹介されているコードを丸コピペさせていただき、まずはGAS⇔LINE Developers⇔LINEの連携をテスト。
その後、『ルーラちゃん』の呼びかけで始まる発言のみに反応するよう、コードを書きかえました。
工程1と4のやり方は、こちらの記事が分かりやすかったです。
![](https://assets.st-note.com/img/1698003746174-sMA9qAMN6G.jpg?width=1200)
コードに関する覚書き
・アクセストークン=「LINE Developers」で発行される「チャンネルアクセストークン」のこと。
・ChatGPT APIは有料。
・LINE DevelopersとGASを連携するときは、ウェブアプリURLがWebhookの役割をする。
// LINEチャンネルのアクセストークン
const ACCESS_TOKEN = 'XXXXXXXXXXXX';
// LINE Messaging APIのエンドポイント
const LINE_API_ENDPOINT = 'https://api.line.me/v2/bot/message/reply';
// ChatGPT 3.5 APIのエンドポイント
const GPT_API_ENDPOINT = 'https://api.openai.com/v1/chat/completions';
// ChatGPT 3.5 APIのAPIキー
const GPT_API_KEY = 'XXXXXXXXXXXX';
doPost(e) 関数
Webアプリケーションを作成する際に便利。
この関数でWebフォームからのデータを受け取ったり、外部のWebサービスからデータを受け取ったりすることができる。
今回のコード例でも、LINE Messaging APIからのメッセージを受け取るためにこの関数が使用されている。
補足「e」について
イベント(event)の略。
HTTP POST リクエストに関する情報を格納するために使用される。
具体的にe オブジェクトに含まれる情報として、以下のようなものがある。
「e.postData」
POST リクエストのデータ本体を含むオブジェクト。
通常、このオブジェクトからリクエストの本文データを取得する。
「e.parameters」
POST リクエストのクエリパラメーターを含むオブジェクト。
クライアントが送信したクエリストリングの情報がここに格納される。
「e.parameter」
特定のクエリパラメーターの値を取得するための関数。
※「doPost(e)」の「e」に、紐づけたLINEトークに投稿されたメッセージが引用される。
// メッセージを受信したときの処理
function doPost(e) {
const contents = JSON.parse(e.postData.contents);
// メッセージの内容を取得
const messageText = contents.events[0].message.text;
// ルーラちゃんで始まるメッセージのみに反応
if (messageText.startsWith('ルーラちゃん')) {
// ChatGPT 3.5で応答を生成
const responseText = generateResponse(messageText.substring(6)); // メッセージの「ルーラちゃん」を除去
// LINEに応答を送信
replyToLine(contents.events[0].replyToken, responseText);
}
}
上記のコードでは、投稿されたメッセージが「ルーラちゃん」で始まるか否かを判定し、「ルーラちゃん」から始まる場合のみChatGPTで返答を作成、LINEに応答を送信する。
//~中略
messages: [{ role: 'system', content:
'「ルーラちゃんbot」は悩み相談に乗ってくれるボットです。
発言全体で、「にゃー」を3回まで使ってください。
お礼を言われたときだけ、「どういたしまして」「またお話してほしいにゃー。」「きっと良くなる、きっとんとーん♪」から
1つだけをランダムで返してください。
一人称は「ルーラ」にし、癒し系でやさしく、相手の悩みに寄り添うイメージで毎回返事をしてください。' },
{ role: 'user', content: inputText }],
};
//~後略
上記の部分でルーラちゃんのキャラクターを設定。
これで、どんなふうにお話をしてくれるか。
『ルーラちゃんbot』の稼働
![](https://assets.st-note.com/img/1698006059317-lseGmK9xDp.jpg?width=1200)
![](https://assets.st-note.com/img/1698006059381-zIBegLDJua.jpg?width=1200)
![](https://assets.st-note.com/img/1698006060236-cGWP7yuHAT.png?width=1200)
![](https://assets.st-note.com/img/1698023137138-fOJ9vYk0Sa.jpg?width=1200)
若干テンションが高い気もしますが、可愛いと思います。
今後の検証
・イベント情報、メンション等をルーラちゃんが定期投稿してくれたら。
・特定のコミュニティの中にしばらくキャラクターボットを居させると、学習していくのか。
![](https://assets.st-note.com/img/1699685998050-13pNdRFwde.jpg?width=1200)
1万文字までとのこと。
![](https://assets.st-note.com/img/1699685997989-fnqQbG8P5c.jpg?width=1200)
![](https://assets.st-note.com/img/1699685998098-IjDOAo4hnV.jpg?width=1200)
追記:ボット作成のモニター様募集します。
キャラクター性をなくせば、LINEを開けばスマホで気軽に使える自分専用のチャットボットになります。
海外論文やホームページの長文をLINE上で要約し、そのまま友人に転送するなど使えると思います。
詳しくはお問い合わせください。
よろしければサポートお願いします! 頂いたサポートは書籍代にします。 より良い情報をお届けするため、学びます。