前提
google apps scriptとLine messaging APIを使ってLINE BOTを作成中です。
スプレッドシートから返答する機能と、送ったメッセージが保存される機能(ログ)を作っています。
実現したいこと
スプレッドシートに送ったメッセージが記録されるようにしたい。
スプレッドシートに保存してる単語があるとメッセージが返答される機能はつけました。
発生している問題・エラーメッセージ
エラーメッセージはないですが、メッセージを送っても保存されません。
返答される機能はできているので、
コードの問題なのかなと考えています。
ログのソースコード
log.gs
1function doPost(e){ 2 3var ACCESS_TOKEN = "****コピペしてます****"; 4 5var replyUrl = "https://api.line.me/v2/bot/message/reply"; 6var sss = SpreadsheetApp.openById("****コピペしてます****"); 7var sheet = sss.getSheetByName("b"); 8var lastRow = sheet.getLastRow()+1; 9 10var replyToken = JSON.parse(e.postData.contents).events[0].replyToken; 11//ユーザーのIDを取得 12var user_id = JSON.parse(e.postData.contents).events[0].source.userld; 13//ユーザー名を取得 14var user_disp_name = JSON.parse(e.postData.contents).events[0].displayName; 15//ユーザーのメッセージを取得 16var user_message = JSON.parse(e.postData.contents).events[0].message.text; 17 18var reply_messages = [user_message]; 19//メッセージを返信する配列を生成します。 20var messages = reply_messages.map(function (v) { 21return {'type':'text', 'text': v}; 22}); 23 24UrlFetchApp.fetch(url, { 25'headers':{ 26'Content-Type': 'application/json; charset-UTF-8', 27'Authorization': 'Bearer' + ACCESS_TOKEN, 28}, 29'method': 'post', 30'payload': JSON.stringify({ 31'replyToken': replyToken, 32'messages': messages, 33'user_id': user_id, 34'text': user_disp_name, 35'text': user_message, 36}), 37}); 38 39//現在時刻を取得する 40var date = new Date(); 1 41//各列のそれぞれの値をセットする 42sheet.getRange(lastrow, 1).setValue(date); 43sheet.getRange(lastrow, 2).setValue(user_id); 44sheet.getRange(lastrow, 3).setValue(user_disp_name); 45sheet.getRange(lastrow, 4).setValue(user_message); 46 47return ContentService.createTextOutput(JSON.stringify({'content':'post ok'})).setMimeType(ContentService.MimeType.JSON); 48 49 50} 51 52
返答用コード
text.gs
1//★★LINE Messaging APIのチャネルアクセストークン★★ 2var LINE_ACCESS_TOKEN = "****コピペしてます****"; 3 4//★★スプレッドシートID★★ 5var ss = SpreadsheetApp.openById("****コピペしてます****"); 6 7//★★シート名★★ 8var sh = ss.getSheetByName("a"); 9 10 11//LINE Messaging APIからPOST送信を受けたときに起動する 12// e はJSON文字列 13function doPost(e){ 14 if (typeof e === "undefined"){ 15 //動作を終了する 16 return; 17 } else { 18 //JSON文字列をパース(解析)し、変数jsonに格納する 19 var json = JSON.parse(e.postData.contents); 20 21 //変数jsonを関数replyFromSheetに渡し、replyFromSheetを実行する 22 replyFromSheet(json) 23 } 24 25 26} 27 28//返信用の関数replyFromSheet 29// data には変数jsonが代入される 30function replyFromSheet(data) { 31 //返信先URL 32 var replyUrl = "https://api.line.me/v2/bot/message/reply"; 33 34 //シートの最終行を取得する 35 var lastRow = sh.getLastRow(); 36 37 //シートの全受信語句と返信語句を二次元配列で取得する 38 var wordList = sh.getRange(1,1,lastRow,2).getValues(); 39 40 //受信したメッセージ情報を変数に格納する 41 var reply_token = data.events[0].replyToken; //reply token 42 var text = data.events[0].message.text; //ユーザーが送信した語句 43 44 //返信語句を格納するための空配列を宣言する 45 var replyTextList = []; 46 47 //LINEで受信した語句がシートの受信語句と同じ場合、返信語句をreplyTextにpushする 48 for(var i = 1; i < wordList.length; i++) { 49 if(wordList[i][0] == text) { 50 replyTextList.push(wordList[i][1]); 51 } 52 } 53 54 55 //LINEで受信した語句がシートの受信語句と一致しない場合、関数を終了する 56 if(replyTextList.length < 1) { 57 return; 58 59 //replyTextListのLengthが5より大きい場合、messageLengthを5にする 60 //※※一度に最大5つの吹き出ししか返信できないためです※※ 61 } else if(replyTextList.length > 5) { 62 var messageLength = 5; 63 } else { 64 var messageLength = replyTextList.length; 65 } 66 67 //"messages"に渡す配列を格納するための空配列を宣言する 68 //[{"type": "text", "text": "返信語句その1"},{"type": "text", "text": "返信語句その2"}....] 69 var messageArray = []; 70 71 //replyTextListに格納されている返信語句を最大5つ、messageArrayにpushする 72 for(var j = 0; j < messageLength; j++) { 73 messageArray.push({"type": "text", "text": replyTextList[j]}); 74 } 75 76 var headers = { 77 "Content-Type": "application/json; charset=UTF-8", 78 "Authorization": "Bearer " + LINE_ACCESS_TOKEN, 79 }; 80 81 var postData = { 82 "replyToken": reply_token, 83 "messages": messageArray 84 }; 85 86 var options = { 87 "method" : "post", 88 "headers" : headers, 89 "payload" : JSON.stringify(postData) 90 }; 91 92 //LINE Messaging APIにデータを送信する 93 UrlFetchApp.fetch(replyUrl, options); 94} 95 96 97
試したこと
ログだけの機能でLINE BOTを起動しましたが反応がなかったです。
function doPostを返答機能でも使用してるので合わせてみましたが、
反応なかったです。
エラーはなく実行ボタンを押して完了は出来ました。
返答機能は新しい言葉を保存して機能できているため、デプロイの更新はできているかなと思っています。
参考サイト
GASを勉強し基礎的な部分は検索し学習しましたが、
抜けがあるかもしれません。
すみません。
どなたかご教授いただけるかたいらっしゃったら幸いです。
回答1件
あなたの回答
tips
プレビュー