> ## Documentation Index
> Fetch the complete documentation index at: https://docs.timothe.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# n8n ウェブフック連携

> n8n のワークフロー自動化から Turnint AI のセッション要約を受け取り、LLM で重要情報を抽出して Slack に通知する

[n8n](https://n8n.io/) のワークフロー自動化に Turnint AI のセッションイベントを流し込み、LLM で会話ログから重要情報を抽出して Slack に通知する構成の作り方です。

<img src="https://mintcdn.com/unboundedpioneering/RSP7KQ2DOGl8kp0l/images/integrations/webhook.n8n.overview.png?fit=max&auto=format&n=RSP7KQ2DOGl8kp0l&q=85&s=319bf2f2b70b8efb5d3b8b3b17d8b2d1" alt="n8n ワークフロー全体像" width="2072" height="1164" data-path="images/integrations/webhook.n8n.overview.png" />

<Info>
  このレシピでは `session-summarized` イベントを使います。payload に `session.transcript`（会話ログの全文テキスト）と `session.summary`（要約）、`session.importance`（重要度）が含まれており、LLM に渡す素材として扱いやすいためです。payload の詳細は [ウェブフック連携](/ja/integrations/webhook) を参照してください。
</Info>

## 前提条件

* Turnint 側でタイプ「ウェブフック」のインテグレーションが作成済みで、「**セッションが要約されたときに送信**」 のみ有効化されていること（他のイベントは無効）。作成方法は [ウェブフック連携](/ja/integrations/webhook) を参照。Webhook URL はこのあとのステップ 1 で発行する n8n の URL に差し替えます
* n8n のインスタンス（[n8n Cloud](https://n8n.io/) または self-hosted）が稼働しており、ワークフロー作成権限があること
* Basic LLM Chain ノードで使う LLM プロバイダ（OpenAI / Anthropic など）の API キーを n8n の **Credentials** に登録済みであること
* 通知先の Slack ワークスペースが用意されていること

## 全体フロー

```mermaid theme={null}
flowchart LR
    A["Turnint AI"] -->|"session-summarized"| B["n8n Webhook"]
    B --> C["Basic LLM Chain"]
    B --> M["Merge"]
    C --> M
    M --> D["Slack"]
```

1. Turnint AI でセッションが終了し、要約が完了すると `session-summarized` イベントが発火する
2. n8n の Webhook ノードがイベントを受信する
3. Basic LLM Chain ノードが transcript を読み、見込み顧客に関する重要情報を構造化して抽出する
4. Merge ノードが Webhook の元データ（要約・重要度など）と LLM の抽出結果を 1 つのアイテムに合流させる
5. Slack ノードがチャンネルに通知を投稿する

## ステップ 1: n8n 側で Webhook URL を用意する

n8n で新規ワークフローを作成し、先頭に **Webhook** ノードを追加します。

| 項目             | 値                       |
| -------------- | ----------------------- |
| HTTP Method    | `POST`                  |
| Path           | 任意                      |
| Response Mode  | `Immediately`           |
| Authentication | `Header Auth`（推奨・詳細は下記） |

ノードの **Production URL** をコピーします（`https://<your-n8n>/webhook/<path>` の形式）。`Test URL` ではなく Production URL を使ってください。

<Note>
  self-hosted n8n の場合、Turnint AI からアクセスできる公開 URL になっている必要があります。ローカル開発中は ngrok などのトンネルツールで公開してください。
</Note>

### Optional: 署名検証で送信元を確認する（推奨）

Turnint AI はすべての webhook リクエストに `X-Turnint-Signature` ヘッダを付けて送信します。値は連携ごとに一意な固定トークン（`sig_...`）で、ダッシュボードのウェブフック連携の詳細画面からコピーできます。

n8n の Webhook ノードで **Authentication** を `Header Auth` に設定し、以下の Credentials を作成してください。

| 項目    | 値                                                              |
| ----- | -------------------------------------------------------------- |
| Name  | `X-Turnint-Signature`                                          |
| Value | ダッシュボードからコピーしたシグネチャ（例: `sig_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`） |

これで、ヘッダの値が一致しないリクエストは Webhook ノードが自動で拒否するようになり、Turnint AI から送信された webhook であることを確認できます。

<Warning>
  シグネチャは共有シークレットです。リポジトリや公開ドキュメントにそのまま貼り付けず、n8n の Credentials に登録して参照してください。万一漏洩した場合は、該当の連携を削除して新しく作成し直すことで新しいシグネチャが払い出されます。
</Warning>

## ステップ 2: Turnint のウェブフック連携に n8n の URL を設定する

事前に作成しておいたウェブフック連携を開き、**Webhook URL** をステップ 1 でコピーした n8n の Production URL に差し替えて保存します。

イベントは 「**セッションが要約されたときに送信**」 のみが有効になっていることを確認してください。

送られてくる payload の構造は以下の通りです（抜粋）。

```json theme={null}
{
  "type": "session-summarized",
  "payload": {
    "agent": { "id": "...", "name": "..." },
    "session": {
      "id": "...",
      "context": { ... },
      "summary": "セッションの要約テキスト",
      "importance": "low" | "medium" | "high",
      "transcript": "..."
    }
  },
  "metadata": { ... }
}
```

## ステップ 3: Basic LLM Chain で重要情報を抽出する

Webhook ノードの後ろに **Basic LLM Chain** ノードを追加します。

### モデル設定

Chat Model を任意の LLM に接続します。Credentials には事前に API キーを登録しておいてください。

### プロンプト例

transcript から見込み顧客に関する情報を JSON で抽出する日本語プロンプトの例です。

```
あなたは営業オペレーションのアシスタントです。以下の会話ログから、見込み顧客に関する情報を JSON 形式で抽出してください。不明な項目は null にしてください。

# ユーザー情報

{{ $json.body.payload.session.context.user.toJsonString() }}

# 会話ログ
{{ $json.body.payload.session.transcript }}

# セッション要約
{{ $json.body.payload.session.summary }}
```

<Note>
  `{{ $json.body.payload.session.transcript }}` の参照パスは、Webhook ノードが受信したデータ構造に合わせています。n8n 上で前のノードの出力をドラッグ&ドロップすれば自動で式が入ります。
</Note>

## ステップ 4: Merge で元データと LLM 出力を合流させる

Slack のメッセージ本文では、Webhook payload に入っている **セッションコンテキスト**（例: `context.user.phone` のように、ゲートで入力されたユーザー情報）と **Basic LLM Chain の抽出結果** の両方を使いたいことが多いです。たとえば「この電話番号に必要なら架電してください」という通知に、LLM が抽出した会話のポイントを添える、というユースケースです。

n8n で複数ブランチのデータを 1 つの下流ノードに渡す最もシンプルな方法が **Merge** ノードです。**Webhook** ノードからもう 1 本線を引き、**Basic LLM Chain** と並列に **Merge** ノードへ接続します。

| 項目               | 値                   |
| ---------------- | ------------------- |
| Mode             | `Combine`           |
| Combination Mode | `Merge By Position` |

Webhook と Basic LLM Chain はいずれも 1 アイテムずつ出力するため、位置ベースの Merge で 1 つのアイテムに統合され、下流の Slack ノードから両方のフィールドに `$json.xxx` でアクセスできるようになります。

## ステップ 5: Slack ノードで通知する

Merge ノードの後ろに **Slack** ノードを追加します。

Slack への接続方法は 2 通りあります。

* **Slack API の OAuth 接続**（推奨）: n8n の Credentials から Slack OAuth2 を追加し、`chat:write` 権限を付与したチャンネルに投稿
* **Incoming Webhook**: Slack の Incoming Webhook URL を HTTP Request ノードから POST

Resource を `Message`、Operation を `Send` にして、Channel と Text を設定します。Merge 済みのアイテムから、セッションコンテキストと LLM の抽出結果を両方参照できます。

````
user: {{ $json.body.payload.session.context.user.phone }} に必要であれば架電してください。

情報:
```{{ $json.text }}```
````

<Note>
  `context.user.phone` の参照パスはゲートで `phone` フィールドを入力値として設定している場合の例です。ゲートで設定したキー名に合わせて `context.user.<key>` を書き換えてください。
</Note>

## 動作確認

1. n8n 側でワークフローを **Active** に切り替える
2. Turnint AI のダッシュボードから対象エージェントのセッションを実際に発生させ、セッション終了後の要約処理が走るまで待つ
3. n8n の **Executions** タブで Webhook 受信と各ノードの成功を確認する
4. Slack チャンネルに通知が届くことを確認する

うまく届かない場合は、n8n の Executions の各ノード出力を開いて `$json.body.payload` の構造を確認し、Basic LLM Chain / Slack ノードの参照式と一致しているかをチェックしてください。

## 応用のヒント

同じワークフローに If ノードを足せば重要度で分岐、HTTP Request ノードや Salesforce / HubSpot ノードを繋げれば CRM への自動登録、別チャンネル通知などもすぐに組めます。

## 関連ドキュメント

* [ウェブフック連携](/ja/integrations/webhook) — イベント種別と payload 仕様
* [Slack ウェブフック連携](/ja/integrations/webhook.slack) — Turnint から直接 Slack に送るシンプルなレシピ
