13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-02-08

まずはじめに

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でチケット追加するスクリプトを用意
```javascript
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);
}
```
  1. 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に通知する

13
12
0

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
13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?