teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

2021/10/10 09:53

投稿

Matsu105
Matsu105

スコア1

title CHANGED
File without changes
body CHANGED
@@ -9,217 +9,8 @@
9
9
  このようにGAS上で表示されていてメッセージが返ってきません。
10
10
 
11
11
  ### 該当のソースコード
12
- ```var access_token = "アクセストークン"
13
- // 自分のユーザーIDを指定します。LINE Developersの「Your user ID」の部分です。
14
- var user_id = "ユーザーID"
15
12
 
16
- //★★スプレッドシートID★★
17
- var ss = SpreadsheetApp.openById("スプレッドシートID");
18
- //★★シート名★★
19
- var sheet = ss.getSheetByName("シート名");
20
13
 
21
- function doPost(e) {
22
- var event = JSON.parse(e.postData.contents).events[0];⇦⇦今回のエラーコードの部分
23
- var returnMessage = "曜日と時限(半角:1〜7)を指定してね!\n次の授業が知りたいときは、「次」と入力してね!";
24
- if(event.source.userId == user_id){
25
- //返信するためのトークン取得
26
- var reply_token= event.replyToken;
27
- if (typeof reply_token === 'undefined') {
28
- return;
29
- }
30
- var message = event.message.text;
31
- for(let i=3; i<=7; i ++) {
32
- var dateColumn = i;
33
- var day = sheet.getRange(1, i).getValue();
34
- if(message.includes(day)){
35
- for(let j=2; j<=26; j += 4) {
36
- var classNumRow = j;
37
- var classNum = sheet.getRange(j, 1).getValue();
38
- if(message.includes(classNum) && sheet.getRange(classNumRow, dateColumn).getValue()){
39
- var classInfos = getClassInfo(classNumRow, dateColumn);
40
- var returnMessage = classInfos.classDay + "曜" + classInfos.classNum + "限 (" + classInfos.startTime + "-" + classInfos.endTime +
41
- ")\n授業名:" + classInfos.className +
42
- "\nZoomID: " + classInfos.zoomID +
43
- "\nPass: " + classInfos.zoomPass;
44
- reply(reply_token, returnMessage);
45
- } else if(message.includes(classNum) && !sheet.getRange(classNumRow, dateColumn).getValue()) {
46
- var returnMessage = "授業はありません。"
47
- reply(reply_token, returnMessage);
48
- }
49
- }
50
- }
51
- }
52
-
53
- if(message.includes("次")){
54
- var classInfos = findNextClass();
55
- var returnMessage = classInfos.classDay + "曜" + classInfos.classNum + "限 (" + classInfos.startTime + "-" + classInfos.endTime +
56
- ")\n授業名:" + classInfos.className +
57
- "\nZoomID: " + classInfos.zoomID +
58
- "\nPass: " + classInfos.zoomPass;
59
- reply(reply_token, returnMessage);
60
- } else {reply(reply_token, returnMessage);}
61
- }
62
- }
63
-
64
- function reply(reply_token, returnMessage) {
65
- var reply_url = 'https://api.line.me/v2/bot/message/reply';
66
-
67
- // メッセージを返信
68
- UrlFetchApp.fetch(reply_url, {
69
- 'headers': {
70
- 'Content-Type': 'application/json; charset=UTF-8',
71
- 'Authorization': 'Bearer ' + access_token,
72
- },
73
- 'method': 'post',
74
- 'payload': JSON.stringify({
75
- 'replyToken': reply_token,
76
- 'messages': [{
77
- 'type': 'text',
78
- 'text': returnMessage,
79
- }],
80
- }),
81
- });
82
- return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
83
- }
84
-
85
-
86
- function push(text, zoom) {
87
- //メッセージを送信(push)する時に必要なurlでこれは、皆同じなので、修正する必要ありません。
88
- //この関数は全て基本コピペで大丈夫です。
89
- var url = "https://api.line.me/v2/bot/message/push";
90
- var headers = {
91
- "Content-Type" : "application/json; charset=UTF-8",
92
- 'Authorization': 'Bearer ' + access_token,
93
- };
94
-
95
- //toのところにメッセージを送信したいユーザーのIDを指定します。(toは最初の方で自分のIDを指定したので、linebotから自分に送信されることになります。)
96
- //textの部分は、送信されるメッセージが入ります。createMessageという関数で定義したメッセージがここに入ります。
97
- var postData = {
98
- "to" : user_id,
99
- "messages" : [
100
- {
101
- 'type':'text',
102
- 'text':text,
103
- },
104
- {
105
- 'type':'text',
106
- 'text':zoom,
107
- }
108
- ]
109
- };
110
-
111
- var options = {
112
- "method" : "post",
113
- "headers" : headers,
114
- "payload" : JSON.stringify(postData)
115
- };
116
-
117
- return UrlFetchApp.fetch(url, options);
118
- }
119
-
120
- function pushClassInfo() {
121
- var classInfos = findNextClass();
122
- var today = new Date();
123
- var quarterAfter = new Date();
124
- var day = today.getDay();
125
- var array = ["日", "月", "火", "水", "木", "金", "土"];
126
- quarterAfter.setMinutes(quarterAfter.getMinutes() + 15);
127
- var hhmmToday = Utilities.formatDate( today, 'Asia/Tokyo', 'HH:mm');
128
- var hhmmQuarter = Utilities.formatDate( quarterAfter, 'Asia/Tokyo', 'HH:mm');
129
- console.log(classInfos);
130
- console.log(classInfos.startTime <= hhmmQuarter); //授業が始まるのは、今から15分後より前、つまりもうすぐ授業が始まる。
131
- if(classInfos.classDay == array[day] && classInfos.startTime <= hhmmQuarter ){
132
- var message = "もうすぐ次の授業です。\n" + classInfos.classDay + "曜" + classInfos.classNum + "限 (" + classInfos.startTime + "-" + classInfos.endTime +
133
- ")\n授業名:" + classInfos.className +
134
- "\nZoomID:" + classInfos.zoomID +
135
- "\nPass:" + classInfos.zoomPass;
136
- console.log(message);
137
- push(message, classInfos.zoomPass);
138
- } else {console.log("not upcoming one ");}
139
- }
140
-
141
- function findNextClass() {
142
- var today = new Date();
143
- var hour = today.getHours();
144
- var minutes = today.getMinutes();
145
- console.log(today);
146
- for(let i=0; i <= 6; i++) {
147
- var day = (today.getDay() + i) % 7;
148
- var dateColumn = day + 3;
149
- var array = ['日','月','火','水','木', '金', '土'];
150
- console.log("曜日:" + array[day]);
151
-
152
- var searchHour = 0;
153
- if(day == today.getDay()){searchHour = hour;} else { searchHour = 6;}
154
- for(var j=0; j < 24-searchHour; j++) {
155
- console.log(searchHour + "時");
156
- for(let k=2; k <= 26; k+=4){
157
- var classNumRow = k;
158
- var startTimeRow = k + 1;
159
- //始業時間が設定されている場合、始業時間を取得
160
- if(sheet.getRange(startTimeRow, 1).getValue()) {
161
- var startTime = sheet.getRange(startTimeRow, 1).getValue();
162
- var startHour = startTime.getHours();
163
- var startMinutes = startTime.getMinutes();
164
- console.log("start hour: " + startHour);
165
- //検索した時、今と検索時間の日付と時間が一致していても、今の分が始業の分を超えている場合は情報を取得しない
166
- if(searchHour === startHour && today.getDay() === day && hour === searchHour && minutes > startMinutes){
167
- console.log("\nalready orver\n");
168
- //時間が一致し、授業が存在する場合、情報を取得
169
- } else if(searchHour === startHour && sheet.getRange(classNumRow, dateColumn).getValue()){
170
- var classInfos = getClassInfo(classNumRow, dateColumn);
171
- return classInfos;
172
- }
173
- }
174
- }
175
- searchHour += 1;
176
- }
177
- }
178
- }
179
-
180
- function getClassInfo(rowNum, dateColumn){
181
- var className = sheet.getRange(rowNum, dateColumn).getValue();
182
- var classDay = sheet.getRange(1, dateColumn).getValue();
183
- var classNum = sheet.getRange(rowNum, 1).getValue();
184
- var startTime = Utilities.formatDate( sheet.getRange(rowNum + 1, 1).getValue(), 'Asia/Tokyo', 'HH:mm');
185
- var endTime = Utilities.formatDate( sheet.getRange(rowNum + 3, 1).getValue(), 'Asia/Tokyo', 'HH:mm');
186
- var zoomID = sheet.getRange(rowNum + 1, dateColumn).getValue();
187
- var zoomPass = sheet.getRange(rowNum + 2, dateColumn).getValue();
188
- var classInfos = {className: className, classDay: classDay, classNum: classNum, startTime: startTime, endTime: endTime, zoomID: zoomID, zoomPass: zoomPass};
189
- return classInfos;
190
- }
191
-
192
- function setTrigger(){
193
- var today = new Date();
194
- var year = today.getFullYear();
195
- var month = today.getMonth();
196
- var date = today.getDate();
197
- for(let i=3; i <= 27; i+=4) {
198
- if(sheet.getRange(i, 1).getValue()){
199
- var classStart = sheet.getRange(i, 1).getValue();
200
- var startMinutes = classStart.getMinutes();
201
- classStart.setFullYear(year);
202
- classStart.setMonth(month);
203
- classStart.setDate(date);
204
- classStart.setMinutes(startMinutes - 10);
205
- console.log(classStart);
206
- ScriptApp.newTrigger('pushClassInfo').timeBased().at(classStart).create();
207
- }
208
- }
209
- }
210
-
211
- function delTrigger() {
212
- var triggers = ScriptApp.getProjectTriggers();
213
- for(let i=0; i < triggers.length; i++) {
214
- if (triggers[i].getHandlerFunction() == "pushClassInfo") {
215
- ScriptApp.deleteTrigger(triggers[i]);
216
- }
217
- }
218
- }
219
-
220
- ```
221
-
222
-
223
14
  ### 試したこと
224
15
  色々なページを見て調べてみましたが初心者のためわかりませんでした。
225
16
 

2

タイトルの変更

2021/10/10 09:52

投稿

Matsu105
Matsu105

スコア1

title CHANGED
@@ -1,1 +1,1 @@
1
- LineBotが返ってこない
1
+ LineBotのメッセージが返ってこない
body CHANGED
File without changes

1

カテゴリの変更

2021/10/06 05:57

投稿

Matsu105
Matsu105

スコア1

title CHANGED
File without changes
body CHANGED
@@ -223,4 +223,5 @@
223
223
  ### 試したこと
224
224
  色々なページを見て調べてみましたが初心者のためわかりませんでした。
225
225
 
226
- ### 補足情報(FW/ツールのバージョンなど)
226
+ ### 補足情報(FW/ツールのバージョンなど)
227
+ カテゴリの選択ミスは失礼いたしました。また、今回はGoogleAppScriptで作っています。