先日、同じ質問をしました。そして回答道理試したのですが、うまくいきません。
人任せで申し訳ないのですが、再度ほかに間違っているところがないのか、確認していただけると幸いです。
var global; var ACCESS_TOKEN = '00000000000000000000000000000000'; var id = '000000000000000000000000000000000000000'; var dataSheet = SpreadsheetApp.openById(id).getSheetByName('7月'); var url = 'https://api.line.me/v2/bot/message/reply'; function doPost(e) { // WebHookで受信した応答用Token var replyToken = JSON.parse(e.postData.contents).events[0].replyToken; // ユーザーのメッセージを取得 var userMessage = JSON.parse(e.postData.contents).events[0].message.text; var data = JSON.parse(e.postData.contents).events[0]; var result; // 家計簿閲覧モード if (userMessage.match(/家計簿/)) { // シートの内容を取得するメソッド result = showSpreadSheet(); } else { // 家計簿記録モード result = insertToSpreadSheet(data); } //取得内容をreplyに渡す reply(data, result); } //返信用のメソッド function reply(data, msg) { UrlFetchApp.fetch(url, { 'headers': { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': 'Bearer ' + ACCESS_TOKEN, }, 'method': 'post', 'payload': JSON.stringify({ 'replyToken': data.replyToken, 'messages': [{ 'type': 'text', 'text': msg, }], }), }); return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON); } function showSpreadSheet() { var FValues = dataSheet.getRange('B:B').getValues(); var LastRow = FValues.filter(String).length; var spread = ""; var range; var pay = dataSheet.getRange(2,7).getValue(); var balance = dataSheet.getRange(3,7).getValue(); if (LastRow == 1) { spread = spread + "残高: " + balance + "円\n"; return spread; } for(var i = 1; i <= LastRow; i++) { for(var j = 1; j <= 3; j++) { var range = dataSheet.getRange(i, j); var rangeVal = range.getValue(); if (i > 1 && j == 1) { rangeVal = Utilities.formatDate(rangeVal, 'Asia/Tokyo', 'MM/dd'); } if (i > 1 && j == 3) { rangeVal = rangeVal + "円"; } spread = spread + rangeVal + ","; if(j == 3) { spread = spread + "\n"; } } } spread = spread +"----------------------\n"; spread = spread +"支出合計: " + pay + "円\n"; spread = spread + "残高: " + balance + "円\n"; spread = spread +"----------------------\n"; return spread; } function insertToSpreadSheet(data) { var date = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd'); var FValues = dataSheet.getRange('B:B').getValues(); var LastRow = FValues.filter(String).length; // 入力文字は品名全角or半角スペース金額 var inputArray = data.message.text.split(/\s+/); var product = inputArray[0]; var price = inputArray[1]; dataSheet.getRange(LastRow + 1, 1).setBorder(true, true, true, true, false, false).setValue(date); dataSheet.getRange(LastRow + 1, 2).setBorder(true, true, true, true, false, false).setValue(product); dataSheet.getRange(LastRow + 1, 3).setBorder(true, true, true, true, false, false).setValue(price); var str = [date, product, price].join(" "); return str + "円\n記録しました"; };
前回は【webhookの検証時には特別にreplyTokenが00000000000000000000000000000000のイベントが飛んでくるので。
doPost関数にそれをキャッチする処理を書けばエラーにならないはず】と言われ、
if (replyToken === '00000000000000000000000000000000') { return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON); }
を書いたのですが、エラーがでました。
どうしたらいいのかわかりまん。
if (replyToken === '00000000000000000000000000000000') {
return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}
をどこで書いたかわからないので、ソースコード内に追記してください。そうしないとエラーが特定できません。
あと、悪用されかねないので`id`や`ACCESS_TOKEN`は適当な文字列で伏せてください。ここは知らなくても困らない情報です。
`id`や`ACCESS_TOKEN`のご指摘ありがとうございます。
削除するのを忘れていました。
function doPost(e) {
// WebHookで受信した応答用Token
var replyToken = JSON.parse(e.postData.contents).events[0].replyToken;
// ユーザーのメッセージを取得
var userMessage = JSON.parse(e.postData.contents).events[0].message.text;
var data = JSON.parse(e.postData.contents).events[0];
var result;
// 家計簿閲覧モード
if (userMessage.match(/家計簿/)) {
// シートの内容を取得するメソッド
result = showSpreadSheet();
} else {
// 家計簿記録モード
result = insertToSpreadSheet(data);
}
//取得内容をreplyに渡す
reply(data, result);
if (replyToken === '00000000000000000000000000000000') {
return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}
}
という感じで書きました。
回答1件
あなたの回答
tips
プレビュー