Zalo (Bot-API)
Status: Experimentell. DMs werden unterstützt; Gruppenbehandlung ist mit expliziten Gruppenrichtlinien verfügbar.
Plugin erforderlich
Zalo wird als Plugin ausgeliefert und ist nicht in der Kerninstallation enthalten.
- Installation über CLI:
openclaw plugins install @openclaw/zalo - Oder wähle Zalo während des Onboardings und bestätige die Installationsaufforderung
- Details: Plugins
Schnelleinrichtung (Einsteiger)
- Installiere das Zalo-Plugin:
- Aus einem Quell-Checkout:
openclaw plugins install ./extensions/zalo - Von npm (falls veröffentlicht):
openclaw plugins install @openclaw/zalo - Oder wähle Zalo im Onboarding und bestätige die Installationsaufforderung
- Aus einem Quell-Checkout:
- Setze den Token:
- Umgebungsvariable:
ZALO_BOT_TOKEN=... - Oder Konfiguration:
channels.zalo.botToken: "...".
- Umgebungsvariable:
- Starte das Gateway neu (oder schließe das Onboarding ab).
- DM-Zugang ist standardmäßig Pairing; genehmige den Pairing-Code beim ersten Kontakt.
Minimale Konfiguration:
{
channels: {
zalo: {
enabled: true,
botToken: "12345689:abc-xyz",
dmPolicy: "pairing",
},
},
}
Was es ist
Zalo ist eine auf Vietnam fokussierte Messaging-App; die Bot-API ermöglicht es dem Gateway, einen Bot für 1:1-Unterhaltungen zu betreiben. Sie eignet sich gut für Support oder Benachrichtigungen, bei denen du deterministisches Routing zurück zu Zalo möchtest.
- Ein Zalo-Bot-API-Kanal, der vom Gateway betrieben wird.
- Deterministisches Routing: Antworten gehen zurück zu Zalo; das Modell wählt niemals den Kanal.
- DMs teilen sich die Hauptsession des Agenten.
- Gruppen werden mit Richtliniensteuerung unterstützt (
groupPolicy+groupAllowFrom) und sind standardmäßig auf Fail-Closed-Allowlist-Verhalten eingestellt.
Einrichtung (Schnellweg)
1) Bot-Token erstellen (Zalo Bot Platform)
- Gehe zu https://bot.zaloplatforms.com und melde dich an.
- Erstelle einen neuen Bot und konfiguriere seine Einstellungen.
- Kopiere den Bot-Token (Format:
12345689:abc-xyz).
2) Token konfigurieren (Umgebungsvariable oder Konfiguration)
Beispiel:
{
channels: {
zalo: {
enabled: true,
botToken: "12345689:abc-xyz",
dmPolicy: "pairing",
},
},
}
Umgebungsvariable: ZALO_BOT_TOKEN=... (funktioniert nur für das Standardkonto).
Multi-Account-Unterstützung: Verwende channels.zalo.accounts mit Pro-Konto-Tokens und optionalem name.
- Starte das Gateway neu. Zalo startet, wenn ein Token aufgelöst wird (Umgebungsvariable oder Konfiguration).
- DM-Zugang ist standardmäßig Pairing. Genehmige den Code, wenn der Bot zum ersten Mal kontaktiert wird.
Funktionsweise (Verhalten)
- Eingehende Nachrichten werden in den gemeinsamen Kanalumschlag mit Medien-Platzhaltern normalisiert.
- Antworten werden immer an denselben Zalo-Chat zurückgeleitet.
- Standardmäßig Long-Polling; Webhook-Modus verfügbar mit
channels.zalo.webhookUrl.
Limits
- Ausgehender Text wird auf 2000 Zeichen aufgeteilt (Zalo-API-Limit).
- Medien-Downloads/-Uploads sind begrenzt durch
channels.zalo.mediaMaxMb(Standard 5). - Streaming ist standardmäßig blockiert, da das 2000-Zeichen-Limit Streaming weniger nützlich macht.
Zugriffssteuerung (DMs)
DM-Zugang
- Standard:
channels.zalo.dmPolicy = "pairing". Unbekannte Absender erhalten einen Pairing-Code; Nachrichten werden ignoriert, bis sie genehmigt sind (Codes verfallen nach 1 Stunde). - Genehmigung über:
openclaw pairing list zaloopenclaw pairing approve zalo <CODE>
- Pairing ist der Standard-Token-Austausch. Details: Pairing
channels.zalo.allowFromakzeptiert numerische Benutzer-IDs (keine Benutzernamen-Suche verfügbar).
Zugriffssteuerung (Gruppen)
channels.zalo.groupPolicysteuert die Gruppeneingangsverarbeitung:open | allowlist | disabled.- Standardverhalten ist Fail-Closed:
allowlist. channels.zalo.groupAllowFrombeschränkt, welche Absender-IDs den Bot in Gruppen auslösen können.- Wenn
groupAllowFromnicht gesetzt ist, fällt Zalo für Absenderprüfungen aufallowFromzurück. groupPolicy: "disabled"blockiert alle Gruppennachrichten.groupPolicy: "open"erlaubt jedes Gruppenmitglied (Mention-gated).- Laufzeithinweis: Wenn
channels.zalovollständig fehlt, fällt die Laufzeit sicherheitshalber aufgroupPolicy="allowlist"zurück.
Long-Polling vs. Webhook
- Standard: Long-Polling (keine öffentliche URL erforderlich).
- Webhook-Modus: Setze
channels.zalo.webhookUrlundchannels.zalo.webhookSecret.- Das Webhook-Secret muss 8-256 Zeichen lang sein.
- Die Webhook-URL muss HTTPS verwenden.
- Zalo sendet Events mit dem Header
X-Bot-Api-Secret-Tokenzur Verifizierung. - Das Gateway-HTTP verarbeitet Webhook-Anfragen unter
channels.zalo.webhookPath(standardmäßig der Webhook-URL-Pfad). - Anfragen müssen
Content-Type: application/json(oder+json-Medientypen) verwenden. - Doppelte Events (
event_name + message_id) werden für ein kurzes Wiederholungsfenster ignoriert. - Burst-Traffic wird pro Pfad/Quelle ratenbegrenzt und kann HTTP 429 zurückgeben.
Hinweis: getUpdates (Polling) und Webhook schließen sich laut Zalo-API-Dokumentation gegenseitig aus.
Unterstützte Nachrichtentypen
- Textnachrichten: Vollständige Unterstützung mit 2000-Zeichen-Chunking.
- Bildnachrichten: Eingehende Bilder herunterladen und verarbeiten; Bilder via
sendPhotosenden. - Sticker: Protokolliert, aber nicht vollständig verarbeitet (keine Agent-Antwort).
- Nicht unterstützte Typen: Protokolliert (z. B. Nachrichten von geschützten Benutzern).
Fähigkeiten
| Feature | Status |
|---|---|
| Direktnachrichten | Unterstützt |
| Gruppen | Unterstützt mit Richtliniensteuerung (standardmäßig Allowlist) |
| Medien (Bilder) | Unterstützt |
| Reaktionen | Nicht unterstützt |
| Threads | Nicht unterstützt |
| Umfragen | Nicht unterstützt |
| Native Befehle | Nicht unterstützt |
| Streaming | Blockiert (2000-Zeichen-Limit) |
Zustellziele (CLI/Cron)
- Verwende eine Chat-ID als Ziel.
- Beispiel:
openclaw message send --channel zalo --target 123456789 --message "hi".
Fehlerbehebung
Bot antwortet nicht:
- Prüfe, ob der Token gültig ist:
openclaw channels status --probe - Stelle sicher, dass der Absender genehmigt ist (Pairing oder allowFrom)
- Prüfe die Gateway-Logs:
openclaw logs --follow
Webhook empfängt keine Events:
- Stelle sicher, dass die Webhook-URL HTTPS verwendet
- Überprüfe, dass das Secret-Token 8-256 Zeichen lang ist
- Bestätige, dass der Gateway-HTTP-Endpunkt unter dem konfigurierten Pfad erreichbar ist
- Prüfe, dass getUpdates-Polling nicht läuft (sie schließen sich gegenseitig aus)
Konfigurationsreferenz (Zalo)
Vollständige Konfiguration: Configuration
Provider-Optionen:
channels.zalo.enabled: Kanal-Start aktivieren/deaktivieren.channels.zalo.botToken: Bot-Token von der Zalo Bot Platform.channels.zalo.tokenFile: Token aus einer regulären Datei lesen. Symlinks werden abgelehnt.channels.zalo.dmPolicy:pairing | allowlist | open | disabled(Standard: pairing).channels.zalo.allowFrom: DM-Allowlist (Benutzer-IDs).openerfordert"*". Der Assistent fragt nach numerischen IDs.channels.zalo.groupPolicy:open | allowlist | disabled(Standard: allowlist).channels.zalo.groupAllowFrom: Gruppen-Absender-Allowlist (Benutzer-IDs). Fällt aufallowFromzurück, wenn nicht gesetzt.channels.zalo.mediaMaxMb: Medien-Obergrenze ein-/ausgehend (MB, Standard 5).channels.zalo.webhookUrl: Webhook-Modus aktivieren (HTTPS erforderlich).channels.zalo.webhookSecret: Webhook-Secret (8-256 Zeichen).channels.zalo.webhookPath: Webhook-Pfad auf dem Gateway-HTTP-Server.channels.zalo.proxy: Proxy-URL für API-Anfragen.
Multi-Account-Optionen:
channels.zalo.accounts.<id>.botToken: Pro-Konto-Token.channels.zalo.accounts.<id>.tokenFile: Reguläre Pro-Konto-Token-Datei. Symlinks werden abgelehnt.channels.zalo.accounts.<id>.name: Anzeigename.channels.zalo.accounts.<id>.enabled: Konto aktivieren/deaktivieren.channels.zalo.accounts.<id>.dmPolicy: Pro-Konto-DM-Richtlinie.channels.zalo.accounts.<id>.allowFrom: Pro-Konto-Allowlist.channels.zalo.accounts.<id>.groupPolicy: Pro-Konto-Gruppenrichtlinie.channels.zalo.accounts.<id>.groupAllowFrom: Pro-Konto-Gruppen-Absender-Allowlist.channels.zalo.accounts.<id>.webhookUrl: Pro-Konto-Webhook-URL.channels.zalo.accounts.<id>.webhookSecret: Pro-Konto-Webhook-Secret.channels.zalo.accounts.<id>.webhookPath: Pro-Konto-Webhook-Pfad.channels.zalo.accounts.<id>.proxy: Pro-Konto-Proxy-URL.