【超簡単】ChatGPTのLINEBotを作る方法
AIチャットくんのように、ChatGPTをLINEで使えるBotサービスがでてきていますね。
実はコレ、誰でも簡単に作ることができます。
自分で作ることができれば、例えば、Botに人格を持たせたりと、オリジナル仕様を楽しむことができます。
こちらの記事では、ChatGPTのLINEBotを作る方法について、ご紹介します。
なお、こちらの記事は、以下のサイトを参考にしております。
★作れるもの〜LINEBotのイメージ
LINE上で、質問を投げかけると、Botが答えを返してくれます。
この裏には、ChatGPTがいるので、豊富な知識を流暢な日本語で、返してくれます。
★必要なもの
以下の3つのアカウントが必要になりますので、持っていない場合は、事前にアカウント登録していきます。
また、OpenAIのアカウント登録とあわせ、APIキーも取得しておきます。
-
LINE Developerのアカウント
こちらのサイトから登録できます -
Googleのアカウント
こちらのサイトから登録できます -
OpenAiのアカウント登録とAPIキーの取得
こちらのサイトからアカウントの登録ができます。
以下のサイトが、アカウントの登録からAPIの取得までわかりやすく解説してくれています。
APIキーは後々使いますので、コピーしておきます。
★Let's create 作ってみましょう!
1.まずはLINEDeveloperで基本情報を設定
LINEDeveloperでアカウントの基本情報を設定するとともに、チャンネルアクセストークンを取得していきます。
-
こちらのサイトにアクセスします
-
白いコンソールボタンをクリックすると、以下の画面に遷移しますので、緑の作成ボタンをクリックします
-
適当に新規プロバイダー名を入力して、右下の作成ボタンをクリックします。
-
左から二番目の図 Messaging APIをクリックします
-
新規チャネル作成画面に遷移しますので、必須項目(赤※)を入力していきます。チャネルアイコンに好みの画像をアップロードします。一番下の、緑の作成ボタンをクリックします
-
MessagingAPI設定のタグをクリックし、一番下の、チャンネルアクセストークンをコピーしておきます。
2.GoogleAppsScript(GAS)にコードを書いてURLを取得
GASにLINEBotを動かすために必要なコードを入力していきます。
これまでに取得したLINEのチャンネルアクセストークンや、OpenAIのAPIキーもここで使います。
- こちらのサイトからGoogleドライブにアクセスします。
すでにGoogleドライブをお持ちの方は、ご自身のGoogleドライブにアクセスしてください。
- 左上の新規ボタンをクリックし、GoogleAppsScriptを開きます
- 開くと、このような画面になります
- 上記で入力されているコードは削除したうえで、以下のコードをコピペして貼り付けます。
const LINE_ACCESS_TOKEN = 'ご自身のLINEのアクセストークンを入力してください';
const OPENAI_APIKEY = 'ご自身のOpenAIのAPIキーを入力してください';
function doPost(e) {
const event = JSON.parse(e.postData.contents).events[0];
const replyToken = event.replyToken;
let userMessage = event.message.text;
const url = 'https://api.line.me/v2/bot/message/reply';
if (userMessage === undefined) {
// メッセージ以外(スタンプや画像など)が送られてきた場合
userMessage = '???';
}
const prompt = userMessage;
const requestOptions = {
"method": "post",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer "+ OPENAI_APIKEY
},
"payload": JSON.stringify({
"model": "gpt-3.5-turbo",
"messages": [
{"role": "system", "content": `
答えた後に、
知らんけど。を追記してください
`},
{"role": "user", "content": prompt}]
})
}
const response = UrlFetchApp.fetch("https://api.openai.com/v1/chat/completions", requestOptions);
const responseText = response.getContentText();
const json = JSON.parse(responseText);
const text = json['choices'][0]['message']['content'].trim();
UrlFetchApp.fetch(url, {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + LINE_ACCESS_TOKEN,
},
'method': 'post',
'payload': JSON.stringify({
'replyToken': replyToken,
'messages': [{
'type': 'text',
'text': text,
}]
})
});
return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}
- 右上のデプロイボタンをクリックして、新しいデプロイをクリックすると以下の画面に遷移します。種類の選択でwebアプリを選択し、デプロイをクリックします。
- こちらのURLをコピーします。
GASについては、こちらのサイトも参考にしてください。
3.最後にLINEDeveLoperにURLを入力
再び、こちらのサイトにアクセスし、コンソール→プロバイダーのページで作成したプロバイダーを選択→チャネル設定のページで作成したプロバイダーを選択→MessaginAPI設定のタグをクリック。
この画面の中段ぐらいに、Webhook設定とあるので、ここに先ほどコピーしたURLを貼り付けます。
そして、更新ボタンを押せば、終了。
さいごに
いかがでしたでしょうか。
スマホでササっと調べ物をしたいときに、このBotは使えますね。
実装も、プログラミング不要で、すごく簡単にできると思います。
ぜひ、ご自身の好みで人格を設定したりして、お楽しみいただければと思います。
Discussion
質問で失礼します。
書いていただいた、記事の内容の通りやりましたが、LINEで無反応です。
GASで以下のようなエラーが発生します。
エラー doPost を実行しようとしましたが、プロジェクトを保存できませんでした。
何か解決方法はないでしょうか?
コメントありがとうございます。
まず、私のLINEBOTは正常に動いているので、LINEサーバーの問題ではなさそうです。
ご回答になっていないとは思いますが、私の方でChatGPTに、この状況を投げたところ、以下の応答がありました。
【応答】
このエラーは、Google Apps Script(GAS)のプロジェクトを保存しようとした際に発生することがあります。いくつかの原因が考えられますので、以下の手順を試してみてください。
インターネット接続の確認:
GASはインターネット接続が必要です。まず、インターネット接続が正常かどうかを確認してください。
プロジェクトのサイズ制限:
GASのプロジェクトにはサイズ制限があります。プロジェクトが制限を超えている可能性があるので、プロジェクトのサイズを確認してください。プロジェクトのサイズを削減するために、不要なコードやファイルを削除することも検討してください。
スクリプトエディタのキャッシュクリア:
スクリプトエディタのキャッシュが原因で問題が発生することがあります。キャッシュをクリアしてみてください。以下の手順でキャッシュをクリアできます。
スクリプトエディタを開いている場合、閉じます。
ブラウザのキャッシュをクリアします。
再度、スクリプトエディタを開き、プロジェクトを保存してみてください。
別のブラウザやデバイスで試す: ブラウザやデバイスの問題が原因である場合があります。別のブラウザやデバイスを使用してプロジェクトを保存してみてください。
こちらの方法を今一度確認していただけますでしょうか。
よろしくお願いします。
ご回答ありがとうございます。
何とか解決しました。が、自分でもなんで解決できたかはわかりません。
初めまして。
お忙しいところ失礼いたします。
私も同様のデプロイの際にエラーが発生し進めない状況でございます。
エラー後、編集した点等ございましたら教えていただけますと幸いです。
拙文を読んでいただき、ありがとうございます。
こちら、特にコードは触っておりません。
また、私自身のLINEbotは正常に動いていますので、LINEサーバーの問題ではないと思われます。
前の方のコメントから推察するに、時間を置いてからやられてみてはどうでしょうか?
答えになってなくて申し訳ございません。
よろしくお願いします。
おいそがしいところご回答ありがとうございます。
試行錯誤してみます。
失礼いたします。
私もGASのコードをコピーして利用したところデプロイ時にSyntaxError: Unexpected end of inputと表示されました。
おそらくfunction doPost(e)の閉じカッコが無いためにデプロイできないのかと思います。コードの最後に「}」を追記することでデプロイすることができましたのでこちらで共有させていただきます。
ほんとですね!
最後に } がついていませんでした。
コードを修正して、更新いたしました。
ご指摘、ありがとうございます!!
今日作ってみたのですがLineが無反応です。
Webフックの検証ボタンではOKと出たので、GASまでは到達していると思われます。
GASを単品で実行すると最初の「e.postData.contents」が空だよ。
ってエラーが出ましたが、これは実行時に「e」に引数が渡ってくる予定なので
問題ないと思って良いんですよね?
Line側の設定でどこかON、OFF気を付けないといけないところがあるのでしょうか?
どの時点でマズってるのかが分からず困っております。
全力で手掛かりがない中大変恐縮ですが、もしアドバイスを頂けたら幸いです。
上記の件ですが、GASの概要を見るとエラーが起きていました。
が、何のエラーかは掴めていないので調べます。
こちらのソースのまるコピなのですが、どこかに落とし穴がある模様・・・、
コメントありがとうございます。
GASの doPost 関数は、外部からのHTTP POSTリクエストを受け付けることを期待しています。この関数は、LINEからのリクエストを受け取るために設計されており、そのリクエストには必要なデータ(e.postData.contentsなど)が含まれています。
GASのエディタ上で直接 doPost 関数を実行すると、この関数は適切なリクエストデータなしで呼び出されるため、上記のようなエラーが発生するのではないかと思われます。
念の為、当該コードをChatGPTに渡し、「構文上のエラーがないか?」確認しましたが、「問題はない」とのことでした。とすると、LINE側の問題である可能性があります。
大変申し訳ないのですが、この程度の回答しかできません。
この記事は、以下のサイトを参考にしていますので、こちらもご覧ください。
よろしくお願いします。
返信ありがとうございます。
解決したのでそのご報告です。
GASでエラーハンドリングしてエラーメッセージを出力してみました。
すると
https://api.openai.com のリクエストに失敗しました。
「You exceeded your current quota, please check your plan and billing details.」
と出てきました。
OpenAIは18ドルまでは3か月間は使えると思っていたのですが、お金払わないとだめらしいです。
クレジットカードで最低料金の5ドルを追加購入。
これで行けるか!?と思ったのですがエラーメッセージは止まらず。
こちらを見るとOpenAPIのKeyを再発行する、とあったので早速再発行。
この手順でやっと成功しました。
良い勉強になりました。
大変ご迷惑をおかけしました。
ありがとうございました。
コメント失礼いたします。
記事を参考に同じようにbotを作成したのですが、webホックの検証をしてもエラー401が発生してbotのほうも反応がありません。
クレジットカード登録を行いopenAIkeyを作成したのですが原因がわかりません。どうすればよいですか?
ソースコードはkeyの貼り付けを行っただけであとはおなじです。