LoginSignup
691
577

More than 5 years have passed since last update.

SlackとGASを使って会社のお弁当発注を自動化した話

Last updated at Posted at 2017-04-30

 MAMORIO Meetup


 :thumbsup:)

FAX






: 

: 

: 



&: Fax




SlackGoogleAppScript使



mask_yobikake copy.png
()
order.gif



mask_remind copy.png
()
Screenshot 2017-04-26 00.01.48.png



mask_cancel copy.png
(_)
cancel.gif

&



call_phone.gif
( & FAX)
Screenshot 2017-04-26 00.05.23.png
 :thumbsup_tone1:

GAS(Google App Script)便

GoogleAppScript


GoogleAppScript(GAS)GmailSpreadSheetGoogleWebjavascript






()

GoogleAPI







API

1


&bot使)


Screenshot 2017-04-26 01.18.25.png


GASSlackIncomingWebhook
  function setCallTrigger() {
    for (var i = 0; i < Const.triggers.triggerDays.length; i++) {
      ScriptApp.newTrigger("triggerCall")
        .timeBased()
        .onWeekDay(Const.triggers.triggerDays[i])
        .atHour(Const.triggers.callTrigger.hour)
        .nearMinute(Const.triggers.callTrigger.minute)
        .create();
    }
  }
...
  function triggerCall() {
    loadSlackModule().send_slack('<!channel> 明日お弁当いる方〜?');
  }

注文、キャンセルについては以下のように誰かが「ノ」「_」とメンションするとGASにPOSTリクエストが飛ぶようにOutgoingWebHookを設定しておき
hook.png

GAS側で来たリクエストによって処理を振り分けてメンションした人のSpreadSheetに注文数を加算or減算します。完了したらSlackで応答を返します。

function doPost(e) {
  var request = parse_request(e);
  var commandar = loadCommander();

  #処理を振り分ける
  switch (true) {
    case /^obento/.test(request.text):
      commandar.command_order(request);
      break;
    case /^ノ/.test(request.text):
      commandar.command_add(request);
      break;
    case /^_/.test(request.text):
      commandar.command_cancel(request);
      break;
    default:
      no_command(request);
  }
...
}
...
  # 注文
  Commandar.command_add = function(request) {
    var date = loadDateUtils().parseDateTime(request.text);
    SpreadSheet.write_sheet(request.user, date, 1);
    var amount = loadSummerizer().summerizeOrder().orderAmount;
    var slack_result = "<@" + request.user + "> \n" + (date.getMonth() + 1) + "" + date.getDate() + "日分 注文で登録しました。 \n 現在合計" + amount + ""
    loadSlackModule().send_slack(slack_result)
  }

  # キャンセル
  Commandar.command_cancel = function(request) {
    var date = loadDateUtils().parseDateTime(request.text);
    SpreadSheet.write_sheet(request.user, date, -1);
    var amount = loadSummerizer().summerizeOrder().orderAmount;
    var slack_result = "<@" + request.user + "> \n" + (date.getMonth() + 1) + "" + date.getDate() + "日分 注文をキャンセルしました。 \n 現在合計" + amount + ""
    loadSlackModule().send_slack(slack_result)
  }

個数の確定&発注


Screenshot 2017-04-26 01.35.58.png
&


GASSpreadSheet


Faxefaxfax使APIGASGmailAPI使efaxfax
  Commandar.command_order = function (request) {
    // prod
    var fax_email_address = "xxxxxxxxx@efaxsend.com"
    var params = parse_order_text(request.text);
    var subject = "MAMORIO株式会社" + params.month + "" + params.day + "日分注文"
    var body = "いつもお世話になっております。MAMORIO株式会社です。" + params.month + "" + params.day + "日、お弁当" + params.amount + "個お願い致します。"

    // mailを送信
    MailApp.sendEmail(fax_email_address,
      subject,
      body);

    // 結果をslack通知
    var slack_result = "<@" + request.user + ">" + params.month + "" + params.day + "日分" + params.amount + "個注文しました。(FAXが送信できたらここに通知されます。)"
    loadSlackModule().send_slack(slack_result)
  }

送信完了通知

最後にfaxが送信出来たときの完了通知はGmailを送信した送信元にメールで通知されるのでSlackのemail Appを使って完了した旨をお弁当チャンネルに通知しています。

まとめ

このようにGASを使えば簡単に業務を効率化できるのでぜひ試してみてください!!

どなたかの参考になればと思い今回のソースをgistにしておきました。
(もしうちの会社でもfaxでお弁当を毎日注文しているよという稀有な方がいればよければ使ってください笑)

MAMORIO社に興味のある方はGEEK GARAGEのイベントでもwantedlyからでも遊びに来てください!お待ちしています :smiling_imp:

691
577
5

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

691
577