-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path【毎日】氏名_最終&レビュー(雛形).gs
More file actions
171 lines (155 loc) · 7.74 KB
/
【毎日】氏名_最終&レビュー(雛形).gs
File metadata and controls
171 lines (155 loc) · 7.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
function reviewEveryBotPost() {
// 最初の設定でやること
// 1行目→メンバー用の関数名に変更(例:tanakaBotPost)
// 12行目→コピーしてきたWebhookURLに変更
// 14行目→投稿したいch名に変更
// 16行目→参照したいシート名に変更
// 78、93行目→メンションつけたいメンバーIDに変更(ちゃんとこのような形になるように注意する 例 <@U010TR72L72> )
// 最後に「command + s」で保存しましょう!
// WebhookURLを追加
let postUrl = "https://hooks.slack.com/services/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";
// botを投入したいチャンネル名を追加
let postChannel = "#hoge_ch";
// 使用するシートを取得
let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('最終&レビュー(雛形)');
// 今日が何日かを計算
let today = new Date();
let day_count = today.getDate();
// 今日の日付によって処理を変える
if (day_count != 1) {
postToSlack_();
} else if (day_count == 1) {
newMonthStart_();
postToSlack_();
} else {
sendHttpPost_('不正な値が検出されました。管理者にご連絡ください。','目標達成bot',':perap');
}
// 残シフトのセルに数式を入れる為に、月の一番初めに行うメソッド
function newMonthStart_() {
// 各シフト残数を取得する関数をそれぞれの変数へ代入
let shiftSetForm = "=IFERROR(VLOOKUP(A2,'管理用'!A24:D46,2, false), \"-\")"
let reviewSetForm = "=IFERROR(VLOOKUP(A2,'管理用'!A24:D46,3, false), \"-\")"
let shiftgaiSetForm = "=IFERROR(VLOOKUP(A2,'管理用'!A24:D46,4, false), \"-\")"
// それぞれのセルに関数をセット
sheet.getRange(3,2,1,1).setValue(shiftSetForm);
sheet.getRange(3,3,1,1).setValue(reviewSetForm);
sheet.getRange(3,4,1,1).setValue(shiftgaiSetForm);
}
// 通知botの作成
function postToSlack_() {
//それぞれの値を取得
let name = sheet.getSheetValues(2, 1, 1, 1);
let last_shift_total = sheet.getSheetValues(3, 5, 1, 1);
let month_goal = sheet.getSheetValues(6, 4, 1, 1);
let month_now = sheet.getSheetValues(6, 3, 1, 1);
let month_goal_review = sheet.getSheetValues(7, 4, 1, 1);
let month_now_review = sheet.getSheetValues(7, 3, 1, 1);
var last_day_ave = sheet.getSheetValues(10, 2, 1, 1);
var last_day_ave_review = sheet.getSheetValues(10, 3, 1, 1);
let every_hour = sheet.getSheetValues(11, 2, 1, 1);
let every_hour_review = sheet.getSheetValues(11, 3, 1, 1);
let average_time = sheet.getSheetValues(12, 2, 1, 1);
let lank_score_ave = sheet.getSheetValues(18, 2, 1, 3);
let lank_every_ave = sheet.getSheetValues(19, 2, 1, 3);
let lank_review_ave = sheet.getSheetValues(19, 2, 1, 3);
// 通話件数ランキングチェック
if (month_now[0][0] == lank_score_ave[0][0]) {
var lank_score_alert = "(全国1位):tada:" ;
} else if (month_now[0][0] == lank_score_ave[0][1]) {
var lank_score_alert = "(全国2位):tada:" ;
} else if (month_now[0][0] == lank_score_ave[0][2]) {
var lank_score_alert = "(全国3位):tada:" ;
} else if (month_now[0][0] == lank_score_ave[0][3]) {
var lank_score_alert = "(全国4位):tada:" ;
} else if (month_now[0][0] == lank_score_ave[0][4]) {
var lank_score_alert = "(全国5位):tada:" ;
} else {
var lank_score_alert = ""
}
// 1時間あたり通話件数ランキングチェック
if (every_hour[0][0] == lank_every_ave[0][0]) {
var lank_every_alert = "(全国1位):tada:" ;
} else if (every_hour[0][0] == lank_every_ave[0][1]) {
var lank_every_alert = "(全国2位):tada:" ;
} else if (every_hour[0][0] == lank_every_ave[0][2]) {
var lank_every_alert = "(全国3位):tada:" ;
} else if (every_hour[0][0] == lank_every_ave[0][3]) {
var lank_every_alert = "(全国4位):tada:" ;
} else if (every_hour[0][0] == lank_every_ave[0][4]) {
var lank_every_alert = "(全国5位):tada:" ;
} else {
var lank_every_alert = ""
}
// 1時間あたりレビュー件数ランキングチェック
if (every_hour_review[0][0] == lank_review_ave[0][0]) {
var lank_review_alert = "(全国1位):tada:" ;
} else if (every_hour_review[0][0] == lank_review_ave[0][1]) {
var lank_review_alert = "(全国2位):tada:" ;
} else if (every_hour_review[0][0] == lank_review_ave[0][2]) {
var lank_review_alert = "(全国3位):tada:" ;
} else if (every_hour_review[0][0] == lank_review_ave[0][3]) {
var lank_review_alert = "(全国4位):tada:" ;
} else if (every_hour_review[0][0] == lank_review_ave[0][4]) {
var lank_review_alert = "(全国5位):tada:"
} else {
var lank_review_alert = ""
}
// 目標達成したら「clear!」表示させる
if (Math.sign(last_day_ave) == -1) {
var last_day_ave = "clear!";
} else {
true
};
if (Math.sign(last_day_ave_review) == -1) {
var last_day_ave_review = "clear!";
} else {
true
};
// シフト残数あり
if (last_shift_total > 0) {
sendHttpPost_('<@U010TR72L72>さん、こんにちは!毎日通知botです!\
\n現在の目標までの道のりです!頑張っていきましょう! \
\n\n *' + name +'* さん \
\n通話1時間あたり: *' + every_hour + '* 件 ' + lank_every_alert + ' \
\n通話平均時間 : *' + average_time + '* 分 \
\nレビ1時間あたり: *' + every_hour_review + '* 件 ' + lank_review_alert + ' \
\n1日(通話) *' + last_day_ave + '* 件、(レビュー) *' + last_day_ave_review + '* 件、以上取ればKPI達成見込み '
,'目標達成bot',':tuuti_bot:');
// シフト残数なし
} else if (last_shift_total == 0 ) {
sendHttpPost_('<@U010TR72L72>さん、こんにちは!毎日通知botです!\
\n今月のシフトはもうございません。お疲れさまでした!\
\n\n【最終結果】\
\n\n *' + name +'* さん \
\n月次目標(通話): *' + month_now + '* / *' + month_goal + '* 件 ' + lank_score_alert + ' \
\n月次目標(レビ): *' + month_now_review + '* / *' + month_goal_review + '* 件 \
\n通話1時間あたり: *' + every_hour + '* 件 ' + lank_every_alert + ' \
\n通話平均時間 : *' + average_time + '* 分 \
\nレビ1時間あたり: *' + every_hour_review + '* 件 ' + lank_review_alert + ' \
\nまた来月に向けて、頑張りましょう〜!','目標達成bot',':tuuti_bot:');
sheet.getRange(3,5,1,1).setValue('終わり');
// シフト残数なし→最終通達後は何もしない
} else if (last_shift_total == '終わり' ){
return
// シフト残数に異常値が検出された時のエラー文
} else {
sendHttpPost_('不正な値が検出されました。管理者にご連絡ください。','目標達成bot',':perap');
};
};
// ポストするための記述
function sendHttpPost_(message, username, icon) {
let jsonData = {
"channel" : postChannel,
"username" : username,
"icon_emoji": icon,
"text" : message
};
let payload = JSON.stringify(jsonData);
let options = {
"method" : "post",
"contentType" : "application/json",
"payload" : payload
};
UrlFetchApp.fetch(postUrl, options);
}
}