ChatGPT APIを使って、自分のオリジナルキャラの返信がくるLine botを作りたいです
今までやったこと
- Line Developerを登録してMessaging APIを作成、LINEのトークンを取得
- ChatGPT APIのAPIキーを取得
- Google Apps Scriptで、ChatGPTとLINEを連携するコートを入力(ChatGPTとLINEのAPIキーを設定)
- Line Messaging APIにGoogle Apps ScriptのWeb hookを設定
- Messaging APIのLineアカウントにメッセージを送ってもの既読はつくけど返信はありません。
ChatGPT APIはまだクレジット情報など登録しおらず、使用状況もまだ使用期間内でした。
Messaging APIの自動返信を有効にするとLineの自動メッセージが返ってきます。
ChatGPT APIとLINEが連携できてなくて動いていない?
発生している問題・エラーメッセージ
Google Apps Scriptを実行すると以下のようなメッセージが出ます。
TypeError: Cannot read properties of undefined (reading 'postData') doPost @ コード.gs:13
該当のソースコード
こちらの記事のソースコードを参考にしています
ChatGPT API×LINE botでチャットボットを作成する方法【Google Apps Script】
https://prtn-life.com/blog/chatgpt-api-linebot
const GPT_TOKEN = 'XXXXXXXXX'; //ChatGPTのAPIキーを入れてください const LINE_TOKEN = 'XXXXXXXXX'; // LINEのAPIキーを入れてください const LINE_ENDPOINT = "https://api.line.me/v2/bot/message/reply"; const GPT_ENDPOINT = 'https://api.openai.com/v1/chat/completions'; const MODEL_NAME = 'gpt-3.5-turbo'; const MODEL_TEMP = 0.5; const MAX_TOKENS = 256; // LINEからPOSTリクエストが渡されてきたときに実行される処理 function doPost(e) { // LINEからPOSTされるJSON形式のデータをGASで扱える形式(JSオブジェクト)に変換 const json = JSON.parse(e.postData.contents); // LINE側へ応答するためのトークンを作成(LINEからのリクエストに入っているので、それを取得する) const reply_token = json.events[0].replyToken; if (typeof reply_token === 'undefined') { return; } // LINEから送られてきたメッセージを取得 const user_message = json.events[0].message.text; // 改行で区切って配列にする const user_msgarray = user_message.split(/\r\n|\n/); // LINEのメッセージをChatGPTに投げるメッセージにセットする const messages = [{ "role": "user", "content": user_msgarray[0] }] const headers = { 'Authorization': 'Bearer ' + GPT_TOKEN, 'Content-type': 'application/json', }; // リクエストオプション const options = { 'method': 'POST', 'headers': headers, 'payload': JSON.stringify({ 'model': MODEL_NAME, // 使用するGPTモデル 'max_tokens': MAX_TOKENS, // レスポンストークンの最大値(最大4,096) 'temperature': MODEL_TEMP, // 応答の多様性(0-1)※数値が大きいほどランダムな応答になる 'messages': messages }) }; // HTTPリクエストでChatGPTのAPIを呼び出す const res = JSON.parse(UrlFetchApp.fetch(GPT_ENDPOINT, options).getContentText()); // ChatGPTから返却されたメッセージを応答メッセージとしてLINEに返す lineReply(json, res.choices[0].message.content.trimStart()); } // LINEへの応答 function lineReply(json, replyText) { // 応答用のメッセージを作成 const message = { "replyToken": json.events[0].replyToken, "messages": [{ "type": "text", // メッセージのタイプ(画像、テキストなど) "text": replyText }] // メッセージの内容 }; // LINE側へデータを返す際に必要となる情報 options = { "method": "post", "headers": { "Content-Type": "application/json; charset=UTF-8", // JSON形式を指定、LINEの文字コードはUTF-8 "Authorization": "Bearer " + LINE_TOKEN // 認証タイプはBearer(トークン利用)、アクセストークン }, "payload": JSON.stringify(message) // 応答文のメッセージをJSON形式に変換する }; // LINEへ応答メッセージを返す UrlFetchApp.fetch(LINE_ENDPOINT, options); }
試したこと
// ChatGPTから返却されたメッセージを応答メッセージとしてLINEに返す
lineReply(json, res.choices[0].message.content.trimStart());
を
lineReply(json, 'test');
にしたけど、test と返ってきませんでした。
初心者のため、どこを直したり、確認すればいいかまだよくわかっていません。
どうか教授よろしくお願いします。
補足情報
参考記事
ChatGPT API×LINE botでチャットボットを作成する方法【Google Apps Script】
https://prtn-life.com/blog/chatgpt-api-linebot

回答1件
あなたの回答
tips
プレビュー