n8nからOpenAI触ってみた


## はじめに

先日「n8nを触ってみよう」という内容の社内勉強会に参加させてもらいました。その時に意外と手間なく使えるなと感じたのと、ジョインしている開発チームで自分は「AIをもっと業務に活用していこう！」的な取り組みを推進させてもらっているので、まずは自分が簡単に試してみよう！ということで「XXやってみた！」系の記事です。

## n8nとは？

[n8n](https://n8n.io/)はワークフローの自動化ツールです。
オープンソースで作られているので、セルフホスティングもでき、その場合は無償で使うことができるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/930e9a87-5856-75b2-d087-7a382964d2ff.png)

## 早速使ってみる

ゴタゴタ書いても伝わらなそうなので早速使ってみようと思います。
パッといいアイデアが思いつかなかったのですが、最近一緒に働くメンバーが「問い合わせ対応とか自動化したいな」と言っていた気がするので、それっぽいものを作ってみようと思います。

今回はお試しで作ってみようと思うので、簡単に
- 1.Gmailで特定のメールが来たらワークフローを実行する
- 2.メールの問い合わせ内容をスプレットシートに追記する
- 3.メールの問い合わせ内容に対する回答をGPTに作成させる（実行自体は1., 2.の間。）
- 4.問い合わせが来た旨をSlackで通知する
の流れで作成してみようと思います。
（本来は4.で自動回答させると思いますが、Slack連携も試しておきたかったので。）

### ワ-クフロー作成
左側の`n8n`ロゴの隣にある`+`ボタンから作成できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/d43f0cbc-eaca-21e4-a768-599192c40a41.png)

### トリガーの設定
`Add first step...`と表示されるので`+`をクリックして最初の[ノード](https://docs.n8n.io/workflows/components/nodes/)を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/87840b23-bd68-6545-2040-10cd56655193.png)

今回はメールの受信時にワークフローが始まって欲しいので、`On app event`を選択します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/853e6d2c-8f1a-6b63-3b70-ca4174e55ae1.png)

#### サービスの選択

トリガーとなるサービスの一覧が表示されるので、今回はGmailを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/cae512ae-38fe-5f3c-5aff-55cb863659a5.png)

#### 認証情報の取得

サービスを選択すると`Parameters`に`Credential to connect with`の箇所があります。
ここを選択すると認証情報を連携することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/8384e84c-38b1-e8e9-ccf0-be4dfe0757f7.png)

今回はOauth2.0により連携させます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/044a64ea-b586-799e-a19c-4309274144a7.png)


画面の通りに設定を進めていくとよくある画面が出てきて連携をすることができます。
（他にもいくつかのサービスと連携させてみましたが、この連携がスムーズでちょっと感動しました🔥）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/a645484c-e45f-5e04-f7f6-713d2f682b0d.png)

#### サービス固有の設定をする

連携するサービスのトリガーの条件をある程度指定することができます。
今回は特定のラベルのついたメールを受信したらワークフローを起動するようにしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/57d17a8b-088b-00af-d6aa-f109feb29776.png)

ここまでで
> - 1.Gmailで特定のメールが来たらワークフローを実行する

が完了しました

### ノードの追加（スプレットシートへの書き込み）

ワークフローの起動を設定したので、それ以降のノードを追加していきます。
`+`ボタンからノードを追加し、`Action in an app`からアプリ上で実行する内容を決めていきます。

> - 2.メールの問い合わせ内容をスプレットシートに追記する

を実行して欲しいので、`Google Sheets`を選択しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/580212c9-1b6a-4d48-a7e9-13e3fece6129.png)

ここでも同じように認証情報を取得します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/2142ec21-1e33-175c-3ddd-c25879f09565.png)

#### 書き込み先を設定する

ワークフロー内で書き込みたいシート用意します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/fa224c2b-7021-178a-89d7-1622a7aca234.png)


`Parameters`にスプレットシートのURLやシート名を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/3164849a-64e3-a4a1-57d5-5108c3cabfff.png)

#### 書き込む内容を設定する

スプレットシートに書き込む内容を決めていきます。
ワークフロー内のノードから値を参照することができるので、`INPUT`から内容を指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/72ebf63f-5dd8-e5c4-ecaf-b8ccc0b48923.png)


最初はノードの値を参照する時にJSONが出てきて、指定方法に迷ったのですが、表示される`INPUT`の内容をフォームにD&DすることでJSONはいい感じに追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/df3a63e9-de18-8983-1053-32de392ac904.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/bee072de-f297-d2e5-d3f8-f6e3157ea620.png)

#### ここまでの動作確認

一旦ここまでの内容を動作確認してみます。
以下のようなメールを連携したGmailアドレス宛に送信しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/65892ab2-5c2a-95e5-892e-398ae0589941.png)

その後`Test step`を実行すると以下のような結果がn8n上に表示されており、ワークフローに成功していることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/ab5e99a3-518e-d38b-d225-bf1d4c79cf6b.png)



### ノードの追加（OpenAIと連携して回答内容を考える）

スプレットシートの書き込みまでできたので
> - 3.メールの問い合わせ内容に対する回答をGPTに作成させる（実行自体は1., 2.の間。）

この内容のノードを作ってみます。
`Gmail Trigger`と`Google Sheets`の間にある`+`ボタンからノードを追加して`Action in an app`から`OpenAI`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/017e1cdb-2d40-7e2b-4e8b-eff6d2186229.png)

OpenAIのAPI Keyを入力する欄があるので、OpenAI上で発行したものを貼り付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/81d82df1-71c8-b16c-ee54-cdde15690770.png)

モデルやプロンプトを入力することができるので、任意のモデルを選択し、最初のノードから取得したメールの本文をプロンプトに含め、問い合わせに対する回答を取得できるようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/7248fdf4-69e2-d013-33b0-2365c8f95f9e.png)

Google Sheetsではスプレットシートへ書き込む際にOpenAIから取得した内容を書き込むように追加設定します。
（ノードの数によってJSONから取得する時の構文が変わるようなので、必要に応じて問い合わせ日時や概要もD&Dしなおします。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/d4ccdd68-fb5e-e85f-79d5-5ef76779e136.png)

#### ここまでの動作確認

ここまでの内容で動作確認してみます。
`Test step`から実行をしてみると`回答`にOPENAIで作成された回答が入力されていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/40befcbc-e1bd-e5c4-61f3-a7f77f241685.png)

スプレットシートも確認してみると、しっかり書き込まれることがわかります！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/247e9ff4-a2d2-5f9d-4411-1f9aa77e35d2.png)


### ノードの追加（Slackの通知）

最後に通知を追加したいので、Slack連携をするノードを作成していきます。
`Action in an app`からSlackを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/db418562-52e4-463f-720f-52343227fc02.png)

ここでも連携情報を取得します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/9059131a-4e5d-fba0-0d74-65a58601dce1.png)


Slackで送るメッセージの内容を設定していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/b45fae46-1c8b-cd3a-f6d4-5bd946ca60b6.png)



`Test step`から実行してみます。
n8n上では成功してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/b3bbc478-3178-8026-17fc-af83d4e34643.png)



連携したSlackのワークスペースからもメッセージが追加され、成功していることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/0df79739-8317-c44d-9bb4-9e1028a460e9.png)

### ワークフローを使ってみる

ここまでで構想していたワークフローは作成できたので実際に動作確認してみます。
作成したワークフローをactiveにして以下のようなメールを送ってみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/5f085e34-1630-a680-4d45-8bf3ee732e34.png)

設定通りSlackにメッセージが来ました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/6e4719d4-6844-4f45-4d8f-17385f889b27.png)

スプレットシートにも書き込まれています🎉
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/932cfee6-e833-8aea-1324-a85b86224539.png)



## その他

作成したワークフローはJSON形式でダウンロードできるようです。
コード管理できるのは良いですね！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527942/4b294dfb-1ca1-f1f1-6093-a46c6d6857a5.png)

## おわりに

こういったノーコード系のものは、最初謎にとっつきにくさを感じていたのですが、実際に触ってみると簡単に操作を覚えることができ、今回のワークフローの作成も30分程度ででき、その手軽さに感動しました！
連携できるサービスも多く、効率化できそうなものが無限にあるのでしっかり活用していきたいと思います！