##質問内容
LINE Messaiging APIとGASを使ってGoogle Spreadsheetに書き込めれるようにしています。
しかし、GAS側にエラーが走りメッセージの返信やSpreadsheetに書き込むことができません。
このサイトの6までやっています。
https://note.com/ky120930/n/n4e6c3fc68dd9
状況 :
・GASの公開範囲は全員、匿名
・LINEbotとGASとの設定は間違いない。
リンクされていると思う。
エラー :
・TypeError: Cannot read property 'postData' of undefined
(翻訳 :TypeError: Cannot read property 'postData' of undefined)
実行数 :
・ウェブアプリ、不明。
試したこと :
・LINE Messaiging APIのチャンネルを変えてみる
・Spreadsheetの権限を変えて試してみる(前の回答)
>>GASでどのくらいSpreadsheetに権限を与えるかについては承認している。
他のSpreadsheetを変えてみたりしているから違うと思う。
・ログを出して確認してみる(前の回答)
>>『このエディタ セッションで実行された関数はありません。』と出る。
App SclriptのStackdriver ログを見てみる。
上記の実行数の通り、ウェブアプリ、不明、と出る。
・arr_testが希望する形式で取得しているか確認してみる。
>>JavaScriptを読まない。確認方法がわからない。
GAS
1//LINE Developersで取得したアクセストークンを入れる 2var CHANNEL_ACCESS_TOKEN = 'アクセストークン'; 3var line_endpoint = 'https://api.line.me/v2/bot/message/reply'; 4 5//取得したメッセージを格納するためのスプレッドシート情報を入力 6var id = 'シートID'; 7var dateSheet = SpreadsheetApp.openById(id).getSheetByName('シート名1'); 8 9//スプレッドシートの最終行を取得 10var lastlow = dateSheet.getLastRow(); 11 12//ポストで送られてくるので、送られてきたJSONをパース 13function doPost(e) { 14 var json = JSON.parse(e.postData.contents); 15 16 //返信するためのトークン取得 17 var reply_token= json.events[0].replyToken; 18 if (typeof reply_token === 'undefined') { 19 return; 20 } 21 22 //送られたメッセージ内容を取得 23 var message = json.events[0].message.text; 24 25 //配列を宣言 26 var arr_test = []; 27 28 //LINEの内容を改行毎に区切って配列に格納 29 var arr_test = message.split(/\r\n|\r|\n/); 30 31 //指定の文言を置換する 32 arr_test[0] = arr_test[0].replace('タイトル:', ''); 33 arr_test[1] = arr_test[1].replace('日付:', ''); 34 arr_test[2] = arr_test[2].replace('場所:', ''); 35 arr_test[3] = arr_test[3].replace('開始時間:', ''); 36 arr_test[4] = arr_test[4].replace('終了時間:', ''); 37 38 //置換後の配列の値をスプレッドシートの最終行に指定のセルに格納 39 dateSheet.getRange(lastlow+1, 1).setValue(arr_test[0]); 40 dateSheet.getRange(lastlow+1, 2).setValue(arr_test[1]); 41 dateSheet.getRange(lastlow+1, 3).setValue(arr_test[2]); 42 dateSheet.getRange(lastlow+1, 4).setValue(arr_test[3]); 43 dateSheet.getRange(lastlow+1, 5).setValue(arr_test[4]); 44 dateSheet.getRange(lastlow+1, 6).setValue("登録"); 45 46 // メッセージを返信 47 UrlFetchApp.fetch(line_endpoint, { 48 'headers': { 49 'Content-Type': 'application/json; charset=UTF-8', 50 'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN, 51 }, 52 'method': 'post', 53 'payload': JSON.stringify({ 54 'replyToken': reply_token, 55 'messages': [{ 56 'type': 'text', 57 'text': 'スプレッドシートに登録したよ!!!', 58 }], 59 }), 60 }); 61 return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON); 62}
##追記
・doPostで引数(e)が正常に受け取れていないだけでは?
console.log("e = " + JSON.stringigy(e));
とかして確認しましょう。
>>確認しました。
『e = undefined』と出ました。
あなたの回答
tips
プレビュー