Slack WorkflowでBacklogチケット起票を自動化してみる


まずはじめに

Slack Workflowというものがあります。
定例作業をSlack上で自動化することが可能です。
ツールの連携とタスクの自動化

Webhookも使えます。
Webhook を使用した高度なワークフローを作成する

やりたいこと

現状はシステムのエラーをSlack通知するようにしています。

そのエラー通知の中から、Backlogに課題追加が必要なものを確認して、
起票する運用にしています。

以下手順で行っています。
1. Slackの内容を確認
2. チケット起票が必要なものか確認(ドキュメント見る or メンバーに質問)
3. Backlogにチケット起票する(Slackの通知をコピペ)

Slack→BacklogやGitHubを行き来するので、面倒だなという思いが。。。
ここらへんをSlack上で済ませたいと思い、Slack Workflow導入を考えました。

結論から

Slack Workflowからスプレッドシートを経由して、
GASでBacklog APIを呼ぶことにしました。

Slack Workflow -> google スプレッドシート -> Backlog

手順

  1. スプレッドシート作成

  2. Slack WorkFlowを作成

  3. 作成したシートにワークフローで受け取ったパラメータを追記します。

  4. GASでBacklog APIでチケット追加するスクリプトを用意

    function createTicket(apiKey, baseUrl, projectId, issueTypeId, summary, description) { 
        var date = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd'); 
    
        var payload = {
            "projectId" : projectId,
            "summary" : summary + " (" + date + ")",
            "issueTypeId" : issueTypeId,
            "priorityId" : '3',
            "description" : '```\n'+ description + '\n```'
        }
        var options = {
            "method" : "POST",
            "payload" : payload
        }
        var url = baseUrl + '/api/v2/issues'
            + '?' + 'apiKey=' + apiKey
            ;
        return JSON.parse(UrlFetchApp.fetch(url, options).getContentText("UTF-8"));
        }
        function main() {
        // 現在のスプレッドシートを取得
        var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
        //現在のシートを取得
        var sheet = spreadsheet.getActiveSheet();
    
        lastRow = sheet.getLastRow();
        //エラータイトル取得
        var thisErrTitle = sheet.getRange(lastRow, 1).getValue();
        //エラーメッセージ取得
        var thisErrMsg = sheet.getRange(lastRow, 2).getValue();
    
        var apiKey = 'apikey';
        var baseUrl = 'baseurl';
        //ここで登録したいプロジェクト指定
        var projectId = 'projectId';
        var issueTypeId = 'issueTypeId';
    
        //バックログに課題追加
        var json = createTicket(apiKey, baseUrl, projectId, issueTypeId, thisErrTitle, thisErrMsg);
    }
    
  5. GAS準備できたら、スプレッドシート更新で動くようにトリガを設定

これでWebhookURLを実行するだけでSlack Workflowが動きます

試してみる

curl -X POST -d \
    "{\"error_title\":\"$error_title", \"error_message\":\"$text\"}" \
    $slack_webhook_url

curl実行でSlackに通知がきます。


「チケット起票しますか」ボタン押下でチケットが起票されました!
(キャプチャは割愛で・・・)

最後に

そもそもSlackへ通知という所から見直そうという話も出ているので、この仕組み自体の寿命はとても短いかもしれません・・・
今後活かせるタイミングがきたら、また向き合いたいと思います。
おしまい。

参考

Slack | Webhook を使用した高度なワークフローを作成する
Backlog API | 課題の追加
Google Spreadsheetに新しい行が追加されたらChatworkに通知する