電車遅延やおなか痛いなど、軽い遅刻ってありますよね。でも、軽い遅刻なので人によって遅れる時間が入っていなかったり、
上司への連絡ステータス(実施したのか、不要なのか)が漏れたりしてモヤっとすることがあるのでどうしようかと思ってました。
#こんな記事がありました。
slackで「投稿ルールが守られない問題」を自作のスラッシュコマンドで解決する(設定編)
https://qiita.com/marogoma/items/e3003564c1b8b7b09e29
slackで「投稿ルールが守られない問題」を自作のスラッシュコマンドで解決する(GASコード解説編)
https://qiita.com/marogoma/items/93c1825454e03ee79523
これを使えばできそう
#ソース
index.html
var channelName = 'general'
var token = PropertiesService.getScriptProperties().getProperty('OAuth_token');
var slackApp = SlackApp.create(token);
function doPost(e) {
//GASのプロパティストアに登録したVerification Token
var verified_token = PropertiesService.getScriptProperties().getProperty('verified_token');
var verificationToken = e.parameter.token || JSON.parse(e.parameter.payload).token || null;
if (verificationToken !== verified_token) { // AppのVerification
console.log(e);
return ContentService.createTextOutput();
}
if (e.parameter.command === '/chikoku' && e.parameter.channel_name !== channelName) {
console.log(e);
var rtnjson = {"response_type": "ephemeral","text": "/bihinコマンドは備品管理チャンネルでのみ使用可能です"};
return ContentService.createTextOutput(JSON.stringify(rtnjson)).setMimeType(ContentService.MimeType.JSON);
} else if (e.parameter.command === '/chikoku') {
var createdDialog = createDialog(e);
var options = {
'method' : 'POST',
'payload' : createdDialog,
};
var slackUrl = "https://slack.com/api/dialog.open";
var response = UrlFetchApp.fetch(slackUrl, options);
return ContentService.createTextOutput();
} else {
var p = JSON.parse(e.parameter.payload)
var postChannel = p.channel.id;
var s = p.submission;
var free = s.freeText || "なし"
slackApp.postMessage(postChannel,
"連絡者by <@" + p.user.id + ">\n【理由】 :" + s.reason +"\n【遅刻時間】 :" + s.overtime +"\n【所属長への連絡】:" + s.contact
+"\n【備考】 :" + free,
{"username" : "勤怠連絡bot", "icon_emoji" : ":hammer_and_wrench:"});
return ContentService.createTextOutput();
}
}
function createDialog(e){
var trigger_id = e.parameter.trigger_id;
var token = PropertiesService.getScriptProperties().getProperty('OAuth_token');
var dialog = {
"token": token, // OAuth_token
"trigger_id": trigger_id,
"dialog": JSON.stringify({
"callback_id": "chikoku_dialog",
"title": "遅刻連絡フォーム",
"submit_label": "送信",
"elements": [
{
"type": "select",
"label": "理由",
"name": "reason",
"options": [
{
"label": "電車遅延",
"value": "電車遅延"
},
{
"label": "体調不良",
"value": "体調不良"
}]
},
{
"type": "select",
"label": "遅刻時間",
"name": "overtime",
"options": [
{
"label": "10分",
"value": "10分"
},
{
"label": "15分",
"value": "15分"
},
{
"label": "30分",
"value": "30分"
},
{
"label": "1時間",
"value": "1時間"
},
{
"label": "AM休",
"value": "AM休"
}]
},
{
"type": "select",
"label": "所属長への連絡",
"name": "contact",
"options": [
{
"label": "済み",
"value": "済み"
},
{
"label": "不要(電車遅延のため)",
"value": "不要(電車遅延のため)"
},
{
"label": "言えない理由により連絡不可",
"value": "言えない理由により連絡不可"
}]
},
{
"type": "textarea",
"label": "備考欄",
"name": "freeText",
"optional": true, //この指定がないとrequiredになる
"placeholder": "備考欄のみ入力必須ではありません"
},
]
})
};
return dialog;
}