if (d.getElementById(id)) return; break; case 6: js.src = 'https://connect.facebook.net/ja_JP/sdk.js#xfbml=1&version=v3.0&appId=253185231535573&autoLogAppEvents=1'; { break; var text = “今日はどうだったモグか?お疲れ様モグ!”; Google Apps Scriptで書かれた、Slack上で動く勤怠管理Bot。 Slackで下記の様につぶやくと、みやもとさんがGoogle Spreadsheetに勤怠を記録してくれます。 会話例. var text = “モグーのすきなものは焼き芋モグ!”; if(state == 2){state = “退勤”;} var daily = Utilities.formatDate(d,”JST”,”dd”); { var text = “お疲れさまモグ!今日の頑張りが必ず明日の為になってるモグよ!”; //ユーザー名 var app = SlackApp.create(token); var num = Math.floor(Math.random()*5+1 ); if ( post_text.indexOf(‘入国’) != -1) { slackワークフロー - オプション. 初心者向けに社内コミュニケーションツールSlack(スラック)の使い方について解説しています。Slackの始め方や登録方法が分からない方でもスムーズに進められるはずです。便利なツールなので、ぜひ使い方をマスターしましょう! フリーアドレス勤務の場合、着席位置をSlackで一報入れるルールにしていますが、万が一感染者が発生したときに誰と近い席に座っていたか辿るため、Googleスプレッドシートにも着席位置を記載しています。, そこで、着席情報の入力をSlack Workflow化し、Googleスプレッドシートに自動転記する仕組みを構築しました。, 弊社ではG Suiteを導入しており、セキュリティ制限によって外部からdoPost()、doGet()をコールすることができません。ですので、5分毎にSlackの履歴APIをGASからフェッチする設計で作っていきます。, 着席位置についてフリーテキストを受け付ける仕様だと辛いので、定型文に落とし込むため登録フォームを作ります。 }, //ボットからのコメント //日曜が0、土曜日が6。配列を使い曜日に変換する。 上記の運用を行うことでこれまで勤怠管理システムで行なっていた打刻をslackで代用できるようになります。 Hatena.BookmarkWidget.sort = "count"; //もし頭に0がついてしまう場合0は消す username: bot_name, } //時 var js, fjs = d.getElementsByTagName(s)[0]; フリーアドレスになってスプレッドシートで座席管理することになったので、Slackからスプレッドシートを更新できるようにしました, 2019年下半期ライトニングトーク大会とテックイノベーション賞の授賞式を開催しました!, 2019年上半期ライトニングトーク大会とテックイノベーション賞の授賞式を開催しました!, 【22新卒】11/24(火)自社開発のおもしろさを語るオンラインイベントを開催します!. error_text = “”; Hatena.BookmarkWidget.title = "エントリー"; break; case 5: var hours = (“0″+d.getHours()).slice(-2); }. GitHub 1, この手のやつはこれまでかなりめんどくさかったのですが、slackのワークフローとGASを組み合わせることでだいぶ楽に継続できるかんじになった感があります。, 現在、エンジニアとアドバイザ含めて3社と契約していますが、うち2社は完全リモートオンボーディングです。, 今の所それぞれ順調にオンボーディングが進んでいると思っていますが、リモートだからこそtimesの活用は積極的にしていくべきだなと思いました。, オフィスなら雑談を介して人となりを知ってもらうことができますが、リモートだと能動的に動いていかなければ知ってもらう機会は作れません。, timesにやっていることだけでなく人となりやバックグラウンドがわかるようなネタを書いていったり、他の人のtimesに遊びに行ったり、わからないなりにPRにコメントしたり、とにかくインプレッションを高めていく活動がオンボーディング過程では大事かなと思いました。, コードは当月データのみにしか対応していないので複数月跨いだ集計を行いたい場合はよしなに変えてください。↩, エンジニア / ex-CrowdWorks / 一般社団法人アジャイルチームを支える会 理事 / 認定スクラムマスター, yo-iidaさんは、はてなブログを使っています。あなたもはてなブログをはじめてみませんか?, Powered by Hatena Blog return (2); The following two tabs change content below. //スプレに記載 勤怠管理bot - みやもとさん. //Slackのkintaiチャンネルで入力したワードがこのイベントに入ってくる ここまで進めると、ボタンに作ったフォームへのリンクが登場します。 if(state == 0){isError = true;}, if(!isError) ブログを報告する, かなり時間が経ってしまったんだけど1/11-13にRegional Scrum G…, やりたいこと railsアプリケーションをbitbucketでprivateで管…. 今回のプログラムではSlack APIから取得できるタイムスタンプの処理に利用しています。, 特殊なことはあまりありませんが、下方向に日時、横方向に社員が並びます。 リソース -> ライブラリ, Add a libraryにMomentのライブラリID MHMchiX6c1bwSqGM1PZiW_PxhMjh3Sh48 を入力して追加します。, これで面倒な日付処理にMomentが利用できるようになります。 { //時間の取得(上の方で記載した関数) var date_time = checkDate(); var postdata = { var minutes = (“0″+d.getMinutes()).slice(-2); //日付を取得 switch(num) var text = “今日もいい日でありますようにモグ”; var day = dateT[d.getDay()]; 弊社では、入国/出国にしました。. うちのようなドベンチャーには、勤怠管理システムがない。 よくある1人100円から使える勤怠管理システムというものがあるが、弊社ではまだ導入はしていない。 fjs.parentNode.insertBefore(js, fjs); }. break; case 2: var state; //出勤か退勤か var bot_icon = “アイコン画像のパス”; はじめにこんにちは。TIG メディアユニットの久保です。 春の入門祭り #16 業務効率化・コミュニケーションツールSlack入門です。 コロナ影響により業界各社がテレワーク中心の業務体制を準備する中、コミュニケーションツールの需要が一気に高まってきました。 }; //書き込む //時間 if ( post_text.indexOf(‘出国’) != -1) { daily = Number(daily); } js = d.createElement(s); js.id = id; //Slackのアクセストークン var sheet = ss.getSheets()[0]; //最終列の取得 var result = getAttendance(postdata); error_text = “\n正しくスプレッドシートに記載できなかったみたいモグ”; GAS(Google App Script) + Slackで勤怠管理(簡易タイムカード)作ってみた. var id = lastRow; Hatena.BookmarkWidget.num = 8; break; case 2: }else{ break; case 3: return (1); break; case 4: throw new Error(“invalid token.”); userName: e.parameter.user_name, //ユーザー var post_text = e.parameter.text; var date_time; var text = “今日も子どもたちのみらいを想像して頑張ろうモグ”; var ss = SpreadsheetApp.openByUrl(‘スプレッドシートのURL’); var text = “モグモグモグ!モグー”; SLACK_ACCESS_TOKEN = “Slackの設定ページから取得する”; //出勤/退勤/時間をspledsheetに残す Hatena.BookmarkWidget.theme = "hatenadiary"; sheet.appendRow([id, name, entrytime, state]); | 現在のプロジェクトのトリガーを開きます。 時間主導型のタイマーを作成します。今回は5分おきにフェッチするようにしました。 以上で完成です。 1行目には小さくSlackのユーザーIDが埋めてあります。, 労力に対して得られるものがちょっと小さいですが、GMOグループでは日々千分の一の改善を積み重ねて大きな成果を作ることを良しとしているため、この規模の改善も積極的に行っております。, 本ブログで発信される情報は、各エンジニア個人の見解であり、弊社の公式見解ではありません。本ブログに掲載、引用等をしている商品またはサービス等の名称は、各社の商標または登録商標です。本ブログにおける弊社ならびに弊社グループ、またその役職員が発表する情報は、必ずしも公式発表および見解を表すものではなく、正確性、完全性、有用性、その他の事項について一切責任を負いかねます。発表する情報には注意を払っておりますが、公式発表、見解については、弊社WEBサイトおよびプレスリリースなどをご確認ください。GMOインターネットグループにおけるソーシャルメディア運用ポリシーについては次のページをご確認ください。, 1. var verify_token = “Outgoing WebHooksのTOKENをここにコピペ”; var state = e.state; 本ブログに掲載のあるソフトウェアのダウンロード・記事内容の実行等(以下「ソフトウェアのダウンロード等」)は自己責任でお願い致します。, 2. } おはようございます ← 現在時刻で出勤. //分 { //月を取得 var bot_name = “ボット名”; //時間を連結してテキストで渡す }else{ return app.postMessage(e.parameter.channel_id, message, { 日本最大級のクラウドソーシング「クラウドワークス」なら、【GAS】Googleスプレッドシートを用いたタイムカード機能の仕事を依頼できます。質の高い業務システム・ソフトウェアのプロが多数登録しており、納期・価格等の細かいニーズにも対応可能。 var d = new Date(); //今日の日付のデータを取得する(ddを使いシートの日付を取得) 本ブログに掲載のあるソフトウェアのダウンロード等を行う際には、各ソフトウェアの公式リファレンスを参照のもと、またはご利用者の判断でお願い致します。ソフトウェアのダウンロード等の結果、ご利用者に何らかの損失・損害が生じたといえども、当社ではその責任を負いかねます。, "https://slack.com/api/conversations.history?token=xoxp-00000000000-00000000000-000000000000-deadbeefdeadbeefdeadbeef&channel=". var entrytime = e.dt }); function doPost(e) { var ss = SpreadsheetApp.openByUrl(‘スプレッドシートのURL’); sheet.appendRow([id, name, entrytime, state]); SlackのCustom Integrations > Outgoing WebHooks を入れる, Outgoing WebHooksのIntegration Settingsで以下の設定をする, 反応する文字列を指定する / Trigger Word(s)の設定 (出勤 / 退勤). Hatena.BookmarkWidget.url = "s2works.net"; { var text = “おはようモグー!\n今日も1日頑張ろうモグ!”; break; case 5: //Outgoing WebHooksを利用して、投稿に反応させる if(state != 0) //勤怠システムに書き込む if(result != 1) var text = “お疲れモグー!\n今日も1日ご苦労さんモグ!\n明日もいい日にするモグよ!”; case 1: // データ入力 Tools -> Workflow Builder を開きます。, 連携するチャンネル名とショートカット名を入力します。ここで入力したshort nameが実際に表示される名前になります。, フォームは座席コードをリストから選択させたいので、Choose a question typeは「Select from a list」を選択してください。, Publishをクリックして有効化します。 1行目には小さくSlackのユーザーIDが埋めてあります。 GASトリガーの作業. function checkDate(){ }. タイムカードでお困りの方はとりあえずでよければログとして残せます。, Slackの#Kintaiチャンネルで”出勤”/”退勤”と入力すると、その入力した時間がGoogleSpreadシートに名前と時間と出勤/退勤というステータスが保存されます。 うちのようなドベンチャーには、勤怠管理システムがない。 state = 2; 弊社ではコロナ禍のソーシャルディスタンス対策として、フリーアドレスを導入いたしました。 case 1: 大した機能はなくて、正直ちゃんとしてないです。 Hatena.BookmarkWidget.load(); (function(d, s, id) { dateT = [“日”,”月”,”火”,”水”,”木”,”金”,”土”]; 送信するとこんなかんじになります。 ワークフローの結果を集計する. state: state var month = Utilities.formatDate(d,”JST”,”MM”); //曜日 よくある1人100円から使える勤怠管理システムというものがあるが、弊社ではまだ導入はしていない。, ということで、プライベートワークで、SlackとGASを使った「簡易タイムカードシステム」を作ってみた。 Hatena.BookmarkWidget.width = 0; var error_text = “”; //投稿の認証 var text = “ご苦労さんです。by中の人”; var text = “気を付けて帰ってモグね!家に着くまでが冒険だよ!”; if (verify_token != e.parameter.token) { }. }. }(document, 'script', 'facebook-jssdk')); SLACK_ACCESS_TOKEN = “Slackの設定ページから取得する”; var daily = Utilities.formatDate(d,”JST”,”dd”); var month = Utilities.formatDate(d,”JST”,”MM”); var hours = (“0″+d.getHours()).slice(-2); var minutes = (“0″+d.getMinutes()).slice(-2); var DateTime = month + “月” + daily + “日(” + day + “) ” + hours + “:” + minutes; var token = PropertiesService.getScriptProperties().getProperty(‘SLACK_ACCESS_TOKEN’); var verify_token = “Outgoing WebHooksのTOKENをここにコピペ”; var text = “お疲れモグー!\n今日も1日ご苦労さんモグ!\n明日もいい日にするモグよ!”; var text = “お疲れさまモグ!今日の頑張りが必ず明日の為になってるモグよ!”; error_text = “\n正しくスプレッドシートに記載できなかったみたいモグ”; var message = e.parameter.user_name + “、” + text + error_text; return app.postMessage(e.parameter.channel_id, message, {. switch(num) //出勤か退勤か return(DateTime); var message = e.parameter.user_name + “、” + text + error_text; state = 1; var isError; if(state == 1){state = “出勤”;} break; case 6: slackワークフロー. function getAttendance(e){ icon_url: bot_icon なお、フォームの選択肢に設定できる項目数が現在は最大20のようです。今回は座席が入りきらないのでフォームを島ごとに作成しています。, 冒頭に書いたように、doPost()でSlack Events APIから直接データを受け取ることができないため、時間トリガーでフェッチする関数を書いていきます。 var name = e.userName; break; var DateTime = month + “月” + daily + “日(” + day + “) ” + hours + “:” + minutes; 関数名は何でもよいですが、今回はfetchSlackHistory()関数としました。, このコードでは時刻処理のためにMomentライブラリを用いています。 dt: date_time, //時間 var token = PropertiesService.getScriptProperties().getProperty(‘SLACK_ACCESS_TOKEN’); var lastRow = sheet.getLastRow();

Kara ニコル 親日 8, 髭男 似てる 顔 26, Ultraman 感想 あにこ 7, 川村 那 月 Sweety 12, 弱虫ペダル 巻島 その後 36, Ae タイムライン そろえる 8, アルインコ エアロバイク 改造 20, 東京ガス 生活まわり駆けつけサービス 評判 5, Yoshiki 弟 現在 6, りんご タトゥー 意味 14, 2005 ドラフト なんj 6, 首の 傷 を 隠す スカーフ 巻き方 7, 悲伝 明治座 千秋楽 違い 32, 奈良西警察署 免許更新 時間 13, 幻想 幻影 違い 5, 接続詞 ゲーム 国語 43, 八極拳 道場 神奈川 30, 恋つづ 生視聴会 Youtube 6, ベンチ 用 クッション 作り方 4, いつも 心に 音楽を 英語 9, バイク マフラー交換 排気漏れ 53, カミュ ぬすむ おすすめモンスター 18, 目標 類語 連想 4, 吉田麻也 下柳 なんj 4, 映画 キングダム 韓国 反応 7,