Linuxサーバー

n8n で Telegram AI チャットボットを構築:セルフホスト・AI Agent・会話記憶・有人対応への引き継ぎ

7 ステップ 10 分で読めます 9 回閲覧 0
目次

多くのチームは、すでに Telegram で顧客とやり取りしています。オープンソースのワークフロー自動化ツール n8n を使えば、本格的なアプリケーションを書かなくても、AI モデルで質問に答え、会話を記憶し、口調や対応範囲についての指示に従い、必要に応じて担当者に引き継ぐ Telegram ボットを構築できます。この記事では、n8n をサーバーにインストールして HTTPS で公開し、ボットを作成して、Ollama のローカルモデルまたは AI プロバイダーの API を使ったワークフローを構築します。

Telegram は Webhook 経由で n8n にメッセージを届けるため、有効な HTTPS 証明書を持つ公開ドメインが必要です。先に DNS と証明書を設定してください。商用の AI API を使う場合は、プロバイダーが対応している地域からのみ利用し、その利用ポリシーに従ってください。機密性の高い会話には、ローカルモデルを優先してください。

ステップ1:Telegram ボットを作成

Telegram で @BotFather に話しかけて /newbot を送信し、名前と「bot」で終わるユーザー名を決めて、トークンをコピーします。/setdescription と /setuserpic を使えば、ボットの見た目をプロらしく整えられます。トークンは秘密にしてください。トークンを知っている人は誰でもボットを操作できます。

ステップ2:n8n をインストール

n8n は Docker で動かします(Docker のインストール手順を参照)。ドメインとタイムゾーンはご自身のものに置き換えてください。

docker volume create n8n_data
docker run -d --name n8n --restart always \
  -p 127.0.0.1:5678:5678 \
  --add-host=host.docker.internal:host-gateway \
  -e N8N_HOST=n8n.example.com \
  -e N8N_PROTOCOL=https \
  -e WEBHOOK_URL=https://n8n.example.com/ \
  -e GENERIC_TIMEZONE=Asia/Hong_Kong \
  -e TZ=Asia/Hong_Kong \
  -e N8N_PROXY_HOPS=1 \
  -v n8n_data:/home/node/.n8n \
  docker.n8n.io/n8nio/n8n

WEBHOOK_URL は公開 HTTPS アドレスにする必要があります。n8n は Telegram に Webhook を登録する際にこの値を使います。

ステップ3:n8n を HTTPS で公開

server {
    listen 443 ssl;
    http2 on;
    server_name n8n.example.com;

    ssl_certificate     /etc/letsencrypt/live/n8n.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/n8n.example.com/privkey.pem;

    location / {
        proxy_pass         http://127.0.0.1:5678;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection "upgrade";
        proxy_set_header   Host $host;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_buffering    off;
        proxy_read_timeout 300s;
    }
}

https://n8n.example.com を開き、すぐにオーナーアカウントを作成してください。証明書については Certbot または acme.sh で無料 SSL を導入で解説しています。

ステップ4:認証情報(Credentials)を追加

  • Telegram:ステップ1のボットトークンで、Telegram の認証情報を作成します。
  • ローカルモデル:ベース URL http://host.docker.internal:11434 で Ollama の認証情報を作成します(Ollama は Ollama でローカル LLM を動かすの手順どおりに、Docker コンテナからの接続を許可する手順とファイアウォールのルールも含めて設定しておきます)。
  • または AI API:ご利用のプロバイダー用の認証情報を作成します。OpenAI 互換 API を提供するプロバイダーであれば、カスタムのベース URL を指定して OpenAI の認証情報を利用できます。

ステップ5:ワークフローを構築

新しいワークフローを作成し、次のノードを追加します(ノード名は n8n のバージョンによって多少異なる場合があります)。

  1. Telegram Trigger:message(メッセージ)の更新を待ち受けます。
  2. AI Agent:ユーザーメッセージをトリガーから受け取り、ボットの役割を説明するシステムメッセージを設定します。
  3. エージェントにチャットモデル(qwen2.5:7b を指定した Ollama Chat Model、またはプロバイダーのチャットモデル)と、チャット ID をキーにしたメモリノード(Simple Memory)を接続します。これで顧客ごとに個別の会話履歴が保持されます。
  4. Telegram ノード:操作に Send Message(メッセージ送信)を選び、エージェントの出力を同じチャットに返信します。

ノードの各フィールドで使う式は次のとおりです。

AI Agent      - prompt (user message):  {{ $json.message.text }}
Simple Memory - session key:            {{ $('Telegram Trigger').item.json.message.chat.id }}
Telegram      - chat ID:                {{ $('Telegram Trigger').item.json.message.chat.id }}
Telegram      - text:                   {{ $json.output }}

良いシステムメッセージは、回答を簡潔にし、話題から外れないようにします。例:

You are the customer service assistant of ACME Hosting.
Answer briefly and politely in the customer's language.
Only answer questions about our services, orders and technical support.
If you are not sure, or the customer asks for a refund or a person,
say that a colleague will reply soon. Never invent prices or promises.

ステップ6:有効化してテスト

ワークフローを保存して有効化すると、n8n が Telegram に Webhook を登録します。ボットにメッセージを送ってみてください。反応がない場合は、Webhook の状態を確認します。

curl -s "https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getWebhookInfo"

url が n8n のドメインになっている必要があります。last_error_message には、証明書の問題やサーバーに到達できないといった失敗の理由が表示されます。

ステップ7:利用者の制限と有人対応への引き継ぎ

  • 許可リスト:社内用のボットであれば、トリガーの後に If ノードを追加し、{{ $json.message.chat.id }} がチームのチャット ID のいずれかである場合にのみ処理を続けるようにします。
  • 引き継ぎ:メッセージに「返金」「担当者」「クレーム」などの語が含まれる場合に会話をサポートグループへ転送する分岐を追加し、担当者から回答する旨を顧客に伝えます。
  • ナレッジ:自社文書に基づいて回答させるには、AnythingLLM でプライベート RAG チャットボットを構築するで説明しているナレッジベースと組み合わせます。

よくある質問

ボットが動いていたのに、応答しなくなった

Webhook はボットトークンごとに 1 つしか設定できません。同じトークンを使う別のワークフロー、テスト実行、スクリプトがあると、Webhook が置き換えられてしまいます。getWebhookInfo を確認し、1 つのボットにつき有効なワークフローは 1 つにして、テストには別のボットを使ってください。

返信に時間がかかりすぎる

CPU では、小さいモデルほど速く回答します。システムメッセージを短くし、メモリのウィンドウを直近 10 件のメッセージに制限し、Ollama でモデルを読み込んだままにしておきます。

n8n はチャット以外にも使えますか?

はい。同じワークフローで、データベースから注文を検索したり、サポートチケットを作成したり、グループに投稿したり、日次レポートを送ったりできます。n8n のサーバー要件については Dify・n8n・AI エージェントのサーバー要件で解説しています。

上記の手順で解決しない場合は、サポートチケットを送信して IMIDC の 24 時間 365 日対応テクニカルサポートへご連絡ください。サーバー IP、n8n のドメイン、getWebhookInfo と docker logs n8n の出力を添えていただくと、より迅速に調査できます。

この回答はお役に立ちましたか?

関連チュートリアル