LoginSignup
0
0

More than 3 years have passed since last update.

軽微遅刻連絡をslackを使ってやりたい

Last updated at Posted at 2020-03-12

電車遅延やおなか痛いなど、軽い遅刻ってありますよね。でも、軽い遅刻なので人によって遅れる時間が入っていなかったり、
上司への連絡ステータス(実施したのか、不要なのか)が漏れたりしてモヤっとすることがあるのでどうしようかと思ってました。

こんな記事がありました。

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;
}

動作確認

slackから指定のスラッシュコマンドを投稿するとこのように表示されます。
slackダイアログ.PNG

送信を押下すると以下のメッセージが投稿されます。
投稿.PNG

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0