Help us understand the problem. What is going on with this article?

【分報】Togglで現在進行中のタスクをGASで取得してSlackに送信する

何をやるか

在宅勤務で何してるかわからないってならないために、Slackで分報を始めてみました。

どうせやるなら振り返りがやりやすいようにしたいのでTogglでレコーディングしながら
その内容をSlackに流すようにします。

Slackの分報についてはこちらを
社内にSlack上での分報を導入しないかと提案してみた

Togglはタイムトラッキングツールですが、概要はこちらを見てみてください。
時間管理が苦手な人にもおすすめ!「Toggl」の使い方まとめ。チームの状況把握にも活用!

概要

  1. Togglにて今やってる事を計測
  2. GASからスケジュール機能でToggl APIを利用して現在進行中のタスクを取得
  3. SpreadsheetのCurrentシートから前回取得したタスクのIDを比較する
  4. 前回と変わってたらSlackのincoming webhookで自分の分報チャンネルに投稿

準備

  1. TogglからAPIキーを取得
  2. Slackから自分の分報チャンネルのincoming webhookのURLを取得
  3. 新しくSpreadsheetを作成し Current という名前のシートを作成
  4. スクリプトエディタを開き、以下のソースコードを貼り、APIキーとWebHookを適時変更
  5. タイマーアイコンから適切な時間を選んでcurrentを実行

ソースコード

var Toggl = {
  BASIC_AUTH: '【ご自身のAPIキー】:api_token',

  get: function(path){
    var url = 'https://www.toggl.com/api/v8' + path;
    var options = {
      'method' : 'GET',
      'headers': {"Authorization" : "Basic " + Utilities.base64Encode(this.BASIC_AUTH)}
    }
    var response = UrlFetchApp.fetch(url, options);
    return JSON.parse(response);
  },
  getTimeEntries: function(){
    var path = '/time_entries'
    return this.get(path)
  },
  getTimeEntry: function(id) {
    var path = '/time_entries/' + id
    return this.get(path);
  },
  getTimeEntryCurrent: function(id) {
    var path = '/time_entries/current'
    return this.get(path);
  },
  getProject: function(id) {
    var path = '/projects/' + id
    return this.get(path);
  }
}

var Slack = {  
  post: function(message){
    var url = '【ご自身の分報チャンネルのincoming webhookのURL】';
    var options = {
      'method': 'POST',
      'contentType': 'application/json',
      'payload': JSON.stringify({'text': message})
    }
    var response = UrlFetchApp.fetch(url, options);
    return response;
  },
}

function current() {
  var currentSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Current");
  var current = Toggl.getTimeEntryCurrent()['data']
  if (current == null) {
    return
  }

  var currentId = currentSheet.getRange(2, 1).getValue()
  var projectName = current.pid ? Toggl.getProject(current.pid).data.name : "未分類"

  if (currentId != current['id']) {
    currentSheet.getRange(2, 1, 1, 2)
      .setValues([[current['id'], current['description']]])
    Slack.post(formatTextCurrent(projectName, current))
  }
}


function formatTextCurrent(projectName, timeEntry) {
  return '' + projectName + '】 *' + timeEntry.description + '*'
}

参考にしたQiita

時間管理ツール【Toggl】を【GAS】と連携して【Slack】に分報を通知してみた。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした