この記事の内容を理解すればこんなLINEBotが簡単にできちゃいます!!
前々準備
- GoogleDriveにログイン
- LINE Developersにログイン
- OpenAIのAPIクレジット登録
前準備
4. 拡張機能からGoogleAppsScriptを立ち上げる
※以降に出てくるコードはほとんど上記GASに既に記載されています。
おうむ返しBotを作ろう
必要なこと
- LINEチャンネルアクセストークンの貼り付け
- OpenAIのAPI_keyの貼り付け(厳密にはここでは必要ないですが準備としてまとめてやっちゃいましょう)
- デプロイ
function doPost(e) {
let json = JSON.parse(e.postData.contents)
let reply_token= json.events[0].replyToken;
if (typeof reply_token === 'undefined') {
return;
}
if (json.events[0].type == 'message'){
const userMessage = json.events[0].message.text
// ☆ここのメッセージを変更することで、返信内容が変更できる☆
messages = [
{ type: 'text',
text: userMessage
}
]
// ☆メッセージ内容はここまで☆
sendmessage(messages, reply_token)
}
return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}
function sendmessage(message, reply_token){
UrlFetchApp.fetch(line_endpoint, {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + LINE_CHANNEL_ACCESS_TOKEN,
},
'method': 'post',
'payload': JSON.stringify({
'replyToken': reply_token,
'messages': message
})
})
}
自分の言葉に変えてみよう
messages = [
{ type: 'text',
text: userMessage + "ってどういうこと?"
}
]
「こんにちは」に対し「こんにちはってどういうこと?」と返ってきたら成功!
2つメッセージを返そう(オブジェクトの単位を学ぶ)
messages = [
{ type: 'text',
text: userMessage
},
{ type: 'text',
text: userMessage + "2回目"
}
]
「こんにちは」に対し「こんにちは」「こんにちは2回目」と返ってきたら成功!
2回目以降のデプロイは「デプロイの管理」を選択しましょう。Webhookの再設定は不要です。デプロイ前には必ずスクリプトが保存されていることを確認します。
右上のペンのマークを押して「新バージョン」を選択します。
いきなり応用!ChatGPTにメッセージを作ってもらおう
下記のような関数を作っておけば、contentで指示を書き、callChatGPT(userMessage)と書けばChatGPTが作成したメッセージが利用できます。
function callChatGPT(userMessage) {
let system_content = `あなたは○○です(役割を設定)。${userMessage}に対して****のように回答してください。文字数は***。`
const url = 'https://api.openai.com/v1/chat/completions';
const options = {
method: "post",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${OPENAI_API_KEY}`,
},
payload: JSON.stringify({
model: "gpt-3.5-turbo",
messages: [{ role: "system", content: system_content }, { role: "user", content: userMessage }],
}),
};
const response = UrlFetchApp.fetch(url, options);
const result = JSON.parse(response.getContentText());
const text = result.choices[0].message.content.trim();
return text;
}
このメッセージをmessagesの中に入れます。
messages = [
{ type: 'text',
text: callChatGPT(userMessage)
}
]
2つの分岐を作ろう(○○だったらこう返信、✖️✖️だったら...)
function doPost(e) {
let json = JSON.parse(e.postData.contents)
let reply_token= json.events[0].replyToken;
if (typeof reply_token === 'undefined') {
return;
}
// もしユーザーが送信したもののタイプが「message」だったら
if (json.events[0].type == 'message'){
const userMessage = json.events[0].message.text
if(userMessage == "東北東"){
messages = [
{ type: 'text',
text: "大正解!"
}
]
}else{
messages = [
{ type: 'text',
text: "どーこ見て食べてんだよ"
}
]
}
// ☆メッセージ内容はここまで☆
sendmessage(messages, reply_token)
}
return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}
さらに分岐が増やしたい場合は、
function doPost(e) {
let json = JSON.parse(e.postData.contents)
let reply_token= json.events[0].replyToken;
if (typeof reply_token === 'undefined') {
return;
}
// もしユーザーが送信したもののタイプが「message」だったら
if (json.events[0].type == 'message'){
const userMessage = json.events[0].message.text
if(userMessage == "東北東"){
messages = [
{ type: 'text',
text: "大正解!"
}
]
}else if(userMessage == "北北東"){
messages = [
{ type: 'text',
text: "惜しい!"
}
]
}else{
messages = [
{ type: 'text',
text: "どーこ見て食べてんだよ"
}
]
}
// ☆メッセージ内容はここまで☆
sendmessage(messages, reply_token)
}
return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}
補足:カスタマイズ方法
ここまでの流れを理解できれば、様々な応用の仕方が可能です。
返信内容をカスタマイズ
messages = [
{ type: 'text',
text: callChatGPT(userMessage)
}
]
これはテキストを返すコードですが、その他スタンプ、画像、位置情報などのタイプを選択することが可能です。詳しくはLINE公式ドキュメントをご参照ください。
イベントタイプやメッセージ内容をカスタマイズ
if分岐をどのように作るかで想定されるいろんなパターンに応用可能です。eventのtypeにはmessageの他にfollow(誰かが友だち追加したとき)、follow(誰かが友だち追加した)、postback(ユーザーからのアクション)などがあります。来たメッセージが画像だったら、メッセージに○○が含まれていたら、などシチュエーションによって分岐できます。
スプレッドシートをデータベースに使用
送信するメッセージの情報源としてスプレッドシートを使えばさらにバリエーションが増やせます。
体験会後自分でやっていて詰まったら
今は大概のことはChatGPTに聞けば解決してくれますが、解決しない場合自分で試せることが下記に書かれていますのでこちらもぜひご参考になさってください。