スレッドをissue化するワークフローをn8n使ってやってみたが最高すぎた

TL;DR

n8nでSlackのスレッドをGitHub Issueに自動変換するワークフローを作りました。
GUIが直感的でデフォルトのノードが充実しており、ほぼノーコードで実現できました。
Slack連携時はSigning Secretの設定と、Test URL / Production URLの使い分けに注意が必要です。

はじめに

今日はn8nを使ってSlackでのやり取りをIssueにしてくれる仕組みを作ってみました。詰まりどころや、実際に作ってみたからわかる良さについて書いていきたいと思います。

きっかけ

システムを運用していると日々システムに関する問い合わせがSlackで来ます。
一方で答えていると、『あれ?これ前も調べて回答しなかったかな?』と思うこともしばしばあり、Slackの履歴を遡りますがどこでやりとりしていたか思い出せないこともしばしばありました。
また、Issueとして起票することになったとしても話したことをまとめることもスレッドが長くなればなるほど大変だったりします。
そこでスレッドのやり取りをまとめてIssueに起票できて、これまであった問い合わせも基本集まるようにしていったらどうかというアイデアをn8nで試してみることにしました。

最終的に出来上がったワークフロー

以下のようなワークフローを組んでIssue化を実現しています。

実際にn8nを使ってみて

デフォルトのノードが優秀すぎる

n8nはデフォルトでifやswitch, filterやSlackのAPIなどやりたいことを実現するためのノードが揃っていて、導入のハードルが非常に低かったです。 これらを自分で組み立てる必要もないので、準備の手間がほとんどかかりませんでした。

検索すると大体の機能が揃っていて充実している

直感的で分かりやすいGUI

基本的にワークフローを構築するものなので流れを作るのですが、Figmaなどのように直感的にドラッグ&ドロップしたり、矢印を伸ばすだけで実現できます。

例えばこのアクションでは1つ前の出力結果の項目を使いたい場合もドラッグ&ドロップするだけでできます。

途中で複数の分岐を作ったり、間に1つ処理を挟んだりなど変更を簡単にできるので、非エンジニアにも扱いやすい仕組みになっていると感じました。

途中へのアクション追加や削除も、矢印にフォーカスを当てると選択肢が表示される

また、1つ前の出力だけでなくワークフロー内の全ての処理をどこからでも参照できるので綺麗なワークフローを頑張って組み上げなくてもいいのも優しいポイントでした。

例えば今回のようにSlackの問い合わせを処理する場合、「Slackのトリガーが起動する → 発動したURLのリンクを取得 → スレッドの中身を取りに行く → 内容をAIにまとめてもらう → GitHubにIssueを作りにいく」という流れになります。 このワークフローで最後のGitHub Issue作成時に、2番目のステップで取得したURLのリンクを参照できるので、極論全てを直列に処理してもやりたいことはできます。

実行状況を可視化できるのでデバッグ作業が簡単

作ったワークフローを動かしてみたいときはExecute Workflowから手動実行が可能で、前の出力結果がどうだったか・次のフローに進んだかをGUI上で直感的に確認できます。
また具体の項目もGUI上から確認できるので、とても簡単です。

実際にどんな出力が来ているのかを確認できる

詰まり・困りポイント

Slack連携するときに最初に入れるのはAccess TokenだけでなくSigning Secretも必要になるケースがある

参考文献を調べていたら必要なケースがAccess Tokenだけだったのですが、実際にn8nの設定を見るとSigning Secretも必要でした。
Access TokenはOAuth & Permissions > Bot User OAuth Tokenを貼るだけです。
一方でSigning SecretはSlack AppのBasic Information > Signing Secretというのがあるのでそこからコピペして貼ることで連携することができます。

Slackをワークフローの起点とする場合、公開してない状態はTest URLを、公開している状態はProduction URLをEvent Subscriptionsに入れる必要がある

公開済みかどうかでEvent SubscriptionsのRequest URLに入れるものが変わります。
最初に公開したときに動作しなかった原因を調べると、入力するURLを間違えていることに気づきました。

プランによっては作ったワークフローをチーム内の他のメンバーに共有できない

これは現在のプランの制約のようで、自分で作ったワークフローを他のメンバーが編集できない仕様のようです。

一方でJSON形式でダウンロードしてインポートすることもできますが、別のワークフローとして追加されますし、認証情報とかは落としてこないので自分で設定し直す必要があります。

ワークフローは一度公開すると手動実行ができなくなる

今のプランだとワークフローを公開してしまうと手動実行ができなくなってしまうので、一度Unpublishするか公開済みのものに対してそのまま手を加えて再度Publishをして実際に確認していく必要があります。
公開済みのワークフローの実行結果はExecutionsから確認できます。

AIのoutputは構造化しても一律textとして出力されるので構造化して受け取りたい場合自前でパースする

以下の例はAIにJSON形式で出力してもらうのをお願いしましたが、最終的にアウトプットはtextの中に入っています。

さらに、アウトプットに上限があるのか途中で出力が終わってしまい、JSON構造が壊れることもあります。

最後に

Slack連携の初期設定で少し躓いた程度で、それ以外のデバッグ機能やGUIの優秀さのおかげで非常に簡単にやりたいことを実現できました。 ぜひn8nを使ってみてください!

おまけ

ある程度運用していくと、Issue作成前に過去の類似Issueを検索させたり、起票後もスレッドが続いた場合に差分をIssueコメントとして追記させたりと、状態管理の仕組みも整えていきたいと思っています。