質問編集履歴
17
文言の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -8,8 +8,7 @@
|
|
8
8
|
例えばSlackのPCやスマホアプリが入っていたら通知がくる仕組みのはずですが、
|
9
9
|
グーグルカレンダーで何か変更等があれば、通知できるのですが1点問題があります。
|
10
10
|
|
11
|
-
**・1回の変更だけで
|
11
|
+
**・1回の変更だけで2件通知が着てしまう**
|
12
|
-
い**
|
13
12
|
|
14
13
|
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-04-05/6cc9a85f-c76d-4595-8032-7200fdb1cdcd.png)
|
15
14
|
|
16
ソースコード最新を反映。
test
CHANGED
File without changes
|
test
CHANGED
@@ -24,7 +24,9 @@
|
|
24
24
|
### 該当のソースコード
|
25
25
|
|
26
26
|
```Google App Script
|
27
|
-
function monitorAllCalendars() {
|
27
|
+
function monitorAllCalendars(e) {
|
28
|
+
console.log(e.triggerUid);
|
29
|
+
|
28
30
|
try {
|
29
31
|
var calendarIds = getAllCalendarIds();
|
30
32
|
var lastUpdated = PropertiesService.getScriptProperties().getProperty('lastUpdated');
|
@@ -62,33 +64,31 @@
|
|
62
64
|
Logger.log('イベントのタイトルがありませんでした。');
|
63
65
|
}
|
64
66
|
|
65
|
-
var startTime = event.getStartTime() ? event.getStartTime()
|
67
|
+
var startTime = event.getStartTime() ? formatDate(event.getStartTime()) : '開始日時が設定されていません';
|
66
|
-
var endTime = event.getEndTime() ? event.getEndTime()
|
68
|
+
var endTime = event.getEndTime() ? formatDate(event.getEndTime()) : '終了日時が設定されていません';
|
67
69
|
var description = event.getDescription() || '詳細が設定されていません';
|
68
70
|
var location = event.getLocation() || '場所が設定されていません';
|
69
71
|
|
70
|
-
|
72
|
+
// イベントのIDが通知済みリストに含まれているかを確認
|
73
|
+
//if (!notifiedEvents.includes(eventId)) {
|
74
|
+
// 通知されていない場合のみ通知を送信
|
75
|
+
var eventDetails = {
|
76
|
+
title: title,
|
71
|
-
|
77
|
+
startTime: startTime,
|
72
|
-
|
78
|
+
endTime: endTime,
|
79
|
+
description: description,
|
80
|
+
location: location,
|
81
|
+
url: calendarLink,
|
73
|
-
|
82
|
+
triggerUid: "your_trigger_uid_here",
|
74
|
-
|
83
|
+
authMode: "your_auth_mode_here",
|
84
|
+
calendarId: calendarId
|
85
|
+
};
|
75
86
|
|
76
|
-
var eventDetails = {
|
77
|
-
title: title,
|
78
|
-
startTime: startTime,
|
79
|
-
endTime: endTime,
|
80
|
-
d
|
87
|
+
sendSlackNotification(eventDetails);
|
81
|
-
location: location,
|
82
|
-
url: calendarLink, // リンクを設定
|
83
|
-
triggerUid: "your_trigger_uid_here",
|
84
|
-
authMode: "your_auth_mode_here",
|
85
|
-
calendarId: calendarId
|
86
|
-
};
|
87
88
|
|
88
|
-
sendSlackNotification(eventDetails);
|
89
|
-
|
90
|
-
// 通知されたイベントを記録
|
89
|
+
// 通知されたイベントを記録
|
91
|
-
notifiedEvents.push(eventId);
|
90
|
+
notifiedEvents.push(eventId);
|
91
|
+
//}
|
92
92
|
}
|
93
93
|
}
|
94
94
|
}
|
@@ -112,6 +112,7 @@
|
|
112
112
|
return year + '/' + month + '/' + day + ' ' + hours + ':' + minutes;
|
113
113
|
}
|
114
114
|
|
115
|
+
|
115
116
|
function getNotifiedEvents() {
|
116
117
|
var notifiedEvents = PropertiesService.getScriptProperties().getProperty('notifiedEvents');
|
117
118
|
return notifiedEvents ? notifiedEvents.split(',') : [];
|
@@ -128,7 +129,7 @@
|
|
128
129
|
}
|
129
130
|
|
130
131
|
function sendSlackNotification(eventDetails) {
|
131
|
-
|
132
|
+
var webhookUrl = 'SlackのIncoming WebhookのWebhook URLを入力';
|
132
133
|
var message = {
|
133
134
|
text: 'Googleカレンダーのイベントが更新されました。\n' +
|
134
135
|
'タイトル: ' + eventDetails.title + '\n' +
|
15
文言の修正。
test
CHANGED
File without changes
|
test
CHANGED
@@ -166,6 +166,8 @@
|
|
166
166
|
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-04-08/b5f2fe41-8f85-4b05-bceb-793e3e9c73e1.png)
|
167
167
|
|
168
168
|
この状態でイベント更新があると複数の通知が着てしまいます。
|
169
|
+
この複数通知とは2通ずつ遅れながら3回ずつ送られます、その合計が6通の通知となります。
|
170
|
+
ゴールは1通だけでよいです。
|
169
171
|
|
170
172
|
### 補足
|
171
173
|
今回はAGSでコードを集約して書いています。
|
14
大幅に文言の修正。
test
CHANGED
File without changes
|
test
CHANGED
@@ -6,10 +6,10 @@
|
|
6
6
|
|
7
7
|
現在、上記のサイトを参考に「Incoming Webhook URL」を取得して特定のアカウントに紐づけて、
|
8
8
|
例えばSlackのPCやスマホアプリが入っていたら通知がくる仕組みのはずですが、
|
9
|
-
グーグルカレンダーで何か変更等があれば、通知できるのですが
|
9
|
+
グーグルカレンダーで何か変更等があれば、通知できるのですが1点問題があります。
|
10
10
|
|
11
|
-
**・1回の変更だけで
|
11
|
+
**・1回の変更だけで複数通知が着てしまう
|
12
|
-
|
12
|
+
い**
|
13
13
|
|
14
14
|
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-04-05/6cc9a85f-c76d-4595-8032-7200fdb1cdcd.png)
|
15
15
|
|
@@ -161,12 +161,11 @@
|
|
161
161
|
##### 上記の詳細・結果
|
162
162
|
コンソールデバックで調べても特にエラーなことはありませんでした。
|
163
163
|
またGoogle App Scriptを利用することでトリガーというものも設定しています。
|
164
|
-
そちらは今回3つの関数で制御していま
|
164
|
+
そちらは今回3つの関数で制御していましたが、1つトリガーに登録しています。
|
165
|
-
こちらセットで登録しないと通知が着ませんでした。
|
166
165
|
|
167
|
-
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-04-08/5
|
166
|
+
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-04-08/b5f2fe41-8f85-4b05-bceb-793e3e9c73e1.png)
|
168
167
|
|
169
|
-
|
168
|
+
この状態でイベント更新があると複数の通知が着てしまいます。
|
170
169
|
|
171
170
|
### 補足
|
172
171
|
今回はAGSでコードを集約して書いています。
|
@@ -177,35 +176,6 @@
|
|
177
176
|
var webhookUrl = 'SlackのIncoming WebhookのWebhook URLを入力';
|
178
177
|
```
|
179
178
|
|
180
|
-
また下記の開始時間と終了時間を定めておけば、イベント変更のあった通知が来ますが、
|
181
|
-
その場合も以下のように連続して通知が来てしまいます。
|
182
|
-
|
183
|
-
```
|
184
|
-
var startDateTime = lastUpdated ? new Date(lastUpdated) : new Date();
|
185
|
-
var endDateTime = new Date(); // 現在の日時を終了日時として使用
|
186
|
-
```
|
187
|
-
|
188
|
-
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-04-05/55f416e1-5891-4fe7-9a94-47ad412f3baf.png)
|
189
|
-
|
190
|
-
また「undefined」は、event.getStartTime()やevent.getEndTime()、event.getDescription()などのメソッドが、返す値がundefinedになっていることで
|
191
|
-
Google Calendarのイベントが正しく読み込まれていないのではと思っています。
|
192
|
-
|
193
|
-
### 追記
|
194
|
-
|
195
|
-
```
|
196
|
-
if (!notifiedEvents.includes(eventId) && lastUpdatedTime > new Date(lastUpdated)) {
|
197
|
-
```
|
198
|
-
上記の条件文を外すと、何かしらのイベントを変更すると「undefined」にならず正常に表示ができますが、
|
199
|
-
開始時間と終了時間の範囲内イベントの通知がすべてきてしまうので、とても悩ましいです。
|
200
|
-
|
201
|
-
|
202
|
-
```
|
203
|
-
if (!notifiedEvents.includes(eventId){
|
204
|
-
```
|
205
|
-
さらに上記の記述ですと、1通目2通目は「undefined」状態で送られて、3通目~6通目まで送られてきてその時は「undefined」ではなく正しい値をとってきています。
|
206
|
-
Googleカレンダーでイベント1回の変更で最大6通も通知されてしまいます。
|
207
|
-
|
208
|
-
|
209
179
|
急ぎの案件ではありますので
|
210
180
|
どなたかご教示いただけたらと思います。
|
211
181
|
|
13
ソースコードを修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -128,10 +128,7 @@
|
|
128
128
|
}
|
129
129
|
|
130
130
|
function sendSlackNotification(eventDetails) {
|
131
|
-
|
132
|
-
//var webhookUrl = 'https://hooks.slack.com/services/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'; //佐々木さんと河田のスレッドに流し込む
|
133
|
-
|
134
|
-
var webhookUrl = 'h
|
131
|
+
var webhookUrl = 'webhook入れます';
|
135
132
|
var message = {
|
136
133
|
text: 'Googleカレンダーのイベントが更新されました。\n' +
|
137
134
|
'タイトル: ' + eventDetails.title + '\n' +
|
12
ソースコード追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -28,52 +28,88 @@
|
|
28
28
|
try {
|
29
29
|
var calendarIds = getAllCalendarIds();
|
30
30
|
var lastUpdated = PropertiesService.getScriptProperties().getProperty('lastUpdated');
|
31
|
-
var currentTime = new Date()
|
31
|
+
var currentTime = new Date();
|
32
|
-
var notifiedEvents = getNotifiedEvents();
|
32
|
+
var notifiedEvents = getNotifiedEvents() || [];
|
33
|
+
|
33
|
-
|
34
|
+
var today = new Date();
|
35
|
+
today.setHours(0, 0, 0, 0);
|
36
|
+
|
37
|
+
var twoDateLater = new Date(today);
|
38
|
+
twoDateLater.setDate(today.getDate() + 7); // 1週間後の日付を取得
|
39
|
+
twoDateLater.setHours(0, 0, 0, 0); // 時刻をリセットして日付のみにする
|
40
|
+
|
34
41
|
for (var i = 0; i < calendarIds.length; i++) {
|
35
42
|
var calendarId = calendarIds[i];
|
36
|
-
var startDateTime =
|
43
|
+
var startDateTime = today;
|
37
|
-
var endDateTime =
|
44
|
+
var endDateTime = twoDateLater;
|
38
|
-
endDateTime.setDate(endDateTime.getDate() + 2); // 現在の時刻から2週間後の時刻を未来の時刻とする
|
39
45
|
|
40
46
|
var events = CalendarApp.getCalendarById(calendarId).getEvents(startDateTime, endDateTime);
|
41
|
-
|
47
|
+
|
42
48
|
if (events && events.length > 0) {
|
43
49
|
for (var j = 0; j < events.length; j++) {
|
44
50
|
var event = events[j];
|
45
51
|
var eventId = event.getId();
|
46
52
|
var lastUpdatedTime = event.getLastUpdated();
|
47
53
|
|
48
|
-
//
|
54
|
+
// イベントのリンクを生成
|
55
|
+
var calendarLink = 'https://calendar.google.com/calendar/render?action=VIEW&eid=' + eventId;
|
56
|
+
|
57
|
+
// すでに通知されたイベントでないか、最後の通知時間以降のイベントかを確認
|
49
|
-
if (lastUpdatedTime > new Date(lastUpdated)
|
58
|
+
if (lastUpdatedTime > new Date(lastUpdated)) {
|
59
|
+
var title = event.getTitle();
|
60
|
+
if (!title) {
|
61
|
+
title = 'タイトルが設定されていません';
|
62
|
+
Logger.log('イベントのタイトルがありませんでした。');
|
63
|
+
}
|
64
|
+
|
65
|
+
var startTime = event.getStartTime() ? event.getStartTime().toString() : '開始日時が設定されていません';
|
66
|
+
var endTime = event.getEndTime() ? event.getEndTime().toString() : '終了日時が設定されていません';
|
67
|
+
var description = event.getDescription() || '詳細が設定されていません';
|
68
|
+
var location = event.getLocation() || '場所が設定されていません';
|
69
|
+
|
70
|
+
Logger.log('イベントのタイトル: ' + title);
|
71
|
+
Logger.log('開始日時: ' + startTime);
|
72
|
+
Logger.log('終了日時: ' + endTime);
|
73
|
+
Logger.log('詳細: ' + description);
|
74
|
+
Logger.log('場所: ' + location);
|
75
|
+
|
50
76
|
var eventDetails = {
|
51
|
-
title:
|
77
|
+
title: title,
|
52
|
-
startTime:
|
78
|
+
startTime: startTime,
|
53
|
-
endTime: e
|
79
|
+
endTime: endTime,
|
54
|
-
description: e
|
80
|
+
description: description,
|
55
|
-
location:
|
81
|
+
location: location,
|
56
|
-
url: e
|
82
|
+
url: calendarLink, // リンクを設定
|
57
83
|
triggerUid: "your_trigger_uid_here",
|
58
84
|
authMode: "your_auth_mode_here",
|
59
85
|
calendarId: calendarId
|
60
86
|
};
|
87
|
+
|
61
88
|
sendSlackNotification(eventDetails);
|
62
|
-
|
89
|
+
|
63
90
|
// 通知されたイベントを記録
|
64
91
|
notifiedEvents.push(eventId);
|
65
92
|
}
|
66
93
|
}
|
67
94
|
}
|
68
95
|
}
|
69
|
-
|
70
|
-
|
96
|
+
|
71
|
-
PropertiesService.getScriptProperties().setProperty('lastUpdated', currentTime);
|
72
|
-
// 通知されたイベントを保存
|
97
|
+
// 通知されたイベントと最後の通知時間を保存
|
73
98
|
PropertiesService.getScriptProperties().setProperty('notifiedEvents', notifiedEvents.join(','));
|
99
|
+
PropertiesService.getScriptProperties().setProperty('lastUpdated', currentTime.toISOString());
|
74
100
|
} catch (error) {
|
75
101
|
Logger.log('エラーが発生しました: ' + error);
|
76
102
|
}
|
103
|
+
}
|
104
|
+
|
105
|
+
// 日付を指定された形式に整形する関数
|
106
|
+
function formatDate(date) {
|
107
|
+
var year = date.getFullYear();
|
108
|
+
var month = ('0' + (date.getMonth() + 1)).slice(-2);
|
109
|
+
var day = ('0' + date.getDate()).slice(-2);
|
110
|
+
var hours = ('0' + date.getHours()).slice(-2);
|
111
|
+
var minutes = ('0' + date.getMinutes()).slice(-2);
|
112
|
+
return year + '/' + month + '/' + day + ' ' + hours + ':' + minutes;
|
77
113
|
}
|
78
114
|
|
79
115
|
function getNotifiedEvents() {
|
@@ -92,10 +128,18 @@
|
|
92
128
|
}
|
93
129
|
|
94
130
|
function sendSlackNotification(eventDetails) {
|
131
|
+
|
132
|
+
//var webhookUrl = 'https://hooks.slack.com/services/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'; //佐々木さんと河田のスレッドに流し込む
|
133
|
+
|
95
|
-
var webhookUrl = '
|
134
|
+
var webhookUrl = 'https://hooks.slack.com/services/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';
|
96
|
-
|
97
135
|
var message = {
|
98
|
-
text: 'Googleカレンダーのイベントが更新されました。\n' +
|
136
|
+
text: 'Googleカレンダーのイベントが更新されました。\n' +
|
137
|
+
'タイトル: ' + eventDetails.title + '\n' +
|
138
|
+
'開始日時: ' + eventDetails.startTime + '\n' +
|
139
|
+
'終了日時: ' + eventDetails.endTime + '\n' +
|
140
|
+
'詳細: ' + eventDetails.description + '\n' +
|
141
|
+
'場所: ' + eventDetails.location + '\n' +
|
142
|
+
'URL: ' + eventDetails.url,
|
99
143
|
};
|
100
144
|
|
101
145
|
var options = {
|
@@ -107,6 +151,8 @@
|
|
107
151
|
UrlFetchApp.fetch(webhookUrl, options);
|
108
152
|
}
|
109
153
|
|
154
|
+
|
155
|
+
|
110
156
|
```
|
111
157
|
|
112
158
|
### 試したこと・調べたこと
|
11
文言追加。
test
CHANGED
File without changes
|
test
CHANGED
@@ -118,9 +118,10 @@
|
|
118
118
|
##### 上記の詳細・結果
|
119
119
|
コンソールデバックで調べても特にエラーなことはありませんでした。
|
120
120
|
またGoogle App Scriptを利用することでトリガーというものも設定しています。
|
121
|
-
そちらは今回3つの関数で制御していますので、それぞれ
|
121
|
+
そちらは今回3つの関数で制御していますので、それぞれ2つトリガーに登録しています。
|
122
|
+
こちらセットで登録しないと通知が着ませんでした。
|
122
123
|
|
123
|
-
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-04-05
|
124
|
+
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-04-08/53b25903-cdca-4dcc-af71-2ba90fd2ca26.png)
|
124
125
|
|
125
126
|
例えば2回通知があるという事はトリガーも同じものを2つ登録している等の確認も行いましたが、それもありませんでした。
|
126
127
|
|
10
補足の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -155,6 +155,13 @@
|
|
155
155
|
開始時間と終了時間の範囲内イベントの通知がすべてきてしまうので、とても悩ましいです。
|
156
156
|
|
157
157
|
|
158
|
+
```
|
159
|
+
if (!notifiedEvents.includes(eventId){
|
160
|
+
```
|
161
|
+
さらに上記の記述ですと、1通目2通目は「undefined」状態で送られて、3通目~6通目まで送られてきてその時は「undefined」ではなく正しい値をとってきています。
|
162
|
+
Googleカレンダーでイベント1回の変更で最大6通も通知されてしまいます。
|
163
|
+
|
164
|
+
|
158
165
|
急ぎの案件ではありますので
|
159
166
|
どなたかご教示いただけたらと思います。
|
160
167
|
|
9
追記文の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -146,6 +146,15 @@
|
|
146
146
|
また「undefined」は、event.getStartTime()やevent.getEndTime()、event.getDescription()などのメソッドが、返す値がundefinedになっていることで
|
147
147
|
Google Calendarのイベントが正しく読み込まれていないのではと思っています。
|
148
148
|
|
149
|
+
### 追記
|
150
|
+
|
151
|
+
```
|
152
|
+
if (!notifiedEvents.includes(eventId) && lastUpdatedTime > new Date(lastUpdated)) {
|
153
|
+
```
|
154
|
+
上記の条件文を外すと、何かしらのイベントを変更すると「undefined」にならず正常に表示ができますが、
|
155
|
+
開始時間と終了時間の範囲内イベントの通知がすべてきてしまうので、とても悩ましいです。
|
156
|
+
|
157
|
+
|
149
158
|
急ぎの案件ではありますので
|
150
159
|
どなたかご教示いただけたらと思います。
|
151
160
|
|
8
補足の追加。
test
CHANGED
File without changes
|
test
CHANGED
@@ -146,4 +146,6 @@
|
|
146
146
|
また「undefined」は、event.getStartTime()やevent.getEndTime()、event.getDescription()などのメソッドが、返す値がundefinedになっていることで
|
147
147
|
Google Calendarのイベントが正しく読み込まれていないのではと思っています。
|
148
148
|
|
149
|
+
急ぎの案件ではありますので
|
150
|
+
どなたかご教示いただけたらと思います。
|
149
151
|
|
7
文言の修正。
test
CHANGED
File without changes
|
test
CHANGED
@@ -142,3 +142,8 @@
|
|
142
142
|
```
|
143
143
|
|
144
144
|
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-04-05/55f416e1-5891-4fe7-9a94-47ad412f3baf.png)
|
145
|
+
|
146
|
+
また「undefined」は、event.getStartTime()やevent.getEndTime()、event.getDescription()などのメソッドが、返す値がundefinedになっていることで
|
147
|
+
Google Calendarのイベントが正しく読み込まれていないのではと思っています。
|
148
|
+
|
149
|
+
|
6
コードの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -92,7 +92,8 @@
|
|
92
92
|
}
|
93
93
|
|
94
94
|
function sendSlackNotification(eventDetails) {
|
95
|
-
|
95
|
+
var webhookUrl = 'SlackのIncoming WebhookのWebhook URLを入力';
|
96
|
+
|
96
97
|
var message = {
|
97
98
|
text: 'Googleカレンダーのイベントが更新されました。\n' + eventDetails.title + '\n開始日時: ' + eventDetails.startTime + '\n終了日時: ' + eventDetails.endTime + '\n詳細: ' + eventDetails.description + '\n場所: ' + eventDetails.location + '\nURL: ' + eventDetails.url,
|
98
99
|
};
|
5
コードを修正しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -29,12 +29,14 @@
|
|
29
29
|
var calendarIds = getAllCalendarIds();
|
30
30
|
var lastUpdated = PropertiesService.getScriptProperties().getProperty('lastUpdated');
|
31
31
|
var currentTime = new Date().toISOString();
|
32
|
+
var notifiedEvents = getNotifiedEvents();
|
32
33
|
|
33
34
|
for (var i = 0; i < calendarIds.length; i++) {
|
34
35
|
var calendarId = calendarIds[i];
|
35
|
-
var startDateTime = lastUpdated ? new Date(lastUpdated) : new Date();
|
36
|
-
var
|
36
|
+
var startDateTime = new Date(); // 現在の時刻をスタートにする
|
37
|
-
|
37
|
+
var endDateTime = new Date();
|
38
|
+
endDateTime.setDate(endDateTime.getDate() + 2); // 現在の時刻から2週間後の時刻を未来の時刻とする
|
39
|
+
|
38
40
|
var events = CalendarApp.getCalendarById(calendarId).getEvents(startDateTime, endDateTime);
|
39
41
|
|
40
42
|
if (events && events.length > 0) {
|
@@ -42,9 +44,9 @@
|
|
42
44
|
var event = events[j];
|
43
45
|
var eventId = event.getId();
|
44
46
|
var lastUpdatedTime = event.getLastUpdated();
|
45
|
-
|
47
|
+
|
46
48
|
// 前回の実行時以降に更新されたイベントのみ通知する
|
47
|
-
if (lastUpdatedTime > new Date(lastUpdated)) {
|
49
|
+
if (lastUpdatedTime > new Date(lastUpdated) && !notifiedEvents.includes(eventId)) {
|
48
50
|
var eventDetails = {
|
49
51
|
title: event.getTitle() || 'タイトルが設定されていません',
|
50
52
|
startTime: event.getStartTime() || '開始日時が設定されていません',
|
@@ -57,6 +59,9 @@
|
|
57
59
|
calendarId: calendarId
|
58
60
|
};
|
59
61
|
sendSlackNotification(eventDetails);
|
62
|
+
|
63
|
+
// 通知されたイベントを記録
|
64
|
+
notifiedEvents.push(eventId);
|
60
65
|
}
|
61
66
|
}
|
62
67
|
}
|
@@ -64,9 +69,16 @@
|
|
64
69
|
|
65
70
|
// 実行時刻を保存
|
66
71
|
PropertiesService.getScriptProperties().setProperty('lastUpdated', currentTime);
|
72
|
+
// 通知されたイベントを保存
|
73
|
+
PropertiesService.getScriptProperties().setProperty('notifiedEvents', notifiedEvents.join(','));
|
67
74
|
} catch (error) {
|
68
75
|
Logger.log('エラーが発生しました: ' + error);
|
69
76
|
}
|
77
|
+
}
|
78
|
+
|
79
|
+
function getNotifiedEvents() {
|
80
|
+
var notifiedEvents = PropertiesService.getScriptProperties().getProperty('notifiedEvents');
|
81
|
+
return notifiedEvents ? notifiedEvents.split(',') : [];
|
70
82
|
}
|
71
83
|
|
72
84
|
function getAllCalendarIds() {
|
@@ -80,7 +92,7 @@
|
|
80
92
|
}
|
81
93
|
|
82
94
|
function sendSlackNotification(eventDetails) {
|
83
|
-
var webhookUrl = 'SlackのIncoming WebhookのWebhook URLを入力
|
95
|
+
var webhookUrl = 'https://hooks.slack.com/services/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'; // SlackのIncoming WebhookのWebhook URLを入力
|
84
96
|
var message = {
|
85
97
|
text: 'Googleカレンダーのイベントが更新されました。\n' + eventDetails.title + '\n開始日時: ' + eventDetails.startTime + '\n終了日時: ' + eventDetails.endTime + '\n詳細: ' + eventDetails.description + '\n場所: ' + eventDetails.location + '\nURL: ' + eventDetails.url,
|
86
98
|
};
|
@@ -93,6 +105,7 @@
|
|
93
105
|
|
94
106
|
UrlFetchApp.fetch(webhookUrl, options);
|
95
107
|
}
|
108
|
+
|
96
109
|
```
|
97
110
|
|
98
111
|
### 試したこと・調べたこと
|
4
補足を追加しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -110,7 +110,6 @@
|
|
110
110
|
|
111
111
|
例えば2回通知があるという事はトリガーも同じものを2つ登録している等の確認も行いましたが、それもありませんでした。
|
112
112
|
|
113
|
-
|
114
113
|
### 補足
|
115
114
|
今回はAGSでコードを集約して書いています。
|
116
115
|
その中で以下の記述はWebhookのWebhook URLが入ります。
|
@@ -119,3 +118,13 @@
|
|
119
118
|
```
|
120
119
|
var webhookUrl = 'SlackのIncoming WebhookのWebhook URLを入力';
|
121
120
|
```
|
121
|
+
|
122
|
+
また下記の開始時間と終了時間を定めておけば、イベント変更のあった通知が来ますが、
|
123
|
+
その場合も以下のように連続して通知が来てしまいます。
|
124
|
+
|
125
|
+
```
|
126
|
+
var startDateTime = lastUpdated ? new Date(lastUpdated) : new Date();
|
127
|
+
var endDateTime = new Date(); // 現在の日時を終了日時として使用
|
128
|
+
```
|
129
|
+
|
130
|
+
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-04-05/55f416e1-5891-4fe7-9a94-47ad412f3baf.png)
|
3
文言の追加をしました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -14,6 +14,7 @@
|
|
14
14
|
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-04-05/6cc9a85f-c76d-4595-8032-7200fdb1cdcd.png)
|
15
15
|
|
16
16
|
通知はできていますが、挙動や表示のされ方がおかしいという事です。
|
17
|
+
こちらのご教示のほど宜しくお願い致します。
|
17
18
|
|
18
19
|
### エラーメッセージ
|
19
20
|
```error
|
2
テキスト周りを修正しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -8,14 +8,8 @@
|
|
8
8
|
例えばSlackのPCやスマホアプリが入っていたら通知がくる仕組みのはずですが、
|
9
9
|
グーグルカレンダーで何か変更等があれば、通知できるのですが2点問題があります。
|
10
10
|
|
11
|
-
・1回の変更だけで2回通知が来てしまう
|
11
|
+
**・1回の変更だけで2回通知が来てしまう
|
12
|
-
・Slackの内容は以下のように「undefined」と値が取れない
|
12
|
+
・Slackの内容は以下のように「undefined」と値が取れない**
|
13
|
-
undefined
|
14
|
-
開始日時: undefined
|
15
|
-
終了日時: undefined
|
16
|
-
詳細: undefined
|
17
|
-
場所: undefined
|
18
|
-
URL: undefined
|
19
13
|
|
20
14
|
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-04-05/6cc9a85f-c76d-4595-8032-7200fdb1cdcd.png)
|
21
15
|
|
1
画像の追加をしました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -16,6 +16,8 @@
|
|
16
16
|
詳細: undefined
|
17
17
|
場所: undefined
|
18
18
|
URL: undefined
|
19
|
+
|
20
|
+
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-04-05/6cc9a85f-c76d-4595-8032-7200fdb1cdcd.png)
|
19
21
|
|
20
22
|
通知はできていますが、挙動や表示のされ方がおかしいという事です。
|
21
23
|
|
@@ -109,7 +111,10 @@
|
|
109
111
|
またGoogle App Scriptを利用することでトリガーというものも設定しています。
|
110
112
|
そちらは今回3つの関数で制御していますので、それぞれ3つトリガーに登録しています。
|
111
113
|
|
114
|
+
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2024-04-05/e9bc0b72-e8e8-4816-95dd-0c9af6db5e9d.png)
|
115
|
+
|
112
116
|
例えば2回通知があるという事はトリガーも同じものを2つ登録している等の確認も行いましたが、それもありませんでした。
|
117
|
+
|
113
118
|
|
114
119
|
### 補足
|
115
120
|
今回はAGSでコードを集約して書いています。
|