チャットサポートOSS比較:Chatwoot vs Papercups vs Zammad でIntercom代替をセルフホスト
オープンソースラボ編集部 ・ 2026年6月13日
チャットサポートOSS比較:Chatwoot vs Papercups vs Zammad でIntercom代替をセルフホスト
Intercomは月$39〜(Starter)、Zendeskは月$55〜/エージェントと、サポートチームが拡大するほどコストが急増します。Chatwoot(最も多機能・Slack/Twitter連携)・Papercups(Elixir製・開発者向け)・Zammad(チケット管理+チャット統合)はOSSのカスタマーサポートプラットフォームで、ライブチャット・メール・SNSを1つの受信ボックスで管理できます。
チャットサポートツールの選定理由
- コスト削減: Intercom Startarは月$39・エージェント追加は月$19/人。10人チームで月$210。セルフホストで無料化
- マルチチャンネル統合: メール・ライブチャット・Twitter/X・Facebook Messagesを1つの受信ボックスで管理
- カスタマイズ: チャットウィジェットのデザイン・言語・トリガー条件を自由に変更したい
- APIアクセス: 問い合わせデータをCRM・Slack・Notionと自動連携したい
- データ主権: 顧客の問い合わせ内容を外部SaaSに渡したくない(医療・金融・法律)
主要ツールの概要
Chatwoot
最も機能が充実したオープンソースのカスタマーサポートプラットフォームです。GitHubスター21k+。メール・ライブチャット・Facebook・Twitter/X・WhatsApp・Telegram・LINE・Slackを統合した受信ボックス、カスタムボット、CSAT計測、チームコラボレーション機能を備えます。
# Chatwootをdocker-composeで起動
version: "3"
services:
base: &base
image: chatwoot/chatwoot:latest
env_file: .env
volumes:
- /data/storage:/app/storage
rails:
<<: *base
depends_on:
- postgres
- redis
ports:
- "3000:3000"
environment:
NODE_ENV: production
RAILS_ENV: production
command: bundle exec rails s -p 3000 -b 0.0.0.0
sidekiq:
<<: *base
depends_on:
- postgres
- redis
command: bundle exec sidekiq -C config/sidekiq.yml
postgres:
image: postgres:16-alpine
restart: always
environment:
POSTGRES_DB: chatwoot_production
POSTGRES_USER: chatwoot
POSTGRES_PASSWORD: chatwoot_pass
volumes:
- chatwoot_db:/var/lib/postgresql/data
redis:
image: redis:7-alpine
restart: always
volumes:
- chatwoot_redis:/data
volumes:
chatwoot_db:
chatwoot_redis:
# .env(Chatwoot設定)
FRONTEND_URL=https://support.yoursite.com
DEFAULT_LOCALE=ja
FORCE_SSL=true
SECRET_KEY_BASE=your-64-char-secret-key
POSTGRES_HOST=postgres
POSTGRES_USERNAME=chatwoot
POSTGRES_PASSWORD=chatwoot_pass
REDIS_URL=redis://redis:6379
MAILER_SENDER_EMAIL=support@yoursite.com
SMTP_DOMAIN=yoursite.com
SMTP_ADDRESS=smtp.sendgrid.net
SMTP_PORT=587
SMTP_AUTHENTICATION=plain
SMTP_ENABLE_STARTTLS_AUTO=true
SMTP_USERNAME=apikey
SMTP_PASSWORD=your-sendgrid-key
// ChatwootウィジェットをNext.jsに埋め込む
// app/components/ChatwootWidget.tsx
"use client";
import { useEffect } from "react";
declare global {
interface Window {
chatwootSettings: Record<string, unknown>;
chatwootSDK: {
run: (config: { websiteToken: string; baseUrl: string }) => void;
};
}
}
export function ChatwootWidget({ userId, userEmail }: { userId?: string; userEmail?: string }) {
useEffect(() => {
window.chatwootSettings = {
hideMessageBubble: false,
position: "right",
locale: "ja",
type: "expanded_bubble",
launcherTitle: "サポートに相談",
};
const script = document.createElement("script");
script.src = `${process.env.NEXT_PUBLIC_CHATWOOT_URL}/packs/js/sdk.js`;
script.async = true;
script.defer = true;
script.onload = () => {
window.chatwootSDK.run({
websiteToken: process.env.NEXT_PUBLIC_CHATWOOT_WEBSITE_TOKEN!,
baseUrl: process.env.NEXT_PUBLIC_CHATWOOT_URL!,
});
// ログインユーザーの情報を設定
if (userId && userEmail) {
window.addEventListener("chatwoot:ready", () => {
(window as unknown as { $chatwoot: { setUser: (id: string, attrs: Record<string, string>) => void } })
.$chatwoot.setUser(userId, {
email: userEmail,
name: userEmail.split("@")[0],
});
});
}
};
document.head.appendChild(script);
return () => {
document.head.removeChild(script);
};
}, [userId, userEmail]);
return null;
}
// Chatwoot WebhookをNext.jsで受信してSlackに転送
// app/api/chatwoot-webhook/route.ts
export async function POST(req: Request) {
const payload = await req.json();
// 新規会話開始時にSlack通知
if (payload.event === "conversation_created") {
const conv = payload.data;
await fetch(process.env.SLACK_WEBHOOK_URL!, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
blocks: [
{
type: "section",
text: {
type: "mrkdwn",
text: `*新規問い合わせ* #${conv.id}
*From:* ${conv.meta?.sender?.name}
*メッセージ:* ${conv.messages?.[0]?.content}`,
},
accessory: {
type: "button",
text: { type: "plain_text", text: "Chatwootで確認" },
url: `${process.env.CHATWOOT_URL}/app/accounts/1/conversations/${conv.id}`,
},
},
],
}),
});
}
return Response.json({ ok: true });
}
Papercups
Elixir(Phoenix)製の開発者フレンドリーなライブチャットツールです。GitHubスター5.7k+。軽量でReact/Vue/Angular用のSDKが充実しており、Slackとの双方向連携(Slackから直接顧客に返信)が特徴です。
# Papercupsをdocker-composeで起動
version: "3"
services:
app:
image: papercups/papercups:latest
ports:
- "4000:4000"
environment:
DATABASE_URL: ecto://papercups:papercups_pass@postgres/papercups_prod
SECRET_KEY_BASE: "your-64-char-secret"
BACKEND_URL: https://chat.yoursite.com
MIX_ENV: prod
SLACK_CLIENT_ID: your-slack-client-id
SLACK_CLIENT_SECRET: your-slack-client-secret
depends_on:
- postgres
postgres:
image: postgres:16-alpine
environment:
POSTGRES_DB: papercups_prod
POSTGRES_USER: papercups
POSTGRES_PASSWORD: papercups_pass
volumes:
- papercups_db:/var/lib/postgresql/data
volumes:
papercups_db:
// PapercupsウィジェットをNext.jsに埋め込む
// npm install @papercups-io/chat-widget
import ChatWidget from "@papercups-io/chat-widget";
export function PapercupsWidget() {
return (
<ChatWidget
accountId={process.env.NEXT_PUBLIC_PAPERCUPS_ACCOUNT_ID!}
baseUrl={process.env.NEXT_PUBLIC_PAPERCUPS_URL!}
title="サポートチームへ"
subtitle="通常2時間以内に返答します"
primaryColor="#6366f1"
greeting="こんにちは!何かお手伝いできますか?"
newMessagePlaceholder="メッセージを入力..."
showAgentAvailability={true}
agentAvailableText="現在対応可能"
agentUnavailableText="現在対応時間外"
requireEmailUpfront={false}
iconVariant="outlined"
/>
);
}
Zammad
チケット管理とライブチャットを統合したエンタープライズ向けサポートプラットフォームです。GitHubスター4.3k+。メール・電話・チャット・SNSを統合した本格的なヘルプデスクシステムで、SLAトラッキング・エスカレーション・知識ベース・レポートまで対応します。
# Zamadをdocker-composeで起動
version: "3"
services:
zammad-railsserver:
image: zammad/zammad-docker-compose:latest
restart: always
ports:
- "8080:8080"
environment:
MEMCACHE_SERVERS: zammad-memcached:11211
REDIS_URL: redis://zammad-redis:6379
POSTGRESQL_HOST: zammad-postgresql
POSTGRESQL_PASS: zammad_pass
depends_on:
- zammad-postgresql
- zammad-redis
- zammad-memcached
zammad-postgresql:
image: postgres:15-alpine
environment:
POSTGRES_USER: zammad
POSTGRES_PASSWORD: zammad_pass
volumes:
- zammad_db:/var/lib/postgresql/data
zammad-redis:
image: redis:7-alpine
volumes:
- zammad_redis:/data
zammad-memcached:
image: memcached:alpine
volumes:
zammad_db:
zammad_redis:
機能比較表
| 比較項目 | Chatwoot | Papercups | Zammad |
|---|---|---|---|
| ライセンス | MIT | MIT | AGPL-3.0 |
| ライブチャット | ✅ | ✅ | ✅ |
| メール統合 | ✅ | ✅ | ✅ 高機能 |
| Twitter/X連携 | ✅ | ❌ | ❌ |
| WhatsApp連携 | ✅ | ❌ | ❌ |
| Slack双方向連携 | ✅ | ✅ | ❌ |
| チケット管理 | ✅ | ❌ | ✅ 高機能 |
| SLAトラッキング | ❌ | ❌ | ✅ |
| 知識ベース | ✅ | ❌ | ✅ |
| CSAT計測 | ✅ | ❌ | ✅ |
| 最小RAM | 2GB | 512MB | 4GB |
| GitHub Stars | 21k+ | 5.7k+ | 4.3k+ |
Chatwootの自動応答と連携するワークフロー自動化はopen-source-workflow-automation(/categories/low-code)を参照。チャットで受け取った問い合わせのCRM管理はcommunicationカテゴリ(/categories/communication)でまとめています。
FAQ
Q. ChatwootとIntercomの機能を具体的に比べると何が違いますか?
A. 主な差分を整理します。Chatwootにあってほぼ同等: ライブチャットウィジェット・メール統合・チームの振り分け・カスタムボット設定・CSAT計測・モバイルアプリ(iOS/Android)・Slackへの通知。Intercomにあってない機能: ①プロダクトツアー(画面上のガイド機能)②高度なユーザーセグメンテーション(月額課金額でフィルタ等)③ABテスト付きのメール自動配信シーケンス④機械学習による問い合わせ自動振り分け(Resolution Bot)。コスト比較: Intercom Starter $39/月→Chatwoot セルフホスト$0(サーバー代$20/月程度)。機能の80%を1/5以下のコストで実現できます。小〜中規模スタートアップにはChatwootで十分なケースがほとんどです。
Q. ChatwootでWhatsApp Business APIを統合する方法は?
A. ChatwootのWhatsApp連携はMeta Business APIを使います。設定手順: ①Meta for Developersでビジネスアカウントと「WhatsApp Business API」を有効化②Chatwootの設定→受信ボックス→WhatsApp→「WhatsApp Cloud API」を選択③Meta App IDとApp Secret・Phone Number IDを入力④WebhookをChatwootに向ける: https://support.yoursite.com/webhooks/whatsapp⑤Verify Tokenを設定して接続を確認。注意点: WhatsApp Business APIの利用には「ビジネス認証」(Facebookビジネスページの審査)が必要で、審査に1〜2週間かかる場合があります。費用: Meta側でテンプレートメッセージ送信は有料(日本円で1通数円〜数十円)、顧客からのメッセージへの返信は24時間以内なら無料。
Q. Zamadのチケットシステムで優先度・SLA・エスカレーションを設定する方法は?
A. Zamaddの管理画面から設定します。SLA設定: ①管理→SLA→新規SLAで「ファーストレスポンス時間」「解決時間」を設定②チケットの優先度(低・通常・高・緊急)ごとに異なるSLA期限を設定③期限超過時に担当者・マネージャーにメール通知。エスカレーション: ①「エスカレーション」→担当者が未返答で一定時間経過したら上位チームに自動割り当て②Slackチャンネルにもエスカレーション通知を送信(WebhookでSlack連携)。チケットの自動トリガー: 「タグ=VIP」なら優先度を「緊急」に自動変更・「件名に"解約"を含む」なら担当マネージャーにアサイン。小規模チーム(5人以下)にはZamaddはオーバースペックになりがち。ChatwootかPapercupsが適切です。
Q. Chatwootのマルチチャンネル受信ボックスでTwitter/XのDM対応を設定するには?
A. Chatwootの設定→受信ボックス→Twitterで設定します。必要なもの: ①Twitter Developer AccountでAppを作成②「Read + Write + Direct Messages」権限を付与③「Consumer Key(API Key)」「Consumer Secret」「Access Token」「Access Token Secret」を取得。Chatwootへの設定: ①設定→受信ボックス→「Twitterアカウントを追加」②上記のAPIキーを入力③Webhookを設定: https://support.yoursite.com/twitter/callback。制限事項: Twitter/X APIの無料プランではDM読み取りが制限されています(月500万ツイートリード等)。DM対応にはBasic以上のAPIプランが必要(月$100〜)。コスト対効果を考えると、Twitterサポートが主要チャンネルでないなら、まずメール+ライブチャットから始めることを推奨します。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| マルチチャンネル・全機能 | Chatwoot |
| 軽量・Slack双方向連携 | Papercups |
| 本格ヘルプデスク・SLA管理 | Zammad |
| Intercom代替のファースト選択 | Chatwoot |