初質問失礼いたします
前提・実現したいこと
GAS, LINE API, Chaplusを使って雑談チャットボットを作っております
自分が送信したメッセージに応じてbotから適切なメッセージが送られてくるようにしたいと思っております
発生している問題・エラーメッセージ
Botから返事が返ってきません
doPostでは TypeError: Cannot read property 'postData' of undefined sendMessageでは Exception: Request failed for https://api.line.me returned code 400. Truncated server response: {"message":"The request body has 2 error(s)","details":[{"message":"May not be empty","property":"messages[0].text"},{"message":"May not be empty",... (use muteHttpExceptions option to examine full response) sendUserNameでは Exception: Request failed for https://api.line.me returned code 400. Truncated server response: {"message":"The value for the 'userId' parameter is invalid"} (use muteHttpExceptions option to examine full response) appendRowでは Cannot read property 'appendRow' of null とそれぞれエラーが出ています
該当のソースコード
GAS
1var TOKEN = 'LINE Botのチャネルアクセストークン' 2 3var userId = 'ユーザーID'; 4 5function doPost(e) { 6 var event = JSON.parse(e.postData.contents).events[0]; 7 var replyToken= event.replyToken; 8 9 if (typeof replyToken === 'undefined') { 10 return; 11 } 12 13 var username = getUserName(userId); 14 15 if(event.type == 'message') { 16 var userMessage = event.message.text; 17 var replyMessage = getChaplusMessage(userMessage, username); 18 appendRow(userMessage); 19 sendMessage(replyToken, replyMessage); 20 return ContentService.createTextOutput( 21 JSON.stringify({'content': 'ok'}) 22 ).setMimeType(ContentService.MimeType.JSON); 23 } 24} 25 26function sendMessage(replyToken, replyMessage) { 27 var url = 'https://api.line.me/v2/bot/message/reply'; 28 UrlFetchApp.fetch(url, { 29 'headers': { 30 'Content-Type': 'application/json; charset=UTF-8', 31 'Authorization': 'Bearer ' + TOKEN, 32 }, 33 'method': 'post', 34 'payload': JSON.stringify({ 35 'replyToken': replyToken, 36 'messages': [{ 37 'type': 'text', 38 'text': replyMessage, 39 }], 40 }), 41 }); 42} 43 44function getUserName(userId){ 45 var url = 'https://api.line.me/v2/bot/profile/' + userId; 46 var userProfile = UrlFetchApp.fetch(url,{ 47 'headers': { 48 'Authorization' : 'Bearer ' + TOKEN, 49 }, 50 }) 51 return JSON.parse(userProfile).displayName; 52} 53 54 55function getChaplusMessage(mes, username) { 56 var dialogue_options = { 57 'utterance': mes, 58 'username' : username, 59 'agentState' : { 60 'agentName' : 'ユイカ', //LINE Botのチャネル名を入力してください 61 'age' : '22歳', //任意で数字を変更してください 62 'tone' : 'normal' //normal(標準)、kansai(関西弁)、koshu(甲州弁)、dechu(赤ちゃん言葉)の中から設定できます 63 } 64 } 65 var options = { 66 'method': 'POST', 67 'contentType': 'text/json', 68 'payload': JSON.stringify(dialogue_options) 69 }; 70 71 var chaplusUrl = "https://www.chaplus.jp/v1/chat?apikey=自分のAPIKEY"; 72 var response = UrlFetchApp.fetch(chaplusUrl, options); 73 var content = JSON.parse(response.getContentText()); 74 75 var answer = content.bestResponse.utterance; 76 return answer; 77} 78 79function appendRow(text) { 80 var spreadsheet = SpreadsheetApp.openById("スプレッドシートのID"); 81 var sheet = spreadsheet.getSheetByName("Yuika_Bot"); 82 sheet.appendRow([new Date(),text]); 83 return text; 84}
試したこと
ネットからコピペしてそれを少しいじったものですが、
TypeError: Cannot read property 'postData' of undefined の解決方法は調べましたが、ちゃんとなりませんでした
更新ではなく新規作成、匿名含むすべてのユーザーにアクセス、Webhook URLの更新、アクセストークンやユーザーIDのチェック、スプレッドシートのIDのチェック・・諸々行いましたがだめでした
補足情報(FW/ツールのバージョンなど)
GASは新しいエディタを使っています
プログラミングは基礎を覚えたばかりでその次の段階としてこれを試しております
先輩方、ご教授お願いいたします
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/02 09:19