Skip to content
BotServBotServ
Rocket.ChatBotKI-BotOllamaSelf-HostingHubotOpen Source

Rocket.Chat-Bot mit lokaler KI

Rocket.Chat-Bot mit Ollama bauen: Selbst-gehostete Chat-Plattform, Hubot, Realtime-API, Omnichannel und Docker-Setup.

S

schutzgeist

5 min read
Rocket.Chat-Bot mit lokaler KI

Rocket.Chat-Bot mit lokaler KI

Was dieser Artikel behandelt

  • Wie Du einen Bot auf Deinem Rocket.Chat-Server mit Ollama baust.
  • Zwei Wege: Hubot-Adapter (klassisch) oder Realtime-API (flexibler).
  • Bot-User anlegen, WebSocket-Events verarbeiten, antworten.
  • Omnichannel-Features: Rocket.Chat als Kundenservice-Plattform mit KI.
  • Erweiterungen und Vergleich zu Mattermost.

Einleitung

Rocket.Chat ist neben Mattermost die zweite große selbst-hostbare Team-Chat-Plattform: Open Source (Community Edition), mit einem Alleinstellungsmerkmal: Omnichannel. Rocket.Chat kann WhatsApp Business, Telegram, E-Mail und Live-Chat auf der Website als Kanäle einbinden, ein Bot kann also über mehrere Kanäle gleichzeitig antworten.

Für KI-Bots gibt es zwei Wege: den klassischen Hubot-Adapter (der alte GitHub-Bot-Standard) oder die Realtime-API (DDP/WebSocket) mit eigenem Code, wir zeigen beide.

Typische Anwendungsszenarien

  • Kundenservice-KI: Omnichannel nutzen: Website-Chat, WhatsApp, E-Mail landen in einer Queue, KI antwortet first-level.
  • Interner Team-Bot: Wie Mattermost: Wissensbot, Alerts, Onboarding.
  • Live-Chat auf der Website: Rocket.Chat Livechat-Widget + Ollama = self-hosted KI-Chat für Deine Seite.
  • Community-Plattform: Öffentliche Channels mit KI-Moderation.

Voraussetzungen

  • Rocket.Chat-Server (Docker: rocket.chat Image + MongoDB)
  • Admin-Zugang
  • Ollama mit Modell
  • Node.js (Hubot) oder Python (Realtime-API)

Schritt 1: Rocket.Chat-Server (Docker)

services:
  rocketchat:
    image: rocket.chat:latest
    environment:
      MONGO_URL: mongodb://mongodb:27017/rocketchat?replicaSet=rs0
      MONGO_OPLOG_URL: mongodb://mongodb:27017/local?replicaSet=rs0
      ROOT_URL: https://chat.deine-domain.de
      PORT: 3000
      DEPLOY_METHOD: docker
    depends_on: [mongodb]
    ports: ["3000:3000"]
    restart: always

  mongodb:
    image: mongo:7
    command: mongod --replSet rs0 --oplogSize 128
    volumes: [mongo_data:/data/db]
    restart: always

volumes:
  mongo_data:

Hinweis: MongoDB braucht den Replica-Set-Modus (für Change-Streams): --replSet rs0 wie oben, danach einmal mongosh --eval "rs.initiate()".

Schritt 2: Bot-User anlegen

Administration → Users → New User:

  • Username: ki-bot, Display-Name „KI-Assistent”
  • Rolle bot zuweisen (wichtig!)
  • E-Mail + Passwort setzen

Der Bot-User loggt sich mit Username/Passwort oder Personal Access Token ein (Administration → Accounts → „Allow Personal Access Tokens” aktivieren).

Weg A: Realtime-API mit Python (empfohlen)

Rocket.Chats Echtzeit-API heißt DDP (Distributed Data Protocol), eine WebSocket-Schicht. Die Python-Library rocketchat-API + eigener Stream, oder direkt WebSocket. Einfacher geht’s mit rocketchat.py-artigen Paketen; hier das direkte DDP-Prinzip:

import asyncio
import json
import os
import websockets
import ollama
from dotenv import load_dotenv

load_dotenv()
RC_URL = os.environ["RC_URL"]              # wss://chat.deine-domain.de/websocket
RC_USER = os.environ["RC_USER"]
RC_PASS = os.environ["RC_PASS"]
MODEL = os.environ.get("OLLAMA_MODEL", "llama3.1:8b")
ollama_client = ollama.Client(host=os.environ["OLLAMA_URL"])

seq = 0
def msg(method, params, msg_id=None):
    global seq
    seq += 1
    return json.dumps({
        "msg": "method", "method": method, "params": params,
        "id": msg_id or str(seq)
    })

async def main():
    async with websockets.connect(RC_URL) as ws:
        # 1. Connect
        await ws.send(json.dumps({"msg": "connect",
            "version": "1", "support": ["1"]}))
        await ws.recv()

        # 2. Login (Passwort)
        await ws.send(msg("login", [{
            "user": {"username": RC_USER},
            "password": {"digest": sha256(RC_PASS), "algorithm": "sha-256"}
        }], "login"))
        login_resp = json.loads(await ws.recv())
        auth_token = login_resp["result"]["token"]

        # 3. Auf neue Nachrichten subscriben (stream-room-messages)
        await ws.send(json.dumps({
            "msg": "sub", "id": "sub1", "name": "stream-room-messages",
            "params": ["__my_messages__", False]
        }))

        async for raw in ws:
            evt = json.loads(raw)
            if evt.get("msg") == "changed":
                for arg in evt["fields"]["args"]:
                    m = arg if isinstance(arg, dict) else arg[0]
                    if m.get("u", {}).get("username") == RC_USER:
                        continue
                    text = m.get("msg", "")
                    if text.startswith("!ki"):
                        prompt = text[3:].strip()
                        resp = ollama_client.chat(model=MODEL, messages=[
                            {"role": "system", "content": "Kurz antworten, Deutsch."},
                            {"role": "user", "content": prompt}])
                        await ws.send(msg("sendMessage", [{
                            "rid": m["rid"],
                            "msg": resp["message"]["content"][:16000],
                        }]))

from hashlib import sha256
def sha256(s): return sha256(s.encode()).hexdigest()

asyncio.run(main())

Das DDP-Protokoll ist etwas sperrig, für Produktion empfiehlt sich eine Bibliothek (python-rocketchat, rocket-python).

Weg B: Hubot (klassisch, schnell)

Hubot ist der alte Chatbot-Standard von GitHub; Rocket.Chat hat einen offiziellen Adapter:

npm install -g yo generator-hubot
mkdir ki-bot && cd ki-bot
yo hubot --adapter rocketchat

.env:

ROCKETCHAT_URL=http://localhost:3000
ROCKETCHAT_USER=ki-bot
ROCKETCHAT_PASSWORD=bot-passwort
ROCKETCHAT_ROOM=general
LISTEN_ON_ALL_PUBLIC=true
RESPOND_TO_DM=true

scripts/ki.coffee (Hubot nutzt CoffeeScript) oder einfacher: externes Script, das Ollama aufruft. Hubot ist praktisch, wenn Du schnell hubot ki <frage>-Style-Kommandos willst, für komplexere Bots ist die Realtime-API flexibler.

Erweiterungen

Omnichannel: Bot beantwortet Website-Live-Chat

Der Killer-Use-Case: Administration → Omnichannel → Livechat aktivieren → Widget-Snippet auf Deine Website. Besucher schreiben ins Widget → landen als Raum in Rocket.Chat → Dein Bot (Realtime-API) antwortet mit lokaler KI. Self-hosted KI-Livechat ohne externen Anbieter.

// Livechat-Widget auf der Website
<script>
(function(w,d,s,u){ /* Rocket.Chat Livechat-Snippet */
})(window, document, 'script', 'https://chat.deine-domain.de/livechat');
</script>

RAG und Moderation

Gleiche Patterns wie bei Mattermost: Embedding → Qdrant → Kontext ins Prompt; Spam-Klassifikation für öffentliche Channels.

Trigger für Agenten-Workflows

Bot-Kommando !aufgabe <beschreibung> → triggert n8n-Workflow → Ergebnis zurück in den Channel. Verbindet den Bot mit n8n-Automatisierung.

Sicherheit

  • Bot-Rolle minimal: Bot-User bekommt nur die bot-Rolle, kein Admin.
  • Tokens: Personal Access Token statt Passwort, revokierbar ohne Passwortwechsel.
  • HTTPS: In Produktion TLS hinter Reverse Proxy (Caddy/Nginx).
  • Channel-Isolation: Bot nur in erlaubte Channels einladen.

Typische Stolpersteine

  • MongoDB Replica Set: Rocket.Chat startet ohne ReplSet nicht richtig: rs.initiate() nicht vergessen.
  • DDP ist komplex: Wenn der eigene WebSocket-Code kämpft → Bibliothek nutzen oder auf Hubot-Adapter wechseln.
  • Bot antwortet sich selbst: Username-Check auf RC_USER (siehe Code).
  • Community-Edition-Limits: Einige Enterprise-Features (z. B. erweiterte Omnichannel-Optionen) sind lizenzpflichtig: Kern-Livechat ist frei.

Mattermost vs. Rocket.Chat, kurz

AspektMattermostRocket.Chat
StackGo + PostgresNode.js + MongoDB
OmnichannelNeinJa (Website-Chat, WhatsApp, Mail)
Bot-APIREST + WebSocket, sauberDDP/WebSocket, sperriger + Hubot
RessourcenSparsamerMongoDB frisst mehr RAM
Best forInterne TeamsKundenservice + Omnichannel

Key Takeaways:

  • Rocket.Chat = selbst-gehostete Chat-Plattform mit Omnichannel (Website, WhatsApp, Mail).
  • Bot via Realtime-API (DDP/WebSocket) oder klassischem Hubot-Adapter.
  • Killer-Feature: Live-Chat-Widget für die eigene Website + lokale KI = self-hosted Support-Chat.
  • Für reine Team-Kommunikation ist Mattermost schlanker; für Kundenservice Rocket.Chat stärker.
  • MongoDB mit Replica Set nötig: Setup etwas aufwendiger.

FAQ

Welche Rocket.Chat-Edition?

Community Edition (kostenlos, Open Source) reicht für Bots und Basis-Livechat. Einige Omnichannel-Erweiterungen und Enterprise-Features sind lizenzpflichtig.

Hubot oder Realtime-API?

Hubot für schnelle Kommando-Bots (!ki frage). Realtime-API (DDP/WebSocket) für volle Kontrolle: Threads, Reaktionen, Omnichannel-Events. Hubot ist schneller aufgesetzt, die API mächtiger.

Warum braucht Rocket.Chat MongoDB?

Rocket.Chat ist in Meteor/Node.js gebaut und speichert alles in MongoDB, mit Replica Set für Change-Streams (Echtzeit-Updates). Das macht den Stack etwas schwerer als Mattermost (Postgres).

Kann ich den Bot als Website-Livechat nutzen?

Ja, das ist der stärkste Use-Case. Omnichannel-Livechat aktivieren, Widget-Snippet auf die Website, Bot abonniert die Livechat-Räume und antwortet mit lokaler KI. Komplett ohne Drittanbieter.

Rocket.Chat oder Mattermost?

Rocket.Chat für Kundenservice und Omnichannel (Website, WhatsApp, Mail aus einer Oberfläche). Mattermost für interne Team-Chats, schlanker, Postgres statt Mongo, sauberere Bot-API.

Kann Rocket.Chat WhatsApp anbinden?

Ja, über die Omnichannel-Integration mit der WhatsApp Business API (Meta-Account nötig). Dein KI-Bot kann dann WhatsApp-Kundenanfragen beantworten, mit Ollama lokal.

Wie viele Ressourcen?

Rocket.Chat ~1 GB RAM, MongoDB ~1 GB, Ollama ~6-8 GB für ein 8B-Modell. Ein Server mit 16 GB RAM + GPU reicht für kleine bis mittlere Teams.

Quellen und weiterführende Literatur

Zurück zum KI Blog
Share:

Ähnliche Beiträge