javascript
1const doPost = (e) => {
2 const request = JSON.parse(e.postData.contents);
3 const type = request.events[0].source.type;
4 if (type !== 'user') return; // user でなかったら無視。(follow とか考えると面倒なので)
5 const contentsType = request.events[0].message.type;
6 if (contentsType !== 'text') return; // テキストメッセージでなかったら無視
7 const userId = request.events[0].source.userId;
8 const message = request.events[0].message.text;
9 const botMessage = handleBook(userId,message);
10 // 送信してください。
11}
12const fetchRow = (array,pos,needle) => {
13 const found = array.filter(e=>e[pos] === needle);
14 return found.length > 0 ? found[0] : found;
15}
16const isTimedOut = (target) => {
17 const timeout = 5;
18 const now = new Date();
19 const delta = now - target / (1000 * 60);
20 return delta > timeout;
21}
22const findStatusForUser = (dat,uid) => {
23 const row = fetchRow(dat,0,uid);
24 if(row.length < 0) {
25 return undefined;
26 }
27 if(isTimedOut(row[1])) {
28 return undefined;
29 }
30 return row.slice(2);
31}
32const updateStatusForUser = (sheet, dat, uid, arr) => {
33 const row = fetchRow(dat,0,uid);
34 if(row.length < 0) {
35 sheet.appendRow([uid,new Date(), ...arr]);
36 return;
37 }
38 const value = dat.map(e=> e[0] === uid ? [uid, new Date(), ...arr]:e);
39 sheet.getRange(1,1,value.length,value[0].length).setValues(value);
40}
41const getAnswer = (message, e) => { // この先適当に会話を膨らましてください
42 if(e === undefined) {
43 return ["どうしました?", "waitfor1", "none"];
44 }
45 if(message !== "天気") {
46 return [`${message}ってなんですか? わかりません`, "waitfor1", "none"]
47 }
48 if(e[0] === "waitfor2") {
49 return [`${message} の天気は晴れです`, "complete", "none"];
50 }
51 return ["どこの天気ですか?", "waitfor2", "none"];
52}
53const handleBook = (uid, message) => {
54 const sheetName = "シート1";
55 const sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
56 const dat = sheet.getDataRange().getValues();
57 const previous = findStatusForUser(dat,uid);
58 const ans = getAnswer(message, previous);
59 updateStatusForUser(sheet, dat, uid, ans.slice(1));
60 return ans[0];
61}
62
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。