GAS에서 Backlog의 만료 티켓을 정시에 자동으로 픽업 Chatwork에 통지

하고 싶은 일



제목대로입니다. (소위 Backlog 경찰)

가정 독자


  • GAS (GoogleAppsScript) 및 WebAPI에 대해 어느 정도 지식을 가지고 있어야합니다
  • Backlog 사용자임
  • ChatWork 사용자임

  • 처리 개요


  • 특정 Backlog 프로젝트의 만료된 콘텐츠를 BacklogAPI를 통해 검색합니다.
  • 매일 정시에 특정의 ChatWork 그룹에 취득한 정보를 통지합니다.



  • 참고로 한 기사와 메모



    GAS로 만들기 #Backlog 경찰 - 암흑 엔지니어 블로그
    스크립트의 베이스는 이쪽의 기사를 참고로 했습니다. 감사합니다.

    과제 목록 얻기 | Backlog Developer API | Nulab
    본가의 사이트. 세세한 API 사양이나 쿼리 문자열을 만드는 방법은 여기에서.

    Backlog API를 사용해 보았습니다 - Qiita
    BacklogAPI의 티켓 검색 API를 이용할 때 각 프로젝트 ID를 지정해야 합니다만, 그 찾는 방법은 여기에서 발견했습니다.


    【GAS】Backlog의 잔여 태스크(과제 티켓)를 GAS로 취득해 채팅 워크에 흘린다 - Qiita
    나중에 발견했는데, 여기에서 좋았을지도 모릅니다. 이번에는 스프레드 시트에 전기가 필요 없었기 때문에 일단 (땀)

    스크립트



    부적절한 경우 부드럽게 안내하십시오
    function BacklogPolice() {
      var response = fetchBacklogIssues();
      console.log(response.length);
      postChatwork(JSON.parse(response));
    }
    
    var backlogNamespace = 'XXX';//お使いのBacklogのネームスペースを入れてください
    var backlogUrl = 'https://' + backlogNamespace + '.backlog.jp/';
    
    function fetchBacklogIssues() {
      var baseUrl = backlogUrl + 'api/v2/issues';
      var apiKey = 'XXXXXX'//BacklogのAPIキーを入れて下さい
      // 取得対象のプロジェクトIDのリストを指定
      var projectIds = [X];//対象のプロジェクトIDを入れて下さい
      var statusIds = [0, 1, 2, 3];
      var sysdate = new Date();
      sysdate.setDate(sysdate.getDate() - 1);
      var params = {
        'apiKey': apiKey,
        'dueDateUntil': formatDate(sysdate)
      };
      for (var i = 0; i < projectIds.length; i++) {
        params['projectId[' + i + ']'] = projectIds[i];
      }
      for (var i = 0; i < statusIds.length; i++) {
        params['statusId[' + i + ']'] = statusIds[i];
      }  
      var paramString = '';
      for (var key in params) {
        if (0 < paramString.length) {
          paramString += '&';
        }
        paramString += key + '=' + params[key];
      }
    //  paramString += '&sort=assignee&dueDate&order=true';//期限日順
      paramString += '&sort=assignee';//担当者順
    
      return UrlFetchApp.fetch(baseUrl + '?' + paramString);
    }
    
    function postChatwork(issues) {
      if (issues.length <= 0) {
        return;
      }
      console.log(issues.length);
      var token = 'XXXXXXXXXXXX'; // ここにトークンを入力してください
      var roomId = 'XXXXXXXXXX'; // ここに投稿したい部屋のIDを入力してください
      var subject = 'Backlogのタスクが期限切れになっています!速やかにタスクを処理するか、期限日を調整してください。'//この辺はご自由に
      var body  = '[info][title]' + subject + '[/title]' + createPostMessage(issues) + '[/info]';
      var payload = {
        'body': body
      }
      var headers = {
        'X-ChatWorkToken': token
      }
      var options = {
        'method' : 'POST',
        'payload' : payload,
        'headers' : headers
      }
      var url = 'https://api.chatwork.com/v2/rooms/' + roomId + '/messages';
      UrlFetchApp.fetch(url, options);
    }
    
    
    function createPostMessage(issues) {
      var message = '';
      for (var i = 0; i < issues.length; i++) {
        var issue = issues[i];
        message += formatDate(new Date(issue.dueDate)) + ', ';
        message += issue.assignee.name + ', ';
        message += '[' + issue.status.name + '], ';
        message += issue.summary+ ', ';
        message += backlogUrl + 'view/' + issue.issueKey   + '\n[hr]\n';
      }
      return message;
    }
    
    function formatDate(date) {
      var format = 'YYYY-MM-DD';
      format = format.replace(/YYYY/g, date.getFullYear());
      format = format.replace(/MM/g, ('0' + (date.getMonth() + 1)).slice(-2));
      format = format.replace(/DD/g, ('0' + date.getDate()).slice(-2));
      return format;
    }
    

    GAS 트리거 설정(스케줄 설정)



    GAS에서 QiitaOrganization 회원의 새 소식을 자동으로 채워 Chatwork에 알리기 - Qiita
    에 쓴 절차와 거의 같습니다. 이번은 매일 아침 6~7시경에 넣었습니다.

    마지막으로



    역시 GAS는 편리하네요!

    좋은 웹페이지 즐겨찾기