回答編集履歴

1

動作確認したソースを追記

2021/01/17 02:37

投稿

Twoshi
Twoshi

スコア354

test CHANGED
@@ -75,3 +75,525 @@
75
75
 
76
76
 
77
77
  ご参考になれば幸いです。
78
+
79
+
80
+
81
+ 追記
82
+
83
+ ---
84
+
85
+
86
+
87
+ 動作したソース
88
+
89
+ ```Javascript
90
+
91
+ // LINE developersのメッセージ送受信設定に記載のアクセストークン
92
+
93
+ var ACCESS_TOKEN = 'アクセストークン';
94
+
95
+
96
+
97
+ function getNumber() {
98
+
99
+ //1. 現在のスプレッドシートを取得
100
+
101
+ var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
102
+
103
+ //2. 現在のシートを取得
104
+
105
+ var sheet = spreadsheet.getActiveSheet();
106
+
107
+ //3. 指定するセルの範囲(A1)を取得
108
+
109
+ var range = sheet.getRange("A1");
110
+
111
+ //4. 値を取得する
112
+
113
+ var value = range.getValue();
114
+
115
+ //5. 発券済み枚数を増やす
116
+
117
+ range.setValue(value + 1);
118
+
119
+ //ログに出力
120
+
121
+ return value;
122
+
123
+ }
124
+
125
+
126
+
127
+
128
+
129
+ function getNumberB1() {
130
+
131
+ //1. 現在のスプレッドシートを取得
132
+
133
+ var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
134
+
135
+ //2. 現在のシートを取得
136
+
137
+ var sheet = spreadsheet.getActiveSheet();
138
+
139
+ //3. 指定するセルの範囲(B1)を取得
140
+
141
+ var range = sheet.getRange("B1");
142
+
143
+ //4. 値を取得する
144
+
145
+ var value = range.getValue();
146
+
147
+ //ログに出力
148
+
149
+ return value;
150
+
151
+ }
152
+
153
+
154
+
155
+
156
+
157
+ function incrementB1() {
158
+
159
+ //1. 現在のスプレッドシートを取得
160
+
161
+ var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
162
+
163
+ //2. 現在のシートを取得
164
+
165
+ var sheet = spreadsheet.getActiveSheet();
166
+
167
+ //3. 指定するセルの範囲(B1)を取得
168
+
169
+ var range = sheet.getRange("B1");
170
+
171
+ //4. 値を取得する
172
+
173
+ var value = range.getValue();
174
+
175
+ //5. 発券済み枚数を増やす
176
+
177
+ range.setValue(value + 1);
178
+
179
+ }
180
+
181
+
182
+
183
+ //A1セル値を1にB1セル値を0に初期化する関数
184
+
185
+ function initialA1B1() {
186
+
187
+ //1. 現在のスプレッドシートを取得
188
+
189
+ var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
190
+
191
+ //2. 現在のシートを取得
192
+
193
+ var sheet = spreadsheet.getActiveSheet();
194
+
195
+ //3A. 指定するセルの範囲(A1)を取得
196
+
197
+ var rangeA = sheet.getRange("A1");
198
+
199
+ //3B. 指定するセルの範囲(B1)を取得
200
+
201
+ var rangeB = sheet.getRange("B1");
202
+
203
+ // 4.初期化:セルに値をセットする場合はsetValueを使う
204
+
205
+ rangeA.setValue(1);
206
+
207
+ rangeB.setValue(0);
208
+
209
+ }
210
+
211
+
212
+
213
+ function test(e) {
214
+
215
+ //1. 現在のスプレッドシートを取得
216
+
217
+ var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
218
+
219
+ //2. 現在のシートを取得
220
+
221
+ var sheet = spreadsheet.getActiveSheet();
222
+
223
+ //3. 指定するセルの範囲(C1)を取得
224
+
225
+ var rangeA = sheet.getRange("C1");
226
+
227
+ //4.初期化:セルに値をセットする場合はsetValueを使う
228
+
229
+ rangeA.setValue(e);
230
+
231
+ }
232
+
233
+
234
+
235
+
236
+
237
+ function createMessages(userMessage) {
238
+
239
+ var messages = [{
240
+
241
+ 'type': 'text',
242
+
243
+ 'text': ''
244
+
245
+ }];
246
+
247
+
248
+
249
+ //現在日時を取得(HHmm形式) 例)08:30の場合、nowに0830が入る
250
+
251
+ var today = new Date();
252
+
253
+ var now = Utilities.formatDate(today, "Asia/Tokyo", "HHmm");
254
+
255
+ //日月火水木金土が0~6の数字で入る
256
+
257
+ var day = today.getDay();
258
+
259
+
260
+
261
+ //発券(患者)
262
+
263
+ if (userMessage === "発券") {
264
+
265
+ if(day === 0 || day === 6 && 1400 <= now ){//日曜または土曜午後の場合
266
+
267
+ messages[0].text = "土曜午後・日曜・祝日は休診日です";
268
+
269
+ }else if ((830 <= now && now < 1100) || (1400 <= now && now < 1630)) {
270
+
271
+ // フレックスメッセージ(予約券)
272
+
273
+ messages = [{
274
+
275
+ "type": "flex",
276
+
277
+ "altText": "どい耳鼻咽喉科 予約券",
278
+
279
+ "contents": {
280
+
281
+ "type": "bubble",
282
+
283
+ "body": {
284
+
285
+ "type": "box",
286
+
287
+ "layout": "vertical",
288
+
289
+ "contents": [
290
+
291
+ {
292
+
293
+ "type": "text",
294
+
295
+ "text": "どい耳鼻咽喉科 診察予約券",
296
+
297
+ "weight": "bold",
298
+
299
+ "color": "#1DB446",
300
+
301
+ "size": "sm",
302
+
303
+ "align": "center"
304
+
305
+ },
306
+
307
+ {
308
+
309
+ "type": "text",
310
+
311
+ "text": String(getNumber()),
312
+
313
+ "weight": "bold",
314
+
315
+ "size": "5xl",
316
+
317
+ "margin": "xxl",
318
+
319
+ "align": "center"
320
+
321
+ },
322
+
323
+ {
324
+
325
+ "type": "separator",
326
+
327
+ "margin": "xxl"
328
+
329
+ },
330
+
331
+ {
332
+
333
+ "type": "box",
334
+
335
+ "layout": "vertical",
336
+
337
+ "margin": "xxl",
338
+
339
+ "spacing": "sm",
340
+
341
+ "contents": [
342
+
343
+ {
344
+
345
+ "type": "box",
346
+
347
+ "layout": "horizontal",
348
+
349
+ "contents": [
350
+
351
+ {
352
+
353
+ "type": "text",
354
+
355
+ "text": "・こちらの画面を受付でご提示下さい",
356
+
357
+ "size": "sm",
358
+
359
+ "color": "#555555",
360
+
361
+ "flex": 0
362
+
363
+ }
364
+
365
+ ]
366
+
367
+ },
368
+
369
+ {
370
+
371
+ "type": "box",
372
+
373
+ "layout": "horizontal",
374
+
375
+ "contents": [
376
+
377
+ {
378
+
379
+ "type": "text",
380
+
381
+ "text": "・遅れた場合予約券は無効になります",
382
+
383
+ "size": "sm",
384
+
385
+ "color": "#555555",
386
+
387
+ "flex": 0
388
+
389
+ }
390
+
391
+ ]
392
+
393
+ },
394
+
395
+ {
396
+
397
+ "type": "box",
398
+
399
+ "layout": "horizontal",
400
+
401
+ "contents": [
402
+
403
+ {
404
+
405
+ "type": "text",
406
+
407
+ "text": "・こまめに【待ち状況】をご確認下さい",
408
+
409
+ "size": "sm",
410
+
411
+ "color": "#555555",
412
+
413
+ "flex": 0
414
+
415
+ }
416
+
417
+ ]
418
+
419
+ }
420
+
421
+ ]
422
+
423
+ },
424
+
425
+ {
426
+
427
+ "type": "separator",
428
+
429
+ "margin": "xxl"
430
+
431
+ },
432
+
433
+ {
434
+
435
+ "type": "box",
436
+
437
+ "layout": "horizontal",
438
+
439
+ "margin": "md",
440
+
441
+ "contents": [
442
+
443
+ {
444
+
445
+ "type": "text",
446
+
447
+ "text": "医院電話番号",
448
+
449
+ "size": "xs",
450
+
451
+ "color": "#aaaaaa",
452
+
453
+ "flex": 0
454
+
455
+ },
456
+
457
+ {
458
+
459
+ "type": "text",
460
+
461
+ "text": "047-496-1133",
462
+
463
+ "color": "#aaaaaa",
464
+
465
+ "size": "xs",
466
+
467
+ "align": "end"
468
+
469
+ }
470
+
471
+ ]
472
+
473
+ }
474
+
475
+ ]
476
+
477
+ },
478
+
479
+ "styles": {
480
+
481
+ "footer": {
482
+
483
+ "separator": true
484
+
485
+ }
486
+
487
+ }
488
+
489
+ }
490
+
491
+ }];
492
+
493
+ } else {
494
+
495
+ messages[0].text = "現在発券時間外です。受付時間は午前8:30~11:00 午後2:00~4:30です。";
496
+
497
+ }
498
+
499
+ } else if (userMessage === '今何番目?') {
500
+
501
+ messages[0].text = '現在'+ getNumberB1() + '番を診察中です。';
502
+
503
+ } else if (userMessage === '更新') {
504
+
505
+ incrementB1();
506
+
507
+ messages[0].text = getNumberB1()+ '番を診察中に更新しました。';
508
+
509
+ } else if (userMessage === "初期化") {
510
+
511
+ initialA1B1();
512
+
513
+ messages[0].text = "予約券番号・診察中番号の初期化しました。"
514
+
515
+ }
516
+
517
+ return messages
518
+
519
+ }
520
+
521
+
522
+
523
+ function recordLineUserId(userId) {
524
+
525
+ var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
526
+
527
+ // E列の空いているセルの行番号を取得する。(E1,E2が既に埋まっていたらnext=3となる)
528
+
529
+ var next = activeSheet.getRange("E:E").getValues().filter(String).length + 1;
530
+
531
+ Logger.log(next);
532
+
533
+ // E列の空いてるセルにユーザーIDを登録する
534
+
535
+ activeSheet.getRange(next, 5).setValue(userId);
536
+
537
+ };
538
+
539
+
540
+
541
+
542
+
543
+ function doPost(e) {
544
+
545
+ var event = JSON.parse(e.postData.contents).events[0];
546
+
547
+ // WebHookで受信した応答用Token
548
+
549
+ var replyToken = event.replyToken;
550
+
551
+ // ユーザーのメッセージを取得
552
+
553
+ var userMessage = event.message.text;
554
+
555
+ // 応答メッセージ用のAPI URL
556
+
557
+ var url = 'https://api.line.me/v2/bot/message/reply';
558
+
559
+ // 応答メッセージを作成
560
+
561
+ var messages = createMessages(userMessage)
562
+
563
+ // ユーザーIDを取得
564
+
565
+ var userId = event.source.userId;
566
+
567
+ // ユーザーIDを登録
568
+
569
+ recordLineUserId(userId);
570
+
571
+
572
+
573
+ UrlFetchApp.fetch(url, {
574
+
575
+ 'headers': {
576
+
577
+ 'Content-Type': 'application/json; charset=UTF-8',
578
+
579
+ 'Authorization': 'Bearer ' + ACCESS_TOKEN,
580
+
581
+ },
582
+
583
+ 'method': 'post',
584
+
585
+ 'payload': JSON.stringify({
586
+
587
+ 'replyToken': replyToken,
588
+
589
+ 'messages': messages,
590
+
591
+ }),
592
+
593
+ });
594
+
595
+ return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
596
+
597
+ }
598
+
599
+ ```