まずはじめに
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でチケット追加するスクリプトを用意
functioncreateTicket(apiKey,baseUrl,projectId,issueTypeId,summary,description){vardate=Utilities.formatDate(newDate(),'Asia/Tokyo','yyyy/MM/dd');varpayload={"projectId":projectId,"summary":summary+" ("+date+")","issueTypeId":issueTypeId,"priorityId":'3',"description":'```\n'+description+'\n```'}varoptions={"method":"POST","payload":payload}varurl=baseUrl+'/api/v2/issues'+'?'+'apiKey='+apiKey;returnJSON.parse(UrlFetchApp.fetch(url,options).getContentText("UTF-8"));}functionmain(){// 現在のスプレッドシートを取得varspreadsheet=SpreadsheetApp.getActiveSpreadsheet();//現在のシートを取得varsheet=spreadsheet.getActiveSheet();lastRow=sheet.getLastRow();//エラータイトル取得varthisErrTitle=sheet.getRange(lastRow,1).getValue();//エラーメッセージ取得varthisErrMsg=sheet.getRange(lastRow,2).getValue();varapiKey='apikey';varbaseUrl='baseurl';//ここで登録したいプロジェクト指定varprojectId='projectId';varissueTypeId='issueTypeId';//バックログに課題追加varjson=createTicket(apiKey,baseUrl,projectId,issueTypeId,thisErrTitle,thisErrMsg);}
GAS準備できたら、スプレッドシート更新で動くようにトリガを設定
これでWebhookURLを実行するだけでSlack Workflowが動きます
試してみる
curl -X POST -d\"{\"error_title\":\"$error_title", \"error_message\":\"$text\"}" \$slack_webhook_urlcurl実行でSlackに通知がきます。

「チケット起票しますか」ボタン押下でチケットが起票されました!
(キャプチャは割愛で・・・)
最後に
そもそもSlackへ通知という所から見直そうという話も出ているので、この仕組み自体の寿命はとても短いかもしれません・・・
今後活かせるタイミングがきたら、また向き合いたいと思います。
おしまい。
参考
Slack | Webhook を使用した高度なワークフローを作成する
Backlog API | 課題の追加
Google Spreadsheetに新しい行が追加されたらChatworkに通知する

