(本記事は Yappli Advent Calendar 2023 (1枚目) の5日目の記事です!🎄📅)
こんにちは!データサイエンティストの山本( @__Y4M4MOTO__ )です。
最近、データサイエンスチーム(以下、 DS チーム)では社内からの依頼(集計、技術相談 etc. )を Jira でチケット管理をするようにしました。チケット運用を始めるにあたってネックになったのが「起票するの、面倒くさくない…?」という点です。
その点を解決するため、 Slack のメッセージにリアクションを押すとその内容で Jira のチケットを作成してくれる Zapier ワークフローを作成しました。これにより、起票は頂いた依頼( Slack メッセージ)にリアクションを押すだけで良くなり、面倒臭さを解消することができました。
この記事では作成した起票ワークフローについて紹介します。ワークフローでは、 Azure OpenAI Service を使ってメッセージ内容からチケットタイトルを生成させるようにしているので、こちらも併せてご紹介します!
動作例
こんな感じの依頼に
( create-data-team-ticket )というリアクションを押すと…

こんな感じで Jira に起票してくれます。

また、 DS チームの Slack チャンネルに次のような通知を送ります。

全体像
ワークフローの全体像は次のとおりです。

動作の流れとしては次のとおりです。
- Slack メッセージに特定のリアクションが押されたら Zapier ワークフローが開始
- Slack メッセージの内容からチケットタイトルを生成するよう Azure OpenAI Service へリクエスト
- Azure OpenAI Service からチケットタイトルを取得
- Jira へ起票
実装
今回のワークフローを作成するにあたって行ったことを以下に記します。
チケット作成用カスタム絵文字の登録
チケット起票リアクションのためのカスタム絵文字を Slack へ登録しました。今回は次の絵文字を create-data-team-ticket という名前で登録しました。

Azure OpenAI Service へのモデルのデプロイ
チケットタイトルを生成してもらうため、言語モデルを Azure OpenAI Service へデプロイしました。
後でZapier からこのモデルを API 経由で利用するので、リクエストに必要な情報(エンドポイント、キーなど)を控えておきます。

Zapier ワークフローの実装
Zapier ワークフローの実装は次のように実装しました。

Step 1 では、 Zapier ワークフローを開始させるトリガーを設定しています。今回はトリガーを「 Slack で create-data-team-ticket リアクションが押されたら」と設定しました。
Step 2 では、チケットタイトルを生成するためのプロンプトを作成しています。今回は Python を用いて次のようなコードで作成しました。
import json inquiry = input_data["inquiry"] messages = [ { "role": "system", "content": "You are an AI assistant that helps people find information." }, { "role": "user", "content": f"次の問い合わせをJIRAのタスクに起票したいです。問い合わせ内容を要約してください。要約は50文字未満にしてください。改行はしないでください:{inquiry}" } ] messages = json.dumps( messages, ensure_ascii=False ) return {"messages": messages}
なお、 Input Data で Step 1 でリアクションが押された Slack メッセージの本文を inquiry という変数に格納するように設定しています。これにより、 Python コード内で Slack メッセージの本文を inquiry を通して利用できるようになります。

Step 3 では Azure OpenAI Service にリクエストを投げています。ここで、モデルのデプロイ時に控えたエンドポイントやキー等、 Step 2 で作成したプロンプトを利用します。

Step 4 では Jira へチケットを作成しています。「要約」フィールドに Step 3 で得られたチケットタイトル、「説明」フィールドにリアクションを押した Slack メッセージの情報を設定しています。


Step 5 では起票した旨を DS チームの Slack チャンネルへ通知しています。
なお、通知先としてリアクションを押した人の DM も検討しましたが、チケットの起票状況は DS チーム内でリアルタイムに sync されていたほうが良いと考え、今回は DS チームの Slack チャンネルにしました。
今後の改善点
今回はチケットタイトル生成に次のプロンプトを使用しました。
次の問い合わせをJIRAのタスクに起票したいです。問い合わせ内容を要約してください。要約は50文字未満にしてください。改行はしないでください:<Slack メッセージの本文>
しかし、このプロンプトだと稀に指示(50文字未満、改行禁止)に従ってくれなかったり、そもそもチケットタイトルとしては微妙な要約が行われてしまったりします。
また、実際にチケット運用を始めてみた結果、チケットタイトルの先頭に【】でキーワードを置いておくと「何についてのチケットか?」が一目で把握できて良いということも分かりました(例: 「【開発本部】Block UI 利用率推移の集計依頼」)
今後、これらの課題・改善点を踏まえてプロンプトの調整や Function Calliing の利用などを検討していければと思っています。
まとめ
今回は Slack でリアクションを押すと Jira へ起票してくれる Zapier ワークフローおよび Azure OpenAI Service を用いたチケットタイトル生成について紹介しました。
チケットタイトルに依頼内容の要約を設定できたことで、ボードを見た際に「このチケット、何だっけ?」がすぐ分かるようにできました。このことは、チケット運用のやりやすさに大きく貢献していると感じています。
この記事が、これからチケット運用を始める方、すでに始めているが運用に課題を感じている方の助けになれば幸いです。