質問編集履歴

3

2021/10/10 09:53

投稿

Matsu105
Matsu105

スコア1

test CHANGED
File without changes
test CHANGED
@@ -20,424 +20,6 @@
20
20
 
21
21
  ### 該当のソースコード
22
22
 
23
- ```var access_token = "アクセストークン"
24
-
25
- // 自分のユーザーIDを指定します。LINE Developersの「Your user ID」の部分です。
26
-
27
- var user_id = "ユーザーID"
28
-
29
-
30
-
31
- //★★スプレッドシートID★★
32
-
33
- var ss = SpreadsheetApp.openById("スプレッドシートID");
34
-
35
- //★★シート名★★
36
-
37
- var sheet = ss.getSheetByName("シート名");
38
-
39
-
40
-
41
- function doPost(e) {
42
-
43
- var event = JSON.parse(e.postData.contents).events[0];⇦⇦今回のエラーコードの部分
44
-
45
- var returnMessage = "曜日と時限(半角:1〜7)を指定してね!\n次の授業が知りたいときは、「次」と入力してね!";
46
-
47
- if(event.source.userId == user_id){
48
-
49
- //返信するためのトークン取得
50
-
51
- var reply_token= event.replyToken;
52
-
53
- if (typeof reply_token === 'undefined') {
54
-
55
- return;
56
-
57
- }
58
-
59
- var message = event.message.text;
60
-
61
- for(let i=3; i<=7; i ++) {
62
-
63
- var dateColumn = i;
64
-
65
- var day = sheet.getRange(1, i).getValue();
66
-
67
- if(message.includes(day)){
68
-
69
- for(let j=2; j<=26; j += 4) {
70
-
71
- var classNumRow = j;
72
-
73
- var classNum = sheet.getRange(j, 1).getValue();
74
-
75
- if(message.includes(classNum) && sheet.getRange(classNumRow, dateColumn).getValue()){
76
-
77
- var classInfos = getClassInfo(classNumRow, dateColumn);
78
-
79
- var returnMessage = classInfos.classDay + "曜" + classInfos.classNum + "限 (" + classInfos.startTime + "-" + classInfos.endTime +
80
-
81
- ")\n授業名:" + classInfos.className +
82
-
83
- "\nZoomID: " + classInfos.zoomID +
84
-
85
- "\nPass: " + classInfos.zoomPass;
86
-
87
- reply(reply_token, returnMessage);
88
-
89
- } else if(message.includes(classNum) && !sheet.getRange(classNumRow, dateColumn).getValue()) {
90
-
91
- var returnMessage = "授業はありません。"
92
-
93
- reply(reply_token, returnMessage);
94
-
95
- }
96
-
97
- }
98
-
99
- }
100
-
101
- }
102
-
103
-
104
-
105
- if(message.includes("次")){
106
-
107
- var classInfos = findNextClass();
108
-
109
- var returnMessage = classInfos.classDay + "曜" + classInfos.classNum + "限 (" + classInfos.startTime + "-" + classInfos.endTime +
110
-
111
- ")\n授業名:" + classInfos.className +
112
-
113
- "\nZoomID: " + classInfos.zoomID +
114
-
115
- "\nPass: " + classInfos.zoomPass;
116
-
117
- reply(reply_token, returnMessage);
118
-
119
- } else {reply(reply_token, returnMessage);}
120
-
121
- }
122
-
123
- }
124
-
125
-
126
-
127
- function reply(reply_token, returnMessage) {
128
-
129
- var reply_url = 'https://api.line.me/v2/bot/message/reply';
130
-
131
-
132
-
133
- // メッセージを返信
134
-
135
- UrlFetchApp.fetch(reply_url, {
136
-
137
- 'headers': {
138
-
139
- 'Content-Type': 'application/json; charset=UTF-8',
140
-
141
- 'Authorization': 'Bearer ' + access_token,
142
-
143
- },
144
-
145
- 'method': 'post',
146
-
147
- 'payload': JSON.stringify({
148
-
149
- 'replyToken': reply_token,
150
-
151
- 'messages': [{
152
-
153
- 'type': 'text',
154
-
155
- 'text': returnMessage,
156
-
157
- }],
158
-
159
- }),
160
-
161
- });
162
-
163
- return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
164
-
165
- }
166
-
167
-
168
-
169
-
170
-
171
- function push(text, zoom) {
172
-
173
- //メッセージを送信(push)する時に必要なurlでこれは、皆同じなので、修正する必要ありません。
174
-
175
- //この関数は全て基本コピペで大丈夫です。
176
-
177
- var url = "https://api.line.me/v2/bot/message/push";
178
-
179
- var headers = {
180
-
181
- "Content-Type" : "application/json; charset=UTF-8",
182
-
183
- 'Authorization': 'Bearer ' + access_token,
184
-
185
- };
186
-
187
-
188
-
189
- //toのところにメッセージを送信したいユーザーのIDを指定します。(toは最初の方で自分のIDを指定したので、linebotから自分に送信されることになります。)
190
-
191
- //textの部分は、送信されるメッセージが入ります。createMessageという関数で定義したメッセージがここに入ります。
192
-
193
- var postData = {
194
-
195
- "to" : user_id,
196
-
197
- "messages" : [
198
-
199
- {
200
-
201
- 'type':'text',
202
-
203
- 'text':text,
204
-
205
- },
206
-
207
- {
208
-
209
- 'type':'text',
210
-
211
- 'text':zoom,
212
-
213
- }
214
-
215
- ]
216
-
217
- };
218
-
219
-
220
-
221
- var options = {
222
-
223
- "method" : "post",
224
-
225
- "headers" : headers,
226
-
227
- "payload" : JSON.stringify(postData)
228
-
229
- };
230
-
231
-
232
-
233
- return UrlFetchApp.fetch(url, options);
234
-
235
- }
236
-
237
-
238
-
239
- function pushClassInfo() {
240
-
241
- var classInfos = findNextClass();
242
-
243
- var today = new Date();
244
-
245
- var quarterAfter = new Date();
246
-
247
- var day = today.getDay();
248
-
249
- var array = ["日", "月", "火", "水", "木", "金", "土"];
250
-
251
- quarterAfter.setMinutes(quarterAfter.getMinutes() + 15);
252
-
253
- var hhmmToday = Utilities.formatDate( today, 'Asia/Tokyo', 'HH:mm');
254
-
255
- var hhmmQuarter = Utilities.formatDate( quarterAfter, 'Asia/Tokyo', 'HH:mm');
256
-
257
- console.log(classInfos);
258
-
259
- console.log(classInfos.startTime <= hhmmQuarter); //授業が始まるのは、今から15分後より前、つまりもうすぐ授業が始まる。
260
-
261
- if(classInfos.classDay == array[day] && classInfos.startTime <= hhmmQuarter ){
262
-
263
- var message = "もうすぐ次の授業です。\n" + classInfos.classDay + "曜" + classInfos.classNum + "限 (" + classInfos.startTime + "-" + classInfos.endTime +
264
-
265
- ")\n授業名:" + classInfos.className +
266
-
267
- "\nZoomID:" + classInfos.zoomID +
268
-
269
- "\nPass:" + classInfos.zoomPass;
270
-
271
- console.log(message);
272
-
273
- push(message, classInfos.zoomPass);
274
-
275
- } else {console.log("not upcoming one ");}
276
-
277
- }
278
-
279
-
280
-
281
- function findNextClass() {
282
-
283
- var today = new Date();
284
-
285
- var hour = today.getHours();
286
-
287
- var minutes = today.getMinutes();
288
-
289
- console.log(today);
290
-
291
- for(let i=0; i <= 6; i++) {
292
-
293
- var day = (today.getDay() + i) % 7;
294
-
295
- var dateColumn = day + 3;
296
-
297
- var array = ['日','月','火','水','木', '金', '土'];
298
-
299
- console.log("曜日:" + array[day]);
300
-
301
-
302
-
303
- var searchHour = 0;
304
-
305
- if(day == today.getDay()){searchHour = hour;} else { searchHour = 6;}
306
-
307
- for(var j=0; j < 24-searchHour; j++) {
308
-
309
- console.log(searchHour + "時");
310
-
311
- for(let k=2; k <= 26; k+=4){
312
-
313
- var classNumRow = k;
314
-
315
- var startTimeRow = k + 1;
316
-
317
- //始業時間が設定されている場合、始業時間を取得
318
-
319
- if(sheet.getRange(startTimeRow, 1).getValue()) {
320
-
321
- var startTime = sheet.getRange(startTimeRow, 1).getValue();
322
-
323
- var startHour = startTime.getHours();
324
-
325
- var startMinutes = startTime.getMinutes();
326
-
327
- console.log("start hour: " + startHour);
328
-
329
- //検索した時、今と検索時間の日付と時間が一致していても、今の分が始業の分を超えている場合は情報を取得しない
330
-
331
- if(searchHour === startHour && today.getDay() === day && hour === searchHour && minutes > startMinutes){
332
-
333
- console.log("\nalready orver\n");
334
-
335
- //時間が一致し、授業が存在する場合、情報を取得
336
-
337
- } else if(searchHour === startHour && sheet.getRange(classNumRow, dateColumn).getValue()){
338
-
339
- var classInfos = getClassInfo(classNumRow, dateColumn);
340
-
341
- return classInfos;
342
-
343
- }
344
-
345
- }
346
-
347
- }
348
-
349
- searchHour += 1;
350
-
351
- }
352
-
353
- }
354
-
355
- }
356
-
357
-
358
-
359
- function getClassInfo(rowNum, dateColumn){
360
-
361
- var className = sheet.getRange(rowNum, dateColumn).getValue();
362
-
363
- var classDay = sheet.getRange(1, dateColumn).getValue();
364
-
365
- var classNum = sheet.getRange(rowNum, 1).getValue();
366
-
367
- var startTime = Utilities.formatDate( sheet.getRange(rowNum + 1, 1).getValue(), 'Asia/Tokyo', 'HH:mm');
368
-
369
- var endTime = Utilities.formatDate( sheet.getRange(rowNum + 3, 1).getValue(), 'Asia/Tokyo', 'HH:mm');
370
-
371
- var zoomID = sheet.getRange(rowNum + 1, dateColumn).getValue();
372
-
373
- var zoomPass = sheet.getRange(rowNum + 2, dateColumn).getValue();
374
-
375
- var classInfos = {className: className, classDay: classDay, classNum: classNum, startTime: startTime, endTime: endTime, zoomID: zoomID, zoomPass: zoomPass};
376
-
377
- return classInfos;
378
-
379
- }
380
-
381
-
382
-
383
- function setTrigger(){
384
-
385
- var today = new Date();
386
-
387
- var year = today.getFullYear();
388
-
389
- var month = today.getMonth();
390
-
391
- var date = today.getDate();
392
-
393
- for(let i=3; i <= 27; i+=4) {
394
-
395
- if(sheet.getRange(i, 1).getValue()){
396
-
397
- var classStart = sheet.getRange(i, 1).getValue();
398
-
399
- var startMinutes = classStart.getMinutes();
400
-
401
- classStart.setFullYear(year);
402
-
403
- classStart.setMonth(month);
404
-
405
- classStart.setDate(date);
406
-
407
- classStart.setMinutes(startMinutes - 10);
408
-
409
- console.log(classStart);
410
-
411
- ScriptApp.newTrigger('pushClassInfo').timeBased().at(classStart).create();
412
-
413
- }
414
-
415
- }
416
-
417
- }
418
-
419
-
420
-
421
- function delTrigger() {
422
-
423
- var triggers = ScriptApp.getProjectTriggers();
424
-
425
- for(let i=0; i < triggers.length; i++) {
426
-
427
- if (triggers[i].getHandlerFunction() == "pushClassInfo") {
428
-
429
- ScriptApp.deleteTrigger(triggers[i]);
430
-
431
- }
432
-
433
- }
434
-
435
- }
436
-
437
-
438
-
439
- ```
440
-
441
23
 
442
24
 
443
25
 

2

タイトルの変更

2021/10/10 09:52

投稿

Matsu105
Matsu105

スコア1

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

1

カテゴリの変更

2021/10/06 05:57

投稿

Matsu105
Matsu105

スコア1

test CHANGED
File without changes
test CHANGED
@@ -449,3 +449,5 @@
449
449
 
450
450
 
451
451
  ### 補足情報(FW/ツールのバージョンなど)
452
+
453
+ カテゴリの選択ミスは失礼いたしました。また、今回はGoogleAppScriptで作っています。