BEMAロゴ

エンジニアの
成長を支援する
技術メディア

【n8n × Slack】Gemini搭載のAIエージェントを自作!Web検索も可能なチャットボット構築ハンズオン

この記事は「BEMA Lab Advent Calendar 2025Open in new tab」の15日目の記事です。
※本アドベントカレンダーの15日目の投稿となります。

はじめに 

こんにちは、株式会社メンバーズデブオプスリードカンパニーOpen in new tabの蔡です。

前回の記事Open in new tabでは、Docker版n8nをセキュア(安全)にデプロイする方法についてご紹介しました。今回はSlack Botアプリを作成し、n8nのAIエージェントワークフローと連携させることで、SlackをAIエージェントのインターフェースとして機能させる実装方法について解説します。

n8nには多くの機能があります。ワークフローを構築することで、簡単なAIエージェントを作成できます。OpenAIやGoogle GeminiなどのLLMをn8nに接続することで、文章の要約、翻訳、内容の分類、メールの自動返信などが可能になります。また、MCP(Model Context Protocol)を利用してAIエージェントに外部ツールやデータソースへのアクセス機能を提供することもできます。

これらをSlackやLINEなどのメッセージングツールと組み合わせることで、仕事においてもっと便利さを提供できるでしょう。本文では実装の方法について検討したいと思います。

n8n Dockerコンテナのインストール

前回の記事Open in new tabでn8n Docker デプロイ用のコードも公開していますので、そちらを参考にn8n Docker環境を構築できます。

今回は、SlackからWebhook経由でn8nへメッセージを送信するため、n8nには外部(インターネット)からアクセス可能なHTTPSのURLが必須となります。そのため、n8nコンテナの構築完了後、ホストへのドメイン名(DNS)の設定と、そのドメインに対応するSSL証明書の準備が必要です。これらが整って、Slackとの連携が可能になります。

以下は、前回の記事で使用した docker-compose.yaml です。

n8nをHTTPS経由で外部に公開するには、docker-compose.yaml内で関連する環境変数を設定する必要があります。下記は追加する環境変数と用途の説明です。

- N8N_PROTOCOL: HTTPS接続を設定する
- N8N_HOST:ホスト名を設定する
- N8N_SECURE_COOKIE:CookieがHTTPS経由でのみ送信されるようにする
- N8N_EDITOR_BASE_URL:ユーザーがエディターUIにアクセスするためのURL
- WEBHOOK_URL:WebhookのベースURLを指定する
- N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE:n8nのコミュニティノードを  
  有効化する
- N8N_SSL_CERT:SSL/TLS証明書ファイルのパスを指定する
- N8N_SSL_KEY:秘密鍵ファイルのパスを指定する

docker-compose.yaml

 # docker-compose.ymlのバージョンは3.8以上でdocker compose secretsを利用できます。
version: '3.9'
#--------------#
# postgres部分省略
#--------------#
  n8n:
    image: docker.n8n.io/n8nio/n8n # 使用するDockerイメージ
    restart: always

    environment:
      # .envファイルなどから読み込む通常の環境変数
      GENERIC_TIMEZONE: ${GENERIC_TIMEZONE}
      TZ: ${TZ}
      DB_TYPE: ${DB_TYPE}
      DB_POSTGRESDB_HOST: ${DB_POSTGRESDB_HOST}
      DB_POSTGRESDB_PORT: ${DB_POSTGRESDB_PORT}
      # n8nのイメージもPostgreSQLと同様に、`_FILE` 接尾辞を使うことで、
      # ファイルからデータベースの接続情報を読み込むことができます。

      DB_POSTGRESDB_DATABASE_FILE: /run/secrets/postgres_db
      DB_POSTGRESDB_USER_FILE: /run/secrets/postgres_non_root_user
      DB_POSTGRESDB_PASSWORD_FILE: /run/secrets/postgres_non_root_password
      ### 以下は新しく追加したn8nの環境変数 ###
      N8N_PROTOCOL: https 
      N8N_HOST: example.n8n.domain
      N8N_SECURE_COOKIE: true
      N8N_EDITOR_BASE_URL: https://example.n8n.domain
      WEBHOOK_URL: https://example.n8n.domain
      N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE: true
      N8N_SSL_CERT: /certs/fullchain.pem 
      N8N_SSL_KEY: /certs/privkey.pem
      ##########
   
   # 公開URLを経由してn8nにアクセスする場合、外部からの443ポート(HTTPS)へのアクセスを  
   # コンテナ内の5678ポートへ転送します。
    ports:
      - "443:5678" 

   #【※】認証情報の配置ディレクトリについて、読者の環境に合わせて書き換えてください。
    volumes:
      - n8n_storage:/home/node/.n8n 
   # n8nデータを保存するためのボリューム
      - /opt/docker/certs/n8n:/certs:ro 
   # 認証情報をDockerのディレクトリに配置
      

    depends_on:
      # postgresサービスが正常起動(healthcheckが通る)してから、n8nサービスを起動させます。
      postgres:
        condition: service_healthy

    # --- n8nサービスに割り当てるsecrets ---    
    # n8nが必要とするデータベース接続情報だけを割り当てます。
    # このように、サービスごとに必要な機密情報だけを安全に渡すことができます。
    secrets:
      - postgres_db
      - postgres_non_root_user
      - postgres_non_root_password
      
#--------------#
#secrets部分省略
#--------------#

volumes:
  db_storage:
  n8n_storage:

n8nのデプロイが完了すると、ログイン画面が表示されます。
アカウント登録を行えば、メイン画面へアクセスできます。

n8nワークフローの作成

メイン画面にログイン後、右上のボタンをクリックしてワークフローの作成を開始します。

すると、ワークフローの作成画面が表示されます。 n8nの利点は、サンプルテンプレートを非常に簡単にインポートできることです。そのため、ゼロからワークフローを構築する必要はないです。

今回のテーマは、Slackを使ってn8nとメッセージの送受信を行うことです。n8nのウェブサイトでは、目的のテンプレートを直接検索してコピーすることができます。今回は、こちらのテンプレートOpen in new tabを使用します。

「Use for free」ボタンをクリックすると、「Use template」画面が表示されます。 その後、「Copy template to clipboard(JSON)」ボタンをクリックすることで、テンプレートのワークフローファイルをコピーできました。

テンプレートをワークフロー画面に貼り付けると、n8nにワークフローがインポートされます。インポート後のワークフローは以下の通りです。

まず「Slack Node」から設定を確認します。それぞれの「ノード」をダブルクリックすると、設定画面が展開します。設定画面右上の「Docs」リンクをクリックすると公式ドキュメントへ遷移し、そのノードの利用方法をドキュメントから直接確認します。非常に使いやすいです。

今回のワークフローでは、主に「Slack Trigger node」「Slack node」「AI Agent node」を使用します。不要な部分を削除し、必要なノードのみを残した上で、「Memory」と「Tool」ノードを追加します。最終的に以下のワークフローになります。 「Chat Model」には「Google Gemini Chat Model node」を設定します。「Tool」には「Brave Search Web」と「Brave Search Videos」を追加します。これにより、Chat Modelがインターネットに接続し、ユーザーの指示に基づいて情報を検索できるようになります。

「Chat Model」の設定方法は公式ドキュメントに記載されています。例えば、Geminiを使用する場合、公式ドキュメントを参照すると、Google AI StudioのAPI Keyを設定欄に入力すればよいことがわかります。

Slackに接続

Slackと連携するには、Slackの「Bot User OAuth Token」が必要です。「Create new credential」タブから、Slackアカウントとの連携画面に進むことができます。

「Access Token」の欄には、Slackの「Bot User OAuth Token」を入力する必要があります。

Bot User OAuth Tokenを取得するため、Slackの「Slack API」サイトで設定を行う必要があります。Slack marketplaceのトップページの「構築」タブをクリックして、Slack Appの構築を始めます。

「From scratch」タブをクリックすると、Slack Appの作成画面が表示されます。ここでアプリの名前を入力し、インストール先のワークスペースを選択します。

Bot Token Scopesの設定

次に、Slackアプリの設定画面に移ります。「OAuth & Permissions」タブを選択し、「Scopes」セクションまで下にスクロールします。「Add an OAuth Scope」ボタンをクリックして、「Bot Token Scopes」に以下の項目を設定します。  

Slack Appのインストールとトークンのコピー

『App Home』タブに戻ります。作成するアプリの名前を設定し、「保存」ボタンを押します。

再度「OAuth & Permissions」ページに戻ります。「OAuth Tokens」セクションに、アプリをインストールするボタンが表示されているので、クリックするとインストールを実行します。

「許可」をクリックしてSlackアプリをインストールします。

Slackアプリのインストールが完了すると、『OAuth Tokens』のセクションに『Bot User OAuth Token』が表示されます。このTokenをn8nの『Slack Node』にコピーして保存してください。これで、Slackとn8nのアカウント連携設定が完了します。

注:ここでの「Bot User OAuth Token」として取得されたトークンは、n8nのインターフェースで言う「Access Token」に相当します。n8nで「Access Token」を入力する際は、Slackで取得した「Bot User OAuth Token」を入力する必要があります。

指定のチャンネルに先ほど作成した「Slack App」を招待してください。これでトークンの設定は完了です。

メッセージ送信のテスト

Tokenの設定が成功した後、n8nの「Send Message Node」からメッセージを送信してみます。メッセージが正常に送信されたことを確認できれば、次のステップに進むことができます。

ノードの実行に成功すると、ノードに緑色のチェックマークアイコンが表示されます。


Slackでn8nから送信されたメッセージを受信できることを確認しました。

「Slack Trigger Node」を開き、n8nとSlackが正常に連携されていることを確認します。Webhook URLが表示されたら、「Trigger On」を「Bot / App Mention」に設定します。テスト環境では「Test URL」を設定します。ワークフロー公開後は「Production URL」を使用してください。

Slack設定ページの『Event Subscriptions』に切り替えます。「Subscribe to bot events」のセクションで、「app_mention」のイベントを追加します。

先ほどコピーしたWebhook URLを、「Enable Events」内の Request URL に貼り付けます。
一旦エラーメッセージが表示されますが、ひとまず無視してください。

n8nの「Slack Trigger Node」の設定画面で「Execute step」をクリックして、「Slack Trigger Node」を実行します。

「Slack Trigger Node」の実行が成功すると、「Request URL」の状態が正常に更新されます。

「Execute workflow」ボタンを押すと、ワークフローがSlackのメッセージを監視し始め、トリガーされるのを待ちます。これでSlackアプリがAIエージェントとして機能するようになります。Slackでこのアプリにメッセージを送信すると、AIエージェントはあなたの要求に基づいてインターネットで検索を行い、結果をSlackへ送信します。

次に、AIエージェントに8日に青森で発生した地震についてニュースの情報を検索してもらいます。AIエージェントは当日のニュース動画を見つけました。これにより、AIエージェントがインターネットに接続されていることが確認できました。

最後に、作成したワークフローを公開します。右上の「Active」をオンにすると、ワークフローが常時稼働し、Slackからのメッセージを待機するようになります。これで、チャットボットとして利用可能になります。

おわりに

n8nコンテナのデプロイに関する技術記事に続き、この記事ではn8nの利用方法について掘り下げていきたいと思います。

AIエージェントのチャットボットを開発するには多くの時間がかかります。しかし、n8nのワークフローを通じて、LLMや様々な外部サービスを素早く連携させることができます。n8nには多様な通信ツールとの統合ノードも用意されており、Webhookと組み合わせることで、Slack、LINE、Telegramなどのチャットツールをフロントエンドのインターフェースとして使用できます。さらにデータベースや外部API、内部システムと連携させることで、単なるLLMチャットボットよりも実際のビジネスニーズに近いAIエージェントを構築することが可能です。これにより、チャットボットのUIを独自に開発する段階を省略できます。

本稿が、同様のニーズを持つ方々に何らかの参考となれば幸いです。

この記事が役に立ったと思ったら、
ぜひ「いいね」とシェアをお願いします!

リンクをコピーXでシェアするfacebookでシェアする

この記事を書いた人

Tsai Yalin
Tsai Yalin
2023年8月メンバーズに中途入社。異なる言語や文化を体験するのが好きな人。
詳しく見る
ページトップへ戻る