質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

0回答

536閲覧

LINE公式アカウントで受信した内容がスプレッドシートに反映されない

alice123

総合スコア0

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2022/11/28 08:16

前提・ 実現したいこと

LINE公式アカウントで自動返信×受信内容記録ツールを作成してます。
(LINE Messaging API+GAS+スプレッドシート)

こちらのソースコードを参考に作成させていただいています。https://teratail.com/questions/367172 

発生している問題・エラーメッセージ

”REPLY”という名のスプレッドシートに受信語句と対応する返信語句を登録していて自動返信はできていますが、”LOG”シートに記録が登録されていないようです。

該当のソースコード

GAS

1//★★LINE Messaging APIのチャネルアクセストークン★★ 2var LINE_ACCESS_TOKEN = "LINEのアクセスオークン"; 3 4//★★スプレッドシートID★★ 5var ss = SpreadsheetApp.openById("スプレッドシートID"); 6 7//★★シート名★★ 8var sh = ss.getSheetByName("REPLY"); 9 10 11//LINEからPOSTリクエストを受けたときに起動する 12//eはJSON文字列 13function doPost(e){ 14if (typeof e === "undefined"){ 15//動作を終了する 16return; 17} else { 18//JSON文字列をパース(解析)し、変数jsonに格納する 19var json = JSON.parse(e.postData.contents); 20 21//変数jsonを関数replyFromSheetに渡し、replyFromSheetを実行する 22replyFromSheet(json) 23} 24} 25 26//返信用の関数replyFromSheet 27//dataには変数jsonが代入される 28function replyFromSheet(data) { 29//返信先URL 30var replyUrl = "https://api.line.me/v2/bot/message/reply"; 31 32//シートの最終行を取得する 33var lastRow = sh.getLastRow(); 34 35//シートのA~G列を二次元配列で取得する 36var wordList = sh.getRange(1,1,lastRow,7).getValues(); 37 38//受信したメッセージ情報を変数に格納する 39var reply_token = data.events[0].replyToken; //reply token 40var text = data.events[0].message.text; //ユーザーが送信した語句 41 42//返信メッセージのタイプを格納するための空配列を宣言する 43var replyType = []; 44 45//返信メッセージを格納するための空配列を宣言する 46var replyList = []; 47 48//LINEで受信した語句がシートの受信語句と同じ場合、 49//返信メッセージのタイプをreplyTypeにpushし、 50//さらにその行のA列~G列をreplyListにpushする 51for(var i = 1; i < wordList.length; i++) { 52if(wordList[i][0] == text) { 53replyType.push(wordList[i][1]); 54replyList.push(wordList[i]); //ポイント: 一次元配列をpushする 55} 56} 57 58var messageArray = []; 59//LINEで受信した語句がシートの受信語句と一致しない場合、messageを送信して関数を終了する 60if (replyType.length < 1) { 61var message = "メッセージありがとうございます。"; 62messageArray.push({ 63type: "text", 64text: message, 65}); 66sendMessage(messageArray, reply_token); 67return; 68 69 70//replyTypeのLengthが5より大きい場合、messageLengthを5にする 71//※※一度に最大5つの吹き出ししか返信できないため※※ 72} else if(replyType.length > 5) { 73var messageLength = 5; 74} else { 75var messageLength = replyType.length; 76} 77 78//"messages"に渡す配列を格納するための空配列を宣言する 79var messageArray = []; 80 81//replyTypeに格納されている返信メッセージのタイプと 82//replyListに格納されている返信メッセージを最大5つ、 83//messageArrayにpushする 84for(var j = 0; j < messageLength; j++) { 85switch (replyType[j]) { 86case "text": 87messageArray.push({"type": replyType[j], "text": replyList[j][2]}); 88break; 89 90case "sticker": 91messageArray.push({"type": replyType[j], "packageId": replyList[j][3], "stickerId": replyList[j][4]}); 92break; 93 94case "image": 95messageArray.push({"type": replyType[j], "originalContentUrl": replyList[j][5], "previewImageUrl": replyList[j][6]}); 96break; 97 98case "video": 99messageArray.push({"type": replyType[j], "originalContentUrl": replyList[j][5], "previewImageUrl": replyList[j][6]}); 100break; 101 102//replyList[j][2]はJSON.parseを使ってパースする必要がある 103case "flex": 104messageArray.push({"type": replyType[j], "altText": "this is a flex message", "contents": JSON.parse(replyList[j][2])}); 105break; 106} 107} 108 109sendMessage(messageArray, reply_token); 110} 111 112// メッセージ送信関数 113// messageArrayは配列 114function sendMessage(messageArray, reply_token) { 115var replyUrl = "https://api.line.me/v2/bot/message/reply"; // 追加する 116var headers = { 117"Content-Type": "application/json; charset=UTF-8", 118Authorization: "Bearer " + LINE_ACCESS_TOKEN, 119}; 120 121var postData = { 122replyToken: reply_token, 123messages: messageArray, 124}; 125 126var options = { 127method: "post", 128headers: headers, 129payload: JSON.stringify(postData), 130}; 131 132//LINE Messaging APIにデータを送信する 133UrlFetchApp.fetch(replyUrl, options); 134} 135 136/** ユーザーのアカウント名を取得 137 */ 138function getUserDisplayName(userId) { 139 var url = 'https://api.line.me/v2/bot/profile/' + userId; 140 var userProfile = UrlFetchApp.fetch(url,{ 141 'headers': { 142 'Authorization' : 'Bearer ' + LINE_ACCESS_TOKEN, 143 }, 144 }) 145 return JSON.parse(userProfile).displayName; 146} 147 148// logシートに値を記載 149function debug(text, userId) { 150 var sheet = ss.getSheetByName('LOG'); 151 var date = new Date(); 152 var userName = getUserDisplayName(userId); 153 sheet.appendRow([userId, userName, text, Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy-MM-dd HH:mm:ss')]); 154}

ご教示いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2022/11/28 08:40

debugという関数はどこから呼ばれているのですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問