まずはじめに
Slack Workflowというものがあります。
定例作業をSlack上で自動化することが可能です。
ツールの連携とタスクの自動化
Webhookも使えます。
Webhook を使用した高度なワークフローを作成する
やりたいこと
現状はシステムのエラーをSlack通知するようにしています。
そのエラー通知の中から、Backlogに課題追加が必要なものを確認して、
起票する運用にしています。
以下手順で行っています。
- Slackの内容を確認
- チケット起票が必要なものか確認(ドキュメント見る or メンバーに質問)
- Backlogにチケット起票する(Slackの通知をコピペ)
Slack→BacklogやGitHubを行き来するので、面倒だなという思いが。。。
ここらへんをSlack上で済ませたいと思い、Slack Workflow導入を考えました。
結論から
Slack Workflowからスプレッドシートを経由して、
GASでBacklog APIを呼ぶことにしました。
Slack Workflow -> google スプレッドシート -> Backlog
手順
-
スプレッドシート作成
-
Slack WorkFlowを作成
```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);
}
```
- 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に通知する