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

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

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

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

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

756閲覧

ラインボットのリマインド機能がうまくいかない

JamurBijaksana

総合スコア0

LINE Messaging API

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

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2021/09/18 07:40

編集2021/09/18 07:53

###概要

GASというGoogleのサイトで、LINEリマインダーアプリを作ろうとしています。
まったくの初心者なので、このサイトを参考にしています。
https://qiita.com/3yen/items/30496f963ceb0af31a1a
(天気予報の部分は、難しいのと、ID取得がうまくいかないのでやめました)
しかし、アカウントにこのコード?を紐づけておうむ返しするところまではできたのですが、リマインド機能をラインの方で指示してもおうむ返ししかしてくれません。
どうしたらリマインド機能がうまくいくでしょうか。
とても困っています。どうぞよろしくお願いします。

以下に、実際に書いた物をおきます。これですべてです。

実際に使用したコード

//ここから、ラインアカウント基本設定及び及びおうむ返ししてくれるシステムのコード //LINE Developersで取得したアクセストークンを入れる var CHANNEL_ACCESS_TOKEN = 'yDzD6ydHHl8yrKLU0uSZ1M2Dp1gAp2cwgwklkk2KUOjxBjpCBzyDnWGrig507EK297qAveM7yfDizHSnjlFBNO3ypvqansfnYLztfm4b0uT8WcSM72FR1BDIW/IiB/7XoW7O3v2sf+0fT+RkM/yTrgdB04t89/1O/w1cDnyilFU='; var line_endpoint = 'https://api.line.me/v2/bot/message/reply'; //ポストで送られてくるので、送られてきたJSONをパース function doPost(e) { var json = JSON.parse(e.postData.contents); //返信するためのトークン取得 var reply_token= json.events[0].replyToken; if (typeof reply_token === 'undefined') { return; } //送られたメッセージ内容を取得 var message = json.events[0].message.text; // メッセージを返信 UrlFetchApp.fetch(line_endpoint, { 'headers': { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN, }, 'method': 'post', 'payload': JSON.stringify({ 'replyToken': reply_token, 'messages': [{ 'type': 'text', 'text': message, }], }), }); return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON); } ######おうむ返しの部分はここまで、以下リマインド機能 var spreadsheet = SpreadsheetApp.openById('IDを入力'); var sheet = spreadsheet.getSheetByName('webhook'); function appendToSheet(text) { sheet.appendRow([text]); } //セルに中身があるか function blankTF(row, col){ return !(sheet.getRange(row, col).isBlank()); } //sheetの行数 function lastRow() { var dat = sheet.getLastRow(); return dat; } //全行サーチ function seachAll(){ var dat = sheet.getDataRange().getValues(); } //指定した行の削除 function deleatRow(RowNum){ sheet.deleteRow(RowNum); } //全削除 function deleatAll(){ sheet.clearContents(); } //セル[row][col]の値を返す function getFromRowCol(row, col) { var dat = sheet.getDataRange().getValues(); return dat[row][col]; } //セル[row][col]にvalを入れる function setFromRowCol(val, row, col) { sheet.getRange(row , col).setValue(val); } //row行1列のデータ(内容)を取得 function getTodoCell(row) { return sheet.getRange(row , 1).getValue(); } //row行2列のデータ(日付)を取得 function getDateCell(row) { return sheet.getRange(row , 2).getValue(); } //row行3列のデータ(trigger)を取得 function getTriggerCell(row) { return sheet.getRange(row , 3).getValue(); function setTrigger(row, date) { var triggerDay = moment(date,'YYYY年MM月DD日H時m分').toDate(); var trigger = ScriptApp.newTrigger("remind").timeBased().at(triggerDay).create(); setFromRowCol(trigger.getUniqueId(), row, 3); } function deleteTrigger(uniqueId) { var triggers = ScriptApp.getProjectTriggers(); for(var i=0; i < triggers.length; i++) { if (triggers[i].getUniqueId() === uniqueId) { ScriptApp.deleteTrigger(triggers[i]); } } } var moment = Moment.load(); //ポストで送られてくるので、送られてきたJSONをパース function doPost(e) { var json = JSON.parse(e.postData.contents); var replyText = 'null'; var filledDo = false; var filledDate = true; if(lastRow()>0){ filledDo = blankTF(lastRow(),1); filledDate = blankTF(lastRow(),2); } var userId = json.events[0].source.userId; //返信するためのトークン取得 var replyToken= json.events[0].replyToken; if (typeof replyToken === 'undefined') { return; } var message = json.events[0].message.text; switch (message) { case 'キャンセル': replyText = cancel(); break; case '天気': replyText = ''; push_message(); break; case '確認': if (lastRow()>0) { replyText = confirm(); } else { replyText = 'まだ何にも登録してないでしょ'; } break; default: if(message.match(/削除/)){ replyText = del(message); } else if(filledDate){ replyText = setDo(message); break; }else{ replyText = setDate(message); break; } break; } // メッセージを返信 UrlFetchApp.fetch(line_endpoint, { 'headers': { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN, }, 'method': 'post', 'payload': JSON.stringify({ 'replyToken': replyToken, 'messages': [{ 'type': 'text', 'text': replyText, }], }), }); return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON); } //データの削除 function del(m){ m=m.replace('削除', ''); if (m==''){ return '「削除+リマインダー番号」で指定しなさい' } m = m.replace(/[A-Za-z0-9]/g, function (s) { return String.fromCharCode(s.charCodeAt(0) - 0xFEE0); }); if(m>lastRow()){ return '番号間違ってるわよ\nもう一回確認しなさい'; } var s = getTodoCell(m); var deltriggerID = getTriggerCell(m); deleteTrigger(deltriggerID); deleatRow(m); return '「'+s+'」'+'を削除したわ'; } //データの確認 function confirm(){ var replyText = 'まだ何にも登録してないでしょ'; if(lastRow()>0){ replyText = ''; for (var i = 1; i <= lastRow(); i++) { replyText += i+';'+ getDateCell(i) + 'に「' + getTodoCell(i) + '」\n'; } } replyText+='以上よ'; return replyText; } //入力のキャンセル function cancel(){ if(lastRow()>0){ deleatRow(lastRow()); return 'キャンセルしたわ\nまたなんかあったら言って'; }else{ return 'キャンセルするものなんてないわよ'; } } //日付の入力 function setDate(m){ // 全角英数を半角に変換 m = m.replace(/[A-Za-z0-9]/g, function (s) { return String.fromCharCode(s.charCodeAt(0) - 0xFEE0); }); var date = Moment.moment(m, 'M月D日H時m分', true).format('YYYY年MM月DD日H時m分'); if (date === 'Invalid date') { var match = m.match(/\d+/g); if (match !== null) { date = Moment.moment().add(+match[0], 'minutes').format('YYYY年MM月DD日H時m分'); } } if (date === 'Invalid date') { return '「何分後」「」' } setTrigger(lastRow(), date); setFromRowCol(date,lastRow(), 2); return 'はいはい\n'+date + 'に連絡するわ'; } //データの入力 function setDo(m){ if(RandomReturn()){ return 'めんどくさぁ......'; } setFromRowCol(m, lastRow()+1, 1); return '「' + m + '」ね、いつ連絡すればいいのよ\n「キャンセル」って言ってくれればやめるけど'; } function getnowDate(){ return Moment.moment().format('YYYY年MM月DD日H時m分'); } function remind(e){ var nowDate = getnowDate(); var replyText = 'リマインド登録されてないわよ'; if(lastRow()>0){ for (var i = 1; i <= lastRow(); i++) { replyText = getDateCell(i); if(getDateCell(i)==Moment.moment().format('YYYY年MM月DD日H時m分')){ replyText = getTodoCell(i); var deltriggerID = getTriggerCell(i); deleteTrigger(deltriggerID); deleatRow(i); } } } var postData = { "to": 'ユーザーID', "messages": [ { "type": "text", "text": replyText+'\nふゆがわざわざリマインドしてあげたんだから、忘れるんじゃないわよ' } ]} var headers = { "Content-Type": "application/json", 'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN, }; var options = { "method": "post", "headers": headers, "payload": JSON.stringify(postData) }; var response = UrlFetchApp.fetch("https://api.line.me/v2/bot/message/push", options); } } //終わりです。ちなみに、全部コピペしただけなのですが、実行ボタンを押したときにはエラーは出ませんでした。

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

エラーメッセージは特にありませんでした。

該当のソースコード

たぶんJavaspriptというものです。

試したこと

下手に触るともっとわからなくなるなと思い、何も試せていません。ごめんなさい。

補足情報(FW/ツールのバージョンなど)

LINEはLINEDeveloperという機能を使っています

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

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

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

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

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

y_waiwai

2021/09/18 07:50

このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
JamurBijaksana

2021/09/18 07:51

わかりました。やってみます!
JamurBijaksana

2021/09/18 07:54

できました!いかがでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問