Yappli Tech Blog

株式会社ヤプリの開発メンバーによるブログです。最新の技術情報からチーム・働き方に関するテーマまで、日々の熱い想いを持って発信していきます。

Zapier を使って Slack → Jira 起票& Azure OpenAI Service でチケットタイトル生成

(本記事は Yappli Advent Calendar 2023 (1枚目) の5日目の記事です!🎄📅)

こんにちは!データサイエンティストの山本( @__Y4M4MOTO__ )です。

最近、データサイエンスチーム(以下、 DS チーム)では社内からの依頼(集計、技術相談 etc. )を Jira でチケット管理をするようにしました。チケット運用を始めるにあたってネックになったのが「起票するの、面倒くさくない…?」という点です。

その点を解決するため、 Slack のメッセージにリアクションを押すとその内容で Jira のチケットを作成してくれる Zapier ワークフローを作成しました。これにより、起票は頂いた依頼( Slack メッセージ)にリアクションを押すだけで良くなり、面倒臭さを解消することができました。

この記事では作成した起票ワークフローについて紹介します。ワークフローでは、 Azure OpenAI Service を使ってメッセージ内容からチケットタイトルを生成させるようにしているので、こちらも併せてご紹介します!

動作例

こんな感じの依頼に create-data-team-ticket )というリアクションを押すと…

DSチームへの依頼

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

起票された Jira チケット

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

Slack 通知

全体像

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

ワークフローの全体像

動作の流れとしては次のとおりです。

  1. Slack メッセージに特定のリアクションが押されたら Zapier ワークフローが開始
  2. Slack メッセージの内容からチケットタイトルを生成するよう Azure OpenAI Service へリクエスト
  3. Azure OpenAI Service からチケットタイトルを取得
  4. Jira へ起票

実装

今回のワークフローを作成するにあたって行ったことを以下に記します。

チケット作成用カスタム絵文字の登録

チケット起票リアクションのためのカスタム絵文字を Slack へ登録しました。今回は次の絵文字を create-data-team-ticket という名前で登録しました。

登録したカスタム絵文字

Azure OpenAI Service へのモデルのデプロイ

チケットタイトルを生成してもらうため、言語モデルを Azure OpenAI Service へデプロイしました。

後でZapier からこのモデルを API 経由で利用するので、リクエストに必要な情報(エンドポイント、キーなど)を控えておきます。

モデル利用時に必要な情報が載っている画面

Zapier ワークフローの実装

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 を通して利用できるようになります。

Input Data の設定状況

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

Step 3 における Zapier での設定状況

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 を用いたチケットタイトル生成について紹介しました。

チケットタイトルに依頼内容の要約を設定できたことで、ボードを見た際に「このチケット、何だっけ?」がすぐ分かるようにできました。このことは、チケット運用のやりやすさに大きく貢献していると感じています。

この記事が、これからチケット運用を始める方、すでに始めているが運用に課題を感じている方の助けになれば幸いです。