Skip to content

필사 모드: チャットボットフレームワーク 2026 — Slack Bolt / discord.js / Discord.py(復活)/ JDA / py-cord / Telegram / LINE / KakaoTalk 徹底ガイド

日本語
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.
원문 렌더가 준비되기 전까지 텍스트 가이드로 표시합니다.

プロローグ — チャットボットは道具ではなくインフラになった

2018年頃のチャットボットは「楽しいサイドプロジェクト」だった。2026年は違う。会社の Slack には通知ボット・デプロイボット・インシデントボット・LLM アシスタントが並び、コミュニティの Discord にはモデレーションボット・ロールボット・チケットボット・ミュージックボットが並び、KakaoTalk ビジネスチャンネルにはサポートボット・予約ボット・決済ボットが並ぶ。**チャットボットはもう道具ではなく、ユーザーが最初に出会うインターフェースになった。**

ところが実際に作ろうとすると詰まる。Slack ボットは Bolt を使えばいい — Bolt Node、Bolt Python、Bolt Java のどれを使う?Discord ボットは discord.js を使えばいいけど、Python チームに Node を強制はできない — じゃあ Discord.py?ところで Discord.py は 2021年に deprecate されたんじゃなかった?なら py-cord?nextcord?韓国市場は?KakaoTalk Channel API はどんな形?日本は LINE Messaging API だけど、東京チームが KARTE Talk Bot を使いたいと言ったら?

この記事は 2026年現在のチャットボットフレームワーク地図を描く。どのプラットフォーム・言語・ライセンス・生存性を持っているか、そして会社の Slack・コミュニティ Discord・KakaoTalk ビジネスを作るとき、誰が何を選ぶべきか — そこまで踏み込む。

1. 2026年のチャットボットフレームワーク地図 — プラットフォーム / 言語別

まずは全体像。**プラットフォーム**(Slack・Discord・Telegram・…)と **言語**(JS・Python・Java・Rust・…)の二軸で整理する。

| プラットフォーム | Node.js | Python | Java | Rust | .NET |

| --- | --- | --- | --- | --- | --- |

| Slack | Bolt Node | Bolt Python | Bolt Java | (なし) | (なし) |

| Discord | discord.js / eris | discord.py / py-cord / nextcord | JDA / Discord4J | serenity | DSharpPlus / Discord.Net |

| Matrix | matrix-bot-sdk | matrix-nio | (サードパーティ) | (サードパーティ) | (サードパーティ) |

| Mattermost | mattermost-client | mattermostdriver | (サードパーティ) | (サードパーティ) | (サードパーティ) |

| Rocket.Chat | rocket.chat.js | rocket-python | (サードパーティ) | (サードパーティ) | (サードパーティ) |

| Telegram | Telegraf / node-telegram-bot-api | python-telegram-bot / aiogram | TelegramBots | teloxide | Telegram.Bot |

| WhatsApp | Meta Cloud API (HTTP) | Meta Cloud API (HTTP) | Meta Cloud API (HTTP) | Meta Cloud API (HTTP) | Meta Cloud API (HTTP) |

| LINE | line-bot-sdk-nodejs | line-bot-sdk-python | line-bot-sdk-java | (サードパーティ) | line-bot-sdk-net |

| KakaoTalk Channel | (HTTP) | (HTTP) | (HTTP) | (HTTP) | (HTTP) |

見えてくるパターン:

1. **Slack は Bolt に統一された。** Node・Python・Java すべて公式 SDK があり、ほぼ同じ API を提供する。「Slack ボットは Bolt」の一行で終わる。

2. **Discord は言語陣営で分かれる。** JS は discord.js、Python は discord.py(復活)/ py-cord / nextcord、Java は JDA / Discord4J、Rust は serenity、.NET は DSharpPlus / Discord.Net。**社内標準言語が先で、ライブラリは後**。

3. **Telegram にも分岐がある。** Python の同期系は python-telegram-bot、asyncio ネイティブは aiogram。Node は Telegraf が事実上の標準。

4. **WhatsApp・LINE・KakaoTalk は HTTP API。** 公式 SDK は補助で、本質は webhook と HTTP リクエスト。言語依存は薄い。

5. **Matrix・Mattermost・Rocket.Chat はセルフホスティング陣営。** エンタープライズ・オープンソースの通信に使われる。

2. Slack Bolt — Node/Python/Java 公式、社内ボットの統一標準

Slack の公式ボットフレームワークは **Bolt** だ。2019年に Node 版が登場し、その後 Python・Java 版が加わり、いまや三つとも公式。Slack はわざと三つの SDK の API を揃えているので、言語間の移行コストが小さい。

Bolt Node の最小骨格

const app = new App({

token: process.env.SLACK_BOT_TOKEN,

signingSecret: process.env.SLACK_SIGNING_SECRET,

socketMode: true,

appToken: process.env.SLACK_APP_TOKEN,

});

// スラッシュコマンド

app.command('/hello', async ({ command, ack, respond }) => {

await ack();

await respond(`こんにちは、<@${command.user_id}>さん!`);

});

// メッセージイベント

app.message('ヘルプ', async ({ message, say }) => {

await say('何かお手伝いできますか?');

});

// インタラクティブボタン

app.action('button_click', async ({ ack, body, respond }) => {

await ack();

await respond('ボタンが押されました');

});

(async () => {

await app.start();

console.log('Bolt アプリ起動中');

})();

Bolt Python — 同じ形

from slack_bolt import App

from slack_bolt.adapter.socket_mode import SocketModeHandler

app = App(token=os.environ["SLACK_BOT_TOKEN"])

@app.command("/hello")

def handle_hello(ack, respond, command):

ack()

respond(f"こんにちは、<@{command['user_id']}>さん!")

@app.message("ヘルプ")

def handle_help(message, say):

say("何かお手伝いできますか?")

@app.action("button_click")

def handle_button(ack, respond):

ack()

respond("ボタンが押されました")

if __name__ == "__main__":

SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()

API の形がほぼ同じ。デコレーター名もパラメータ名もほとんど揃っている。

Bolt Java — エンタープライズ向け

public class SlackBotApp {

public static void main(String[] args) {

var config = new AppConfig();

config.setSigningSecret(System.getenv("SLACK_SIGNING_SECRET"));

config.setSingleTeamBotToken(System.getenv("SLACK_BOT_TOKEN"));

var app = new App(config);

app.command("/hello", (req, ctx) -> {

return ctx.ack("こんにちは、" + req.getPayload().getUserName() + "さん!");

});

var server = new com.slack.api.bolt.jetty.SlackAppServer(app);

try { server.start(); } catch (Exception e) { e.printStackTrace(); }

}

}

Socket Mode vs HTTP Mode

Bolt には二つの運用モードがある。

- **Socket Mode**: ボットが Slack に WebSocket で outbound 接続する。社内ネットワークで inbound ポートを開けなくても運用できる。開発・小規模ボットに最適。

- **HTTP Mode**: Slack が webhook をボットの URL に送ってくる。公開 HTTPS エンドポイントが必要。本番・大規模向け。

会社の Slack ボットを始めるなら Socket Mode が圧倒的に楽。トラフィックが増えたら HTTP Mode に移すのが定石。

誰がどの言語を選ぶか

- **社内標準が Node**: Bolt Node。Slack の新機能は通常ここに最初に来る。

- **社内標準が Python(特にデータチーム)**: Bolt Python。社内のデータ・LLM コードと合わせやすい。

- **社内標準が Java(大企業)**: Bolt Java。Spring 統合も無難。

三言語とも同じ会社が直接保守しており、新機能リリースの lag はほぼない。**言語を選んだ時点で Bolt を選んだことになる。**

3. discord.js — Node.js Discord の標準

Discord ボットの Node.js 陣営は **discord.js** が事実上独占している。2025年中盤に v14 が安定化し、2026年現在 v15 が活発に開発中。スラッシュコマンド・ボタン・セレクトメニュー・モーダル・スレッド・フォーラムチャンネル・自動モデレーションまで、Discord の新機能をほぼすべて素早く取り込む。

最小骨格

const client = new Client({

intents: [

GatewayIntentBits.Guilds,

GatewayIntentBits.GuildMessages,

GatewayIntentBits.MessageContent,

],

});

client.once('ready', () => {

console.log(`ログイン完了: ${client.user?.tag}`);

});

// スラッシュコマンドを登録

const ping = new SlashCommandBuilder()

.setName('ping')

.setDescription('レイテンシ測定');

client.on('interactionCreate', async (interaction) => {

if (!interaction.isChatInputCommand()) return;

if (interaction.commandName === 'ping') {

const ms = Date.now() - interaction.createdTimestamp;

await interaction.reply(`Pong (${ms}ms)`);

}

});

client.login(process.env.DISCORD_TOKEN);

Intents — 権限モデル

Discord は、ボットが受け取りたいイベントを明示する必要がある。**MessageContent intent** は 2022年に privileged intent になり、100 サーバーを超えるボットは Discord の承認が必要。小規模ボットは自動承認。

Sharding — 大規模ボットの運用

ボットが 2500 サーバーを超えると Discord は sharding を要求する。discord.js は `ShardingManager` を組み込みで提供しており、シャードをプロセス単位で起動できる。

const manager = new ShardingManager('./bot.js', {

totalShards: 'auto',

token: process.env.DISCORD_TOKEN,

});

manager.on('shardCreate', (shard) => console.log(`シャード ${shard.id} 起動`));

manager.spawn();

なぜ discord.js が勝ったか

- **TypeScript ファーストクラス**: v14 以降、型が非常に正確。

- **Discord の新機能を first-class でサポート**: API 変更後、数日以内に反映されることが多い。

- **巨大なエコシステム**: ボイラープレート・CLI ジェネレーター・コグ風フレームワーク・DB アダプター。

- **eris より一段抽象度が高い**: メッセージコンポーネント・インタラクションが扱いやすい。

discord.js が合わない場面: メモリフットプリントを極小にしたい(共有ホスティング)、または raw gateway に近く触りたいとき。そのときは eris を見る。

4. Discord.py 復活(2024年4月、Rapptz)— deprecate からの帰還

Discord.py は Python Discord ボットのゴールドスタンダードだった。ところが **2021年8月**、メンテナーの Rapptz(Danny Garcia)が「これ以上維持しない」と宣言し、GitHub リポジトリを archive にした。理由は Discord がメッセージコンテンツを privileged intent に変更し、100 サーバー超のボットは Discord 承認が必要になったこと — Rapptz はこの変更が音楽ボットなどのカテゴリを殺すと公に反対し、ライブラリ維持の道徳的負担を理由に去った。

Python Discord エコシステムはパニックになった。何万ものボットが discord.py に依存しており、スラッシュコマンド・インタラクション・スレッドといった新機能はライブラリの更新なしには使えない。

2年半の空白

2021年8月から 2024年4月までの約2年半、discord.py は事実上停止していた。その間にコミュニティは **fork** を複数生み出した(次章)。発展したものもあれば、消えたものもある。

2024年4月 — 復活

**2024年4月**、Rapptz は discord.py を再開すると発表。Discord が音楽ボット周りのポリシーを一部緩和し、本人の心の整理もついた、というのが理由だった。発表当日、Twitter・Reddit・Discord 開発者サーバーは沸き返った。

復活後、discord.py は急速に追いついた。

- スラッシュコマンド(`app_commands`)

- モーダル・セレクトメニュー

- スレッド・フォーラムチャンネル

- ボイス v3 API

- ボイス受信(ライブラリで対応)

2026年現在、**discord.py 2.x** は再び Python Discord ボットの事実上の標準だ。

最小骨格

from discord import app_commands

from discord.ext import commands

intents = discord.Intents.default()

intents.message_content = True

bot = commands.Bot(command_prefix='!', intents=intents)

@bot.event

async def on_ready():

print(f'ログイン完了: {bot.user}')

await bot.tree.sync()

@bot.tree.command(name='ping', description='レイテンシ測定')

async def ping(interaction: discord.Interaction):

latency = round(bot.latency * 1000)

await interaction.response.send_message(f'Pong ({latency}ms)')

bot.run('YOUR_TOKEN')

Cogs — モジュールシステム

`commands.Cog` はコマンド・イベント・リスナーをクラスにまとめるモジュールシステム。大きなボットを作るならほぼ必須。

from discord.ext import commands

from discord import app_commands

class Moderation(commands.Cog):

def __init__(self, bot):

self.bot = bot

@app_commands.command(name='kick', description='ユーザーを追放')

async def kick(self, interaction: discord.Interaction, member: discord.Member):

await member.kick()

await interaction.response.send_message(f'{member} を追放しました')

async def setup(bot):

await bot.add_cog(Moderation(bot))

誰が discord.py を選ぶか

- 既存の Python 資産が大きいチーム

- LLM・データパイプラインとボットを同じコードベースで運用

- Rapptz の設計思想と合うとき(明示的・型安全・「マジック少なめ」)

5. py-cord / nextcord — 不在期に生まれた fork

discord.py が止まっていた2年半の間に、fork がいくつか生まれた。生き残ったのは二つ。

py-cord — 最大の fork

**py-cord** は fork のうち最も大きなコミュニティを集めた。2021年末に始まり、スラッシュコマンド・インタラクションを積極的に取り込んだ。API は discord.py に近いが、一部の判断(ボイス処理・名前衝突の解決)で分岐した。

from discord.ext import commands

bot = commands.Bot()

@bot.slash_command(name='ping', description='レイテンシ')

async def ping(ctx: discord.ApplicationContext):

await ctx.respond(f'Pong ({round(bot.latency * 1000)}ms)')

bot.run('TOKEN')

py-cord はスラッシュコマンド対応が早く深く、不在期に多くのボットが移ってきた。

nextcord — もうひとつの fork

**nextcord** は py-cord より少しだけ discord.py に近い形で留まった fork。保守的・段階的な変更を好む。

from nextcord.ext import commands

bot = commands.Bot(command_prefix='!')

@bot.slash_command(description='レイテンシ')

async def ping(interaction: nextcord.Interaction):

await interaction.send(f'Pong')

bot.run('TOKEN')

本家復活後 — fork の運命

2024年4月に本家が戻ると、fork の価値提案は弱まった。py-cord はいまも活発だが、**新規プロジェクトは再び discord.py に向かう**のが一般的だ。nextcord は開発が鈍化している。

ただし、既存の py-cord / nextcord ボットは移行コストのためにその場に残る。2026年の判断:

| 状況 | 推奨 |

| --- | --- |

| 新規 Python Discord ボット | discord.py |

| 既存の py-cord ボット | 維持(現在も活発) |

| 既存の nextcord ボット | 移行を検討(開発が鈍化) |

6. JDA / Discord4J — Java 陣営

Java で Discord ボットを作る人は、二つのライブラリのどちらかを選ぶ。

JDA — 命令型の標準

**JDA**(Java Discord API)は Java Discord ボットの事実上の標準。命令型 API、強い型、豊富なドキュメント。

public class Bot extends ListenerAdapter {

public static void main(String[] args) throws Exception {

JDABuilder.createDefault(System.getenv("DISCORD_TOKEN"))

.enableIntents(GatewayIntent.MESSAGE_CONTENT)

.addEventListeners(new Bot())

.build();

}

@Override

public void onReady(ReadyEvent event) {

System.out.println("ログイン: " + event.getJDA().getSelfUser().getAsTag());

}

}

JDA には Spring・Quarkus 統合ライブラリが別途あり、エンタープライズで慣れたパターンが使える。

Discord4J — リアクティブ

**Discord4J** は Project Reactor ベースで、すべてをリアクティブストリームとして表現する。Reactor / WebFlux に慣れたチームには非常に自然。

public class Bot {

public static void main(String[] args) {

var client = DiscordClient.create(System.getenv("DISCORD_TOKEN"))

.login()

.block();

client.on(MessageCreateEvent.class, event -> {

var message = event.getMessage();

if (message.getContent().equals("!ping")) {

return message.getChannel()

.flatMap(channel -> channel.createMessage("Pong"));

}

return reactor.core.publisher.Mono.empty();

}).blockLast();

}

}

誰がどちらを選ぶか

| チームの傾向 | 推奨 |

| --- | --- |

| Spring Boot 正統、命令型 | JDA |

| Reactor / WebFlux 使用中 | Discord4J |

| とにかく Java で早く作りたい | JDA(学習曲線が緩い) |

| 大量同時イベント処理 | Discord4J(バックプレッシャー) |

7. serenity(Rust)/ DSharpPlus + discord.net(.NET)/ eris

serenity — Rust Discord 標準

**serenity** は Rust Discord ボットの標準。async/await ベース、強い型、メモリ安全。大規模ボット・リソース制約環境で人気。

use serenity::async_trait;

use serenity::model::channel::Message;

use serenity::prelude::*;

struct Handler;

#[async_trait]

impl EventHandler for Handler {

async fn message(&self, ctx: Context, msg: Message) {

if msg.content == "!ping" {

if let Err(why) = msg.channel_id.say(&ctx.http, "Pong").await {

println!("送信失敗: {:?}", why);

}

}

}

}

#[tokio::main]

async fn main() {

let token = std::env::var("DISCORD_TOKEN").expect("トークンなし");

let intents = GatewayIntents::GUILD_MESSAGES | GatewayIntents::MESSAGE_CONTENT;

let mut client = Client::builder(&token, intents)

.event_handler(Handler)

.await

.expect("クライアント生成失敗");

if let Err(why) = client.start().await {

println!("実行エラー: {:?}", why);

}

}

DSharpPlus / Discord.Net — .NET の二大ライブラリ

.NET 陣営には二つのライブラリが共存する。

- **DSharpPlus**: 新機能を早く取り込む傾向。

- **Discord.Net**: より古く、大型ボットで使われる。スラッシュコマンド対応も安定。

using Discord;

using Discord.WebSocket;

var client = new DiscordSocketClient(new DiscordSocketConfig {

GatewayIntents = GatewayIntents.AllUnprivileged | GatewayIntents.MessageContent

});

client.Log += msg => { Console.WriteLine(msg.ToString()); return Task.CompletedTask; };

client.MessageReceived += async msg => {

if (msg.Content == "!ping") await msg.Channel.SendMessageAsync("Pong");

};

await client.LoginAsync(TokenType.Bot, Environment.GetEnvironmentVariable("DISCORD_TOKEN"));

await client.StartAsync();

await Task.Delay(-1);

eris — 旧 Node、それでも一部に残る

**eris** は discord.js より前世代の Node Discord ライブラリ。より低レベルに近く、メモリ効率が良いため、一部の大規模ボットはいまも使う。新規ならまず discord.js を勧める。

const Eris = require('eris');

const bot = new Eris(process.env.DISCORD_TOKEN, {

intents: ['guilds', 'guildMessages', 'messageContent'],

});

bot.on('ready', () => console.log('準備完了'));

bot.on('messageCreate', (msg) => {

if (msg.content === '!ping') bot.createMessage(msg.channel.id, 'Pong');

});

bot.connect();

8. Matrix bots — matrix-nio(Python)/ matrix-bot-sdk(Node)

Matrix はオープンプロトコルなので、SDK が複数の言語に分散している。ボット作りに最もよく使われるのは二つ。

matrix-nio — Python 非同期

from nio import AsyncClient, MatrixRoom, RoomMessageText

async def message_callback(room: MatrixRoom, event: RoomMessageText):

if event.body == "!ping":

await client.room_send(

room_id=room.room_id,

message_type="m.room.message",

content={"msgtype": "m.text", "body": "Pong"},

)

client = AsyncClient("https://matrix.example.org", "@bot:example.org")

client.add_event_callback(message_callback, RoomMessageText)

matrix-bot-sdk — Node

const client = new MatrixClient(

'https://matrix.example.org',

process.env.MATRIX_TOKEN!,

new SimpleFsStorageProvider('bot.json'),

);

client.on('room.message', async (roomId, event) => {

if (!event.content || event.sender === (await client.getUserId())) return;

if (event.content.body === '!ping') {

await client.sendMessage(roomId, { msgtype: 'm.text', body: 'Pong' });

}

});

client.start();

Matrix を使うのは誰か

- オープンソースコミュニティ(Mozilla・KDE・GNOME など)

- 政府・公共(フランスの Tchap、ドイツの BWMessenger)

- フェデレーションが重要な組織

エンタープライズ Slack 代替として Matrix(+ Element クライアント)を選ぶところも増えた。ボット作成の難易度は Slack・Discord より少し高いが、自前ホスティング・フェデレーション・E2EE が大きな利点。

9. Mattermost / Rocket.Chat — エンタープライズチャット

Mattermost — Slack 代替の代表

**Mattermost** はセルフホスティング Slack 代替として最もよく使われる。ボット API は Slack に非常に近い。

from mattermostdriver import Driver

driver = Driver({

'url': 'mattermost.example.com',

'token': 'BOT_TOKEN',

'scheme': 'https',

'port': 443,

})

driver.login()

メッセージ送信

driver.posts.create_post({

'channel_id': 'CHANNEL_ID',

'message': 'こんにちは',

})

Mattermost はスラッシュコマンド・インタラクティブメッセージ・webhook をすべてサポート。Slack ボットコードを移植しやすい。

Rocket.Chat — もうひとつの陣営

**Rocket.Chat** も別のオープンソース・セルフホスティングメッセンジャー。Rocket.Chat Apps Engine でボットを作るか、REST API + webhook で作る。

const { RocketChatApp } = require('@rocket.chat/apps-engine/definition/RocketChatApp');

class HelloApp extends RocketChatApp {

async executeSlashCommand(context, read, modify) {

const sender = context.getSender();

const room = context.getRoom();

const builder = modify.getCreator().startMessage()

.setSender(sender)

.setRoom(room)

.setText('こんにちは!');

await modify.getCreator().finish(builder);

}

}

Mattermost / Rocket.Chat を使うのは誰か

- データ主権が必要な政府・公共

- Slack のライセンスコストを避けたい大規模組織

- 軍・金融など規制環境

10. Telegram — python-telegram-bot / Telegraf(Node)/ aiogram

Telegram Bot API は HTTP ベースで、どの言語からでも使えるが、言語ごとに標準ライブラリがある。

python-telegram-bot — Python の同期/非同期

最も古く、最大の Python Telegram ライブラリ。2022年の v20 から本格的に非同期化。

from telegram import Update

from telegram.ext import Application, CommandHandler, ContextTypes

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):

await update.message.reply_text('こんにちは!')

app = Application.builder().token('YOUR_TOKEN').build()

app.add_handler(CommandHandler('start', start))

app.run_polling()

Telegraf — Node の標準

const bot = new Telegraf(process.env.TELEGRAM_TOKEN!);

bot.start((ctx) => ctx.reply('こんにちは!'));

bot.command('ping', (ctx) => ctx.reply('Pong'));

bot.launch();

aiogram — asyncio ネイティブ Python

asyncio 優先設計。大規模・同時実行の多いボットに向く。

from aiogram import Bot, Dispatcher, types

from aiogram.filters import Command

bot = Bot(token='YOUR_TOKEN')

dp = Dispatcher()

@dp.message(Command('start'))

async def handle_start(message: types.Message):

await message.answer('こんにちは!')

async def main():

await dp.start_polling(bot)

asyncio.run(main())

誰が何を選ぶか

| 状況 | 推奨 |

| --- | --- |

| 新規 Python Telegram ボット | python-telegram-bot(コミュニティ最大) |

| 高同時実行・async-first | aiogram |

| Node 環境 | Telegraf |

| 豊富な TypeScript 型 | Telegraf(型定義が秀逸) |

11. WhatsApp Cloud API(Meta)

WhatsApp ビジネスメッセージは 2022年以降、**Meta が直接運営する Cloud API** が標準になった。以前は BSP(Business Solution Provider)を経由する必要があったが、いまは Meta Cloud API に直接統合する。

基本フロー

1. Meta for Developers でアプリを作成

2. WhatsApp Business Account(WABA)を接続

3. 電話番号を登録・認証

4. webhook URL を登録(メッセージ受信)

5. Graph API でメッセージ送信

メッセージ送信例(HTTP)

curl -X POST "https://graph.facebook.com/v18.0/PHONE_NUMBER_ID/messages" \

-H "Authorization: Bearer ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-d '{

"messaging_product": "whatsapp",

"to": "819012345678",

"type": "text",

"text": {"body": "こんにちは"}

}'

テンプレートメッセージ — 24時間ウィンドウの外

WhatsApp には **24時間ウィンドウ** ルールがある。ユーザーが最後にメッセージを送ってから24時間を超えると、自由形式のメッセージは送れず、**事前承認されたテンプレート**のみ送れる。

curl -X POST "https://graph.facebook.com/v18.0/PHONE_NUMBER_ID/messages" \

-H "Authorization: Bearer ACCESS_TOKEN" \

-H "Content-Type: application/json" \

-d '{

"messaging_product": "whatsapp",

"to": "819012345678",

"type": "template",

"template": {

"name": "order_confirmation",

"language": {"code": "ja"}

}

}'

WhatsApp を使うのは誰か

- 東南アジア・インド・南米・欧州市場のビジネス

- グローバル SaaS の通知チャンネル

- 日本市場では限定的(LINE が支配)

12. LINE Messaging API

**LINE** は日本・台湾・タイで支配的なメッセンジャーで、ビジネスボット・公式アカウントは LINE Messaging API で作る。

基本フロー

1. LINE Developers で Provider とチャネルを作成

2. Messaging API チャネルを有効化

3. Channel Access Token を発行

4. webhook URL を登録

5. SDK または HTTP でメッセージ送信

Node SDK 例

const config = {

channelAccessToken: process.env.LINE_ACCESS_TOKEN!,

channelSecret: process.env.LINE_CHANNEL_SECRET!,

};

const client = new Client(config);

const app = express();

app.post('/webhook', middleware(config), async (req, res) => {

const events = req.body.events;

for (const event of events) {

if (event.type === 'message' && event.message.type === 'text') {

await client.replyMessage(event.replyToken, {

type: 'text',

text: `エコー: ${event.message.text}`,

});

}

}

res.sendStatus(200);

});

app.listen(3000);

Python SDK 例

from linebot import LineBotApi, WebhookHandler

from linebot.models import MessageEvent, TextMessage, TextSendMessage

from flask import Flask, request

app = Flask(__name__)

line_bot_api = LineBotApi('YOUR_ACCESS_TOKEN')

handler = WebhookHandler('YOUR_CHANNEL_SECRET')

@app.route('/webhook', methods=['POST'])

def webhook():

signature = request.headers['X-Line-Signature']

body = request.get_data(as_text=True)

handler.handle(body, signature)

return 'OK'

@handler.add(MessageEvent, message=TextMessage)

def handle_message(event):

line_bot_api.reply_message(

event.reply_token,

TextSendMessage(text=f'エコー: {event.message.text}')

)

LINE Rich Menu と Flex Message

LINE の特徴は **Rich Menu**(チャット下部の固定メニュー)と **Flex Message**(JSON DSL で作るカスタム UI)。EC・予約・カスタマーサポートでほぼ標準。

LINE Bot Designer(日本)

日本では **LINE Bot Designer** という GUI ツールで、非エンジニアが Flex Message・シナリオを作れる。マーケティングチームがコードを書かずにボットコンテンツを運営するのに使う。

13. KakaoTalk Channel API

**KakaoTalk Channel**(カカオトークチャンネル)は韓国のビジネスメッセージで圧倒的なシェアを持つ。ただし API モデルは Slack・Discord・LINE とかなり違う。

二種類のメッセージ

1. **KakaoTalk Channel メッセージ** — チャンネルを追加したユーザー向けのマーケティング・お知らせ。ポリシー審査あり。

2. **アラームトーク / フレンドトーク** — 決済・予約・配送などの情報通知。テンプレートの事前登録が必要。BSP(公式の SI / 代理店)を経由して送ることが多い。

Kakao i Open Builder — チャットボットビルダー

**Kakao i Open Builder** は KakaoTalk Channel チャットボットを作る公式ツール。GUI でシナリオ・発話・ブロックを設計し、外部サーバーに webhook で接続する。

ボット応答フロー:

1. ユーザーがチャンネルにメッセージ送信

2. Kakao i Open Builder が発話を解析し、適切なブロックをマッチ

3. ブロックが外部サーバー(スキルサーバー)に webhook 送信

4. スキルサーバーが応答 JSON を返す

5. KakaoTalk にメッセージ送出

スキルサーバー例(Python Flask)

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/skill/order-status', methods=['POST'])

def order_status():

data = request.json

user_id = data['userRequest']['user']['id']

utterance = data['userRequest']['utterance']

実際には DB 参照

status = '配送中'

response = {

'version': '2.0',

'template': {

'outputs': [{

'simpleText': {

'text': f'注文状態: {status}'

}

}]

}

}

return jsonify(response)

if __name__ == '__main__':

app.run(port=5000)

アラームトーク送信フロー

アラームトークは韓国の情報通信網法の関係で、情報性/広告性の区別が厳格。送信フロー:

1. 発信プロフィール登録(事業者登録証が必要)

2. テンプレート登録・審査(Kakao 検収、数日)

3. 承認テンプレートのみで送信可能

4. 変数のみ置換して本文送信

韓国ビジネスが KakaoTalk を避けられない理由

- 韓国メッセンジャー市場シェアが圧倒的

- ユーザーが日常的に毎日使うメッセンジャー

- 決済・認証・カスタマーサポートまで Kakao エコシステムで完結

代わりにポリシー審査・テンプレート承認など、Slack・Discord より運用コストが大きい。

14. 韓国 / 日本 — KakaoTalk Channel、LINE ボット、KARTE Talk Bot

韓国 — KakaoTalk + アラームトーク + チャットボットビルダー

韓国のビジネスボットスタックはほぼこのパターン。

- マーケティング・お知らせ: KakaoTalk Channel メッセージ

- 情報通知(決済・配送・予約): アラームトーク(BSP 経由)

- チャットボット(サポート・FAQ): Kakao i Open Builder + スキルサーバー

- 社内コラボレーション: Slack または JANDI

日本 — LINE 圧倒的

日本のビジネスボットスタック。

- マーケティング・顧客対応: LINE 公式アカウント

- チャットボット: LINE Messaging API + 自前サーバー、または LINE Bot Designer

- マーケティングオートメーション: KARTE Talk Bot(KARTE のチャットボット機能)

- 社内コラボレーション: Slack・Microsoft Teams・Chatwork

KARTE Talk Bot — 日本 SaaS の事例

KARTE は日本の大手 CX(カスタマーエクスペリエンス)プラットフォームで、その中に Talk Bot というチャットボット機能がある。マーケティングオートメーション・セグメンテーションとチャットボットを一体運用したいときに選ぶ。日本の EC・メディアサイトでよく見る。

多国籍ボットの現実

グローバルサービスを作ると、一つのボットが Slack・Discord・LINE・KakaoTalk・Telegram すべてを扱う必要が出る。だいたいこのパターン。

1. **共通ボットコア**: ビジネスロジック・状態管理・LLM 呼び出し — 自前サービス。

2. **プラットフォームアダプター**: 各プラットフォーム個別の webhook・メッセージ変換 — 薄い層。

3. **メッセージ正規化**: テキスト・画像・ボタン・カードを共通モデルに。

これを内製するチームもあれば、Sendbird・Customer.io・Twilio Conversations のようなマルチチャネル SaaS を使うチームもある。

15. 誰が何を選ぶべきか — 会社の Slack / コミュニティ Discord / KakaoTalk ビジネス

最後にシナリオ別の推奨構成。

会社の Slack ボット(社内ツール)

- **社内標準 Node**: Bolt Node + Socket Mode

- **社内標準 Python**: Bolt Python + Socket Mode

- **社内標準 Java / Kotlin**: Bolt Java

- **開始コスト最小化**: Socket Mode、単一ワークスペーストークン

社内コラボレーション自前ホスティング

- **Slack 代替セルフホスティング**: Mattermost + Python / Node ボット

- **オープンソース・フェデレーション**: Matrix + matrix-nio

- **無料・軽量オプション**: Rocket.Chat + Apps Engine

コミュニティ Discord ボット

- **Node チーム**: discord.js

- **Python チーム**: discord.py(復活後安定、新規推奨)、既存 py-cord ボットは維持

- **Java チーム**: JDA(正統)、リアクティブ志向なら Discord4J

- **Rust チーム**: serenity

- **.NET チーム**: DSharpPlus(活発)または Discord.Net(安定)

グローバルメッセージ通知

- **北米・欧州・一般消費者**: WhatsApp Cloud API(ブラジル・インドで圧倒)

- **日本・台湾・タイ**: LINE Messaging API

- **韓国**: KakaoTalk Channel + アラームトーク(BSP 経由)

- **グローバル IT / 開発者**: Telegram(python-telegram-bot / aiogram / Telegraf)

韓国・日本ビジネス統合

- **韓国 B2C**: Kakao i Open Builder + アラームトーク(BSP) + 社内 Slack

- **日本 B2C**: LINE Messaging API + KARTE Talk Bot + 社内 Slack / Teams

- **両国運営**: 共通ボットコア + プラットフォームアダプター(内製または SaaS)

マイグレーションガイド

| 現在 | 推奨移行先 |

| --- | --- |

| Discord.py(2021年以前) | 2.x にアップグレード(復活済み) |

| Discord.py fork(py-cord) | 維持可、新規は discord.py |

| Discord.py fork(nextcord) | discord.py への移行を検討 |

| eris(Node) | discord.js(性能差は縮小) |

| node-telegram-bot-api | Telegraf(型・エコシステム優秀) |

| python-telegram-bot v13 | v20+(非同期化済み) |

16. おわりに — チャットボットはインターフェースの決定だ

チャットボットフレームワーク選びは単なる技術的決定ではなく、**インターフェースの決定**だ。ユーザーがどのメッセンジャーで自分たちと出会うか、自分たちのチームがどの言語で運用を支えられるか、そのメッセンジャーのポリシー環境で生き残れるか。

2026年のまとめ。

- **Slack**: Bolt に統一された。社内ツールの絶対王者。

- **Discord**: コミュニティの絶対王者。言語陣営別にしっかり揃う。Python は discord.py 復活後に再び安定。

- **Matrix / Mattermost / Rocket.Chat**: セルフホスティング・フェデレーションが必要なとき。

- **Telegram**: 開発者コミュニティ・国際ユーザー。

- **WhatsApp / LINE / KakaoTalk**: B2C・地域別。ポリシーコストを覚悟する。

ボットを作ると決めるとき最後にひとつ問う: **このボットを一年後に誰が維持するのか?** チャットボットは作るのは楽だが、運用はしつこい。ユーザーが頼り始めると止めるのも難しい。だからフレームワークの生存性・チームの実力・メッセンジャーのポリシー安定性 — この三つを見て決めるべきだ。

良いボットはユーザーがボットだと気づかないまま使う。それがよく作られたインターフェースの姿だ。

参考 / References

Slack

- Slack Bolt for JavaScript: https://slack.dev/bolt-js/

- Slack Bolt for Python: https://slack.dev/bolt-python/

- Slack Bolt for Java: https://slack.dev/java-slack-sdk/guides/bolt

- Slack API: https://api.slack.com/

Discord — Node

- discord.js: https://discord.js.org/

- discord.js Guide: https://discordjs.guide/

- eris: https://github.com/abalabahaha/eris

Discord — Python

- discord.py: https://github.com/Rapptz/discord.py

- discord.py 復活アナウンス(2024): https://gist.github.com/Rapptz/4a2f62751b9600a31a0d3c78100287f1

- py-cord: https://github.com/Pycord-Development/pycord

- nextcord: https://github.com/nextcord/nextcord

Discord — Java / Rust / .NET

- JDA: https://github.com/discord-jda/JDA

- Discord4J: https://github.com/Discord4J/Discord4J

- serenity (Rust): https://github.com/serenity-rs/serenity

- DSharpPlus: https://github.com/DSharpPlus/DSharpPlus

- Discord.Net: https://github.com/discord-net/Discord.Net

Matrix / Mattermost / Rocket.Chat

- matrix-nio (Python): https://github.com/matrix-nio/matrix-nio

- matrix-bot-sdk (Node): https://github.com/turt2live/matrix-bot-sdk

- Mattermost API: https://api.mattermost.com/

- mattermostdriver (Python): https://vaelor.github.io/python-mattermost-driver/

- Rocket.Chat Apps Engine: https://developer.rocket.chat/

Telegram

- Telegram Bot API: https://core.telegram.org/bots/api

- python-telegram-bot: https://github.com/python-telegram-bot/python-telegram-bot

- aiogram: https://github.com/aiogram/aiogram

- Telegraf: https://github.com/telegraf/telegraf

WhatsApp / LINE / KakaoTalk

- WhatsApp Cloud API: https://developers.facebook.com/docs/whatsapp/cloud-api/

- LINE Messaging API: https://developers.line.biz/en/services/messaging-api/

- LINE Bot SDK Node: https://github.com/line/line-bot-sdk-nodejs

- LINE Bot SDK Python: https://github.com/line/line-bot-sdk-python

- Kakao i Open Builder: https://i.kakao.com/openbuilder

- KakaoTalk Channel Message API: https://developers.kakao.com/docs/latest/ko/message/rest-api

- KARTE Talk: https://karte.io/product/talk/

현재 단락 (1/558)

2018年頃のチャットボットは「楽しいサイドプロジェクト」だった。2026年は違う。会社の Slack には通知ボット・デプロイボット・インシデントボット・LLM アシスタントが並び、コミュニティの ...

작성 글자: 0원문 글자: 23,462작성 단락: 0/558