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
手順
スプレッドシート作成
-
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);
}
GAS準備できたら、スプレッドシート更新で動くようにトリガを設定
スプレッドシート作成
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);
}
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に通知する
Author And Source
この問題について(Slack WorkflowでBacklogチケット起票を自動化してみる), 我々は、より多くの情報をここで見つけました https://qiita.com/yuya-sakurai/items/fb7ec2a6efc23663e118著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .