Zalo (Bot API)
Status: experimenteel. DM’s worden ondersteund; groepsafhandeling is beschikbaar met expliciete groepsbeleidscontroles.
Plugin vereist
Zalo wordt als plugin geleverd en is niet gebundeld met de kerninstallatie.
- Installeren via CLI:
openclaw plugins install @openclaw/zalo - Of selecteer Zalo tijdens onboarding en bevestig de installatieprompt
- Details: Plugins
Snelle installatie (beginner)
- Installeer de Zalo-plugin:
- Vanuit een broncode-checkout:
openclaw plugins install ./extensions/zalo - Vanuit npm (indien gepubliceerd):
openclaw plugins install @openclaw/zalo - Of kies Zalo tijdens onboarding en bevestig de installatieprompt
- Vanuit een broncode-checkout:
- Stel het token in:
- Omgevingsvariabele:
ZALO_BOT_TOKEN=... - Of config:
channels.zalo.botToken: "...".
- Omgevingsvariabele:
- Herstart de gateway (of voltooi de onboarding).
- DM-toegang staat standaard op koppeling; keur de koppelingscode goed bij het eerste contact.
Minimale configuratie:
{
channels: {
zalo: {
enabled: true,
botToken: "12345689:abc-xyz",
dmPolicy: "pairing",
},
},
}
Wat het is
Zalo is een Vietnamese berichtenapp; de Bot API laat de Gateway een bot draaien voor 1:1-gesprekken. Het is geschikt voor ondersteuning of notificaties wanneer je deterministische routering terug naar Zalo wilt.
- Een Zalo Bot API-kanaal beheerd door de Gateway.
- Deterministische routering: antwoorden gaan terug naar Zalo; het model kiest nooit kanalen.
- DM’s delen de hoofdsessie van de agent.
- Groepen worden ondersteund met beleidscontroles (
groupPolicy+groupAllowFrom) en gebruiken standaard fail-closed allowlist-gedrag.
Installatie (snel pad)
1) Maak een bottoken aan (Zalo Bot Platform)
- Ga naar https://bot.zaloplatforms.com en log in.
- Maak een nieuwe bot aan en configureer de instellingen.
- Kopieer het bottoken (formaat:
12345689:abc-xyz).
2) Configureer het token (omgevingsvariabele of config)
Voorbeeld:
{
channels: {
zalo: {
enabled: true,
botToken: "12345689:abc-xyz",
dmPolicy: "pairing",
},
},
}
Omgevingsvariabele: ZALO_BOT_TOKEN=... (werkt alleen voor het standaardaccount).
Multi-account-ondersteuning: gebruik channels.zalo.accounts met per-account tokens en optionele name.
- Herstart de gateway. Zalo start wanneer een token beschikbaar is (omgevingsvariabele of config).
- DM-toegang staat standaard op koppeling. Keur de code goed wanneer de bot voor het eerst wordt benaderd.
Hoe het werkt (gedrag)
- Inkomende berichten worden genormaliseerd naar de gedeelde kanaalenvelop met mediaplaatshouders.
- Antwoorden worden altijd teruggerouteerd naar dezelfde Zalo-chat.
- Standaard long-polling; webhook-modus beschikbaar met
channels.zalo.webhookUrl.
Limieten
- Uitgaande tekst wordt opgesplitst bij 2000 tekens (Zalo API-limiet).
- Mediadownloads/-uploads zijn begrensd door
channels.zalo.mediaMaxMb(standaard 5). - Streaming is standaard geblokkeerd omdat de limiet van 2000 tekens streaming minder nuttig maakt.
Toegangscontrole (DM’s)
DM-toegang
- Standaard:
channels.zalo.dmPolicy = "pairing". Onbekende afzenders ontvangen een koppelingscode; berichten worden genegeerd totdat goedgekeurd (codes verlopen na 1 uur). - Goedkeuren via:
openclaw pairing list zaloopenclaw pairing approve zalo <CODE>
- Koppeling is de standaard tokenuitwisseling. Details: Koppeling
channels.zalo.allowFromaccepteert numerieke gebruikers-ID’s (er is geen gebruikersnaamopzoeking beschikbaar).
Toegangscontrole (groepen)
channels.zalo.groupPolicybepaalt de afhandeling van groepsinkomsten:open | allowlist | disabled.- Standaardgedrag is fail-closed:
allowlist. channels.zalo.groupAllowFrombeperkt welke afzender-ID’s de bot in groepen kunnen triggeren.- Als
groupAllowFromniet is ingesteld, valt Zalo terug opallowFromvoor afzendercontroles. groupPolicy: "disabled"blokkeert alle groepsberichten.groupPolicy: "open"staat elk groepslid toe (mention-gated).- Runtime-opmerking: als
channels.zalovolledig ontbreekt, valt de runtime toch terug opgroupPolicy="allowlist"voor de veiligheid.
Long-polling versus webhook
- Standaard: long-polling (geen publieke URL vereist).
- Webhook-modus: stel
channels.zalo.webhookUrlenchannels.zalo.webhookSecretin.- Het webhook-geheim moet 8-256 tekens zijn.
- Webhook-URL moet HTTPS gebruiken.
- Zalo stuurt events met de
X-Bot-Api-Secret-Token-header voor verificatie. - Gateway HTTP verwerkt webhook-verzoeken op
channels.zalo.webhookPath(standaard het webhook-URL-pad). - Verzoeken moeten
Content-Type: application/jsongebruiken (of+json-mediatypes). - Dubbele events (
event_name + message_id) worden genegeerd gedurende een kort herhaalvenster. - Pieken in verkeer worden snelheidsbeperkt per pad/bron en kunnen HTTP 429 retourneren.
Opmerking: getUpdates (polling) en webhook zijn wederzijds exclusief volgens de Zalo API-documentatie.
Ondersteunde berichttypen
- Tekstberichten: Volledige ondersteuning met opsplitsing bij 2000 tekens.
- Afbeeldingsberichten: Download en verwerk inkomende afbeeldingen; verstuur afbeeldingen via
sendPhoto. - Stickers: Gelogd maar niet volledig verwerkt (geen agentantwoord).
- Niet-ondersteunde typen: Gelogd (bijv. berichten van beschermde gebruikers).
Mogelijkheden
| Functie | Status |
|---|---|
| Directe berichten | Ondersteund |
| Groepen | Ondersteund met beleidscontroles (standaard allowlist) |
| Media (afbeeldingen) | Ondersteund |
| Reacties | Niet ondersteund |
| Threads | Niet ondersteund |
| Polls | Niet ondersteund |
| Native commando’s | Niet ondersteund |
| Streaming | Geblokkeerd (2000-tekenlimiet) |
Afleveringsdoelen (CLI/cron)
- Gebruik een chat-ID als doel.
- Voorbeeld:
openclaw message send --channel zalo --target 123456789 --message "hi".
Probleemoplossing
Bot reageert niet:
- Controleer of het token geldig is:
openclaw channels status --probe - Verifieer of de afzender is goedgekeurd (koppeling of allowFrom)
- Controleer gateway-logs:
openclaw logs --follow
Webhook ontvangt geen events:
- Zorg ervoor dat de webhook-URL HTTPS gebruikt
- Verifieer dat het geheime token 8-256 tekens is
- Bevestig dat het gateway HTTP-eindpunt bereikbaar is op het geconfigureerde pad
- Controleer of getUpdates-polling niet draait (ze zijn wederzijds exclusief)
Configuratiereferentie (Zalo)
Volledige configuratie: Configuratie
Provideropties:
channels.zalo.enabled: kanaal in-/uitschakelen bij opstart.channels.zalo.botToken: bottoken van Zalo Bot Platform.channels.zalo.tokenFile: lees token uit een regulier bestandspad. Symlinks worden geweigerd.channels.zalo.dmPolicy:pairing | allowlist | open | disabled(standaard: pairing).channels.zalo.allowFrom: DM-allowlist (gebruikers-ID’s).openvereist"*". De wizard vraagt om numerieke ID’s.channels.zalo.groupPolicy:open | allowlist | disabled(standaard: allowlist).channels.zalo.groupAllowFrom: groepsafzender-allowlist (gebruikers-ID’s). Valt terug opallowFromwanneer niet ingesteld.channels.zalo.mediaMaxMb: inkomende/uitgaande medialimiet (MB, standaard 5).channels.zalo.webhookUrl: schakel webhook-modus in (HTTPS vereist).channels.zalo.webhookSecret: webhook-geheim (8-256 tekens).channels.zalo.webhookPath: webhook-pad op de gateway HTTP-server.channels.zalo.proxy: proxy-URL voor API-verzoeken.
Multi-account-opties:
channels.zalo.accounts.<id>.botToken: per-account token.channels.zalo.accounts.<id>.tokenFile: per-account regulier tokenbestand. Symlinks worden geweigerd.channels.zalo.accounts.<id>.name: weergavenaam.channels.zalo.accounts.<id>.enabled: account in-/uitschakelen.channels.zalo.accounts.<id>.dmPolicy: per-account DM-beleid.channels.zalo.accounts.<id>.allowFrom: per-account allowlist.channels.zalo.accounts.<id>.groupPolicy: per-account groepsbeleid.channels.zalo.accounts.<id>.groupAllowFrom: per-account groepsafzender-allowlist.channels.zalo.accounts.<id>.webhookUrl: per-account webhook-URL.channels.zalo.accounts.<id>.webhookSecret: per-account webhook-geheim.channels.zalo.accounts.<id>.webhookPath: per-account webhook-pad.channels.zalo.accounts.<id>.proxy: per-account proxy-URL.