Installeren (op aanvraag)
- Onboarding (
openclaw onboard) enopenclaw channels add --channel whatsappvragen om de WhatsApp Plugin te installeren wanneer je die voor het eerst selecteert. openclaw channels login --channel whatsappbiedt ook de installatiestroom aan wanneer de Plugin nog niet aanwezig is.- Dev-kanaal + git-checkout: gebruikt standaard het lokale Plugin-pad.
- Stable/Beta: installeert eerst de officiële
@openclaw/whatsappPlugin vanuit ClawHub, met npm als fallback. - De WhatsApp-runtime wordt buiten het kernpakket van OpenClaw op npm gedistribueerd, zodat WhatsApp-specifieke runtime-afhankelijkheden bij de externe Plugin blijven.
@openclaw/whatsapp) alleen wanneer je de registry-
fallback nodig hebt. Pin alleen een exacte versie wanneer je een reproduceerbare installatie nodig hebt.
Koppelen
Kanaalproblemen oplossen
Gateway-configuratie
Snelle configuratie
WhatsApp koppelen (QR)
De huidige aanvrager bellen met MeowCaller (experimenteel)
De WhatsApp Plugin kanwhatsapp_call beschikbaar maken in agentbeurten die vanuit WhatsApp zijn gestart. De tool
gebruikt MeowCaller om een WhatsApp-spraakoproep te plaatsen naar
de huidige geautoriseerde aanvrager en speelt een OpenClaw TTS-bericht af nadat die opneemt. De tool
accepteert geen bestemmingsnummer, dus een prompt kan de oproep niet omleiden naar een derde partij.
Deze experimentele mogelijkheid is standaard uitgeschakeld.
Experimentele oproepen inschakelen
actions.calls: true toe aan het WhatsApp-kanaal in openclaw.json:false is, stelt OpenClaw de tool whatsapp_call niet beschikbaar aan de agent.De beoordeelde MeowCaller CLI installeren
meowcaller op de PATH van de Gateway-host.
Totdat MeowCaller PR #7 is samengevoegd, bouw je
de beoordeelde branch op commit 752050471fc2bf7a8cdfbf7dbd3cd4e865d85d3f:$HOME/.local/bin ook op de PATH van de Gateway-service staat. Deze revisie biedt
expliciete opdrachten pair en send-only notify. notify opent geen microfoon, speaker,
videoapparaat, inkomende audiosink of diagnostische opname. Vervang dit niet door de opdracht
play van de voorbeeld-CLI.Het MeowCaller-gekoppelde apparaat koppelen
whatsapp_call rapporteert de
accountspecifieke statusmap en koppelingsopdracht. Voor het standaardaccount:MeowCaller linked device ready. De opdracht sluit daarna af. Houd wa-voip.db
privé; dit is de MeowCaller linked-device-sessie. De statusactie whatsapp_call
retourneert de accountspecifieke opdracht en shell wanneer je een niet-standaardaccount gebruikt. Voer op
Windows de PowerShell-opdracht uit; MeowCaller maakt de opslagmap aan.TTS configureren en bellen vanuit WhatsApp
Call me and say the build finished. De tool bepaalt de afzender
vanuit vertrouwde inkomende context, synthetiseert een tijdelijk privé-WAV-bestand, voert MeowCaller uit binnen een
begrensd oproepvenster en verwijdert het audiobestand daarna. OpenClaw geeft de store van het account
expliciet door, wacht op een nul-exitstatus na opnemen, afspelen en ophangen, en behandelt
een time-out of niet-nul exit als een mislukte toolaanroep.- alleen een-op-een uitgaande audio-oproepen
- geen willekeurige bestemmingsnummers
- geen gedeelde authenticatie met de chatverbinding
- geen zelfoproepen vanuit modus met persoonlijk nummer/zelfchat
- gesynthetiseerde audio is beperkt tot 60 seconden
- geen ontvangstbewijs voor hoorbaarheid aan handsetzijde buiten voltooiing van opnemen/afspelen/ophangen door MeowCaller
- OpenClaw stopt het begeleidende proces na een begrensd venster van 115-175 seconden, inclusief de verbindings-, opname-, afspeel- en afsluitfasen van MeowCaller
Implementatiepatronen
Specifiek nummer (aanbevolen)
Specifiek nummer (aanbevolen)
- aparte WhatsApp-identiteit voor OpenClaw
- duidelijkere DM-allowlists en routeringsgrenzen
- lagere kans op verwarring door zelfchat
Fallback met persoonlijk nummer
Fallback met persoonlijk nummer
dmPolicy: "allowlist"allowFrombevat je persoonlijke nummerselfChatMode: true
allowFrom.Kanaalbereik alleen voor WhatsApp Web
Kanaalbereik alleen voor WhatsApp Web
Baileys) in de huidige OpenClaw-kanaalarchitectuur.Er is geen afzonderlijk Twilio WhatsApp-berichtenkanaal in de ingebouwde chatkanaalregistry.Runtimemodel
- Gateway beheert de WhatsApp-socket en reconnect-lus.
- De reconnect-watchdog gebruikt WhatsApp Web-transportactiviteit, niet alleen inkomend app-berichtvolume, zodat een stille linked-device-sessie niet uitsluitend wordt herstart omdat niemand recent een bericht heeft gestuurd. Een langere limiet voor applicatiestilte forceert nog steeds een reconnect als transportframes blijven binnenkomen maar er binnen het watchdog-venster geen applicatieberichten worden verwerkt; na een tijdelijke reconnect voor een recent actieve sessie gebruikt die applicatiestiltecontrole de normale berichttime-out voor het eerste herstelvenster.
- Baileys-sockettimings zijn expliciet onder
web.whatsapp.*:keepAliveIntervalMsbeheert WhatsApp Web-applicatiepings,connectTimeoutMsbeheert de time-out voor de openingshandshake, endefaultQueryTimeoutMsbeheert Baileys-querywachttijden plus de lokale grenzen van OpenClaw voor uitgaand verzenden/presence en inkomende leesbevestigingsbewerkingen. - Uitgaand verzenden vereist een actieve WhatsApp-listener voor het doelaccount.
- Groepsverzendingen voegen native vermeldingsmetadata toe voor tokens
@+<digits>en@<digits>in tekst en mediabijschriften wanneer het token overeenkomt met huidige WhatsApp-deelnemersmetadata, inclusief LID-ondersteunde groepen. - Status- en broadcastchats worden genegeerd (
@status,@broadcast). - De reconnect-watchdog volgt WhatsApp Web-transportactiviteit, niet alleen inkomend app-berichtvolume: stille linked-device-sessies blijven actief zolang transportframes doorgaan, maar een transportstoring forceert ruim vóór het latere pad voor externe verbreking een reconnect.
- Directe chats gebruiken DM-sessieregels (
session.dmScope; standaardmainklapt DM’s samen naar de hoofdsessie van de agent). - Groepssessies zijn geïsoleerd (
agent:<agentId>:whatsapp:group:<jid>). - WhatsApp-kanalen/nieuwsbrieven kunnen expliciete uitgaande doelen zijn met hun native
@newsletterJID. Uitgaand verzenden naar nieuwsbrieven gebruikt kanaalsessiemetadata (agent:<agentId>:whatsapp:channel:<jid>) in plaats van DM-sessiesemantiek. - WhatsApp Web-transport respecteert standaard proxy-omgevingsvariabelen op de Gateway-host (
HTTPS_PROXY,HTTP_PROXY,NO_PROXY/ varianten in kleine letters). Geef de voorkeur aan proxyconfiguratie op hostniveau boven kanaalspecifieke WhatsApp-proxyinstellingen. - Wanneer
messages.removeAckAfterReplyis ingeschakeld, wist OpenClaw de WhatsApp-ackreactie nadat een zichtbare reactie is afgeleverd.
Goedkeuringsprompts
WhatsApp kan exec- en Plugin-goedkeuringsprompts weergeven met reacties👍 / 👎. Aflevering wordt
beheerd door de goedkeuringsdoorstuurconfiguratie op topniveau:
approvals.exec en approvals.plugin zijn onafhankelijk. WhatsApp inschakelen als kanaal koppelt alleen
het transport; het stuurt geen goedkeuringsprompts tenzij de overeenkomende goedkeuringsfamilie is ingeschakeld
en naar WhatsApp routeert. Sessiemodus levert native emoji-goedkeuringen alleen voor goedkeuringen die
afkomstig zijn van WhatsApp. Doelmodus gebruikt de gedeelde doorstuurpipeline voor expliciete WhatsApp-
doelen en maakt geen afzonderlijke approver-DM-fanout.
WhatsApp-goedkeuringsreacties vereisen expliciete WhatsApp-goedkeurders uit allowFrom of "*".
defaultTo beheert gewone standaardberichtdoelen; het is geen goedkeuringsbevoegde. Handmatige
/approve-opdrachten lopen nog steeds via het normale WhatsApp-autorisatiepad voor afzenders voordat
goedkeuringsresolutie plaatsvindt.
Plugin-hooks en privacy
WhatsApp-inkomende berichten kunnen persoonlijke berichtinhoud, telefoonnummers, groeps-ID’s, afzendernamen en sessiecorrelatievelden bevatten. Daarom zendt WhatsApp inkomendemessage_received-hookpayloads niet uit naar plugins,
tenzij je er expliciet voor kiest:
Toegangscontrole en activering
- DM-beleid
- Groepsbeleid + allowlists
- Vermeldingen + /activation
channels.whatsapp.dmPolicy bepaalt toegang tot directe chats:pairing(standaard)allowlistopen(vereist datallowFrom"*"bevat)disabled
allowFrom accepteert nummers in E.164-stijl (intern genormaliseerd).allowFrom is een toegangscontrolelijst voor DM-afzenders. Deze blokkeert geen expliciete uitgaande verzendingen naar WhatsApp-groeps-JID’s of @newsletter-kanaal-JID’s.Override voor meerdere accounts: channels.whatsapp.accounts.<id>.dmPolicy (en allowFrom) heeft voorrang op kanaalbrede standaardwaarden voor dat account.Details van runtimegedrag:- koppelingen worden opgeslagen in de allow-store van het kanaal en samengevoegd met geconfigureerde
allowFrom - geplande automatisering en Heartbeat-ontvangerfallback gebruiken expliciete bezorgdoelen of geconfigureerde
allowFrom; DM-koppelingsgoedkeuringen zijn geen impliciete Cron- of Heartbeat-ontvangers - als er geen allowlist is geconfigureerd, is het gekoppelde eigen nummer standaard toegestaan
- OpenClaw koppelt nooit automatisch uitgaande
fromMe-DM’s (berichten die je vanaf het gekoppelde apparaat naar jezelf stuurt)
Geconfigureerde ACP-bindingen
WhatsApp ondersteunt permanente ACP-bindingen met top-levelbindings[]-items:
- Directe chats komen overeen met E.164-nummers zoals
+15555550123. - Groepen komen overeen met WhatsApp-groeps-JID’s zoals
120363424282127706@g.us. - Groeps-allowlists, afzenderbeleid en vermeldings- of activeringscontroles worden uitgevoerd voordat OpenClaw zorgt dat de geconfigureerde ACP-sessie bestaat.
- Een overeenkomende geconfigureerde ACP-binding is eigenaar van de route. WhatsApp-uitzendgroepen verspreiden die beurt niet naar gewone WhatsApp-sessies.
Gedrag voor persoonlijk nummer en zelfchat
Wanneer het gekoppelde eigen nummer ook aanwezig is inallowFrom, worden WhatsApp-zelfchatbeveiligingen geactiveerd:
- leesbevestigingen overslaan voor zelfchatbeurten
- automatisch triggergedrag voor mention-JID negeren dat anders jezelf zou pingen
- als
messages.responsePrefixniet is ingesteld, gebruiken zelfchatantwoorden standaard[{identity.name}]of[openclaw]
Berichtnormalisatie en context
Inkomende envelop + antwoordcontext
Inkomende envelop + antwoordcontext
ReplyToId, ReplyToBody, ReplyToSender, afzender-JID/E.164).
Wanneer het geciteerde antwoorddoel downloadbare media is, slaat OpenClaw dit op via
de normale inkomende mediaopslag en stelt het beschikbaar als MediaPath/MediaType, zodat
de agent de gerefereerde afbeelding kan inspecteren in plaats van alleen
<media:image> te zien.Mediaplaceholders en extractie van locatie/contact
Mediaplaceholders en extractie van locatie/contact
<media:image><media:video><media:audio><media:document><media:sticker>
<media:audio> is, zodat het uitspreken van de botvermelding in de voice note
het antwoord kan triggeren. Als de transcriptie de bot nog steeds niet vermeldt, wordt de
transcriptie bewaard in de wachtende groepsgeschiedenis in plaats van de ruwe placeholder.Locatiebodies gebruiken beknopte coördinatentekst. Locatielabels/-opmerkingen en contact-/vCard-details worden weergegeven als fenced onvertrouwde metadata, niet als inline prompttekst.Injectie van wachtende groepsgeschiedenis
Injectie van wachtende groepsgeschiedenis
- standaardlimiet:
50 - configuratie:
channels.whatsapp.historyLimit - fallback:
messages.groupChat.historyLimit 0schakelt uit
[Chat messages since your last reply - for context][Current message - respond to this]
Leesbevestigingen
Leesbevestigingen
Bezorging, opdelen en media
Tekst opdelen
Tekst opdelen
- standaard chunklimiet:
channels.whatsapp.textChunkLimit = 4000 channels.whatsapp.chunkMode = "length" | "newline"newline-modus geeft de voorkeur aan alineagrenzen (lege regels) en valt daarna terug op lengteveilig opdelen
Gedrag van uitgaande media
Gedrag van uitgaande media
- ondersteunt payloads voor afbeeldingen, video, audio (PTT-voice note) en documenten
- audiomedia wordt verzonden via de Baileys
audio-payload metptt: true, zodat WhatsApp-clients dit weergeven als een push-to-talk-voice note - antwoordpayloads behouden
audioAsVoice; TTS-voice note-uitvoer voor WhatsApp blijft op dit PTT-pad, zelfs wanneer de provider MP3 of WebM retourneert - native Ogg/Opus-audio wordt verzonden als
audio/ogg; codecs=opusvoor compatibiliteit met voice notes - niet-Ogg-audio, inclusief Microsoft Edge TTS MP3-/WebM-uitvoer, wordt met
ffmpeggetranscodeerd naar 48 kHz mono Ogg/Opus vóór PTT-bezorging /tts latestverzendt het nieuwste assistentantwoord als één voice note en onderdrukt herhaalde verzendingen voor hetzelfde antwoord;/tts chat on|off|defaultbeheert auto-TTS voor de huidige WhatsApp-chat- afspelen van geanimeerde GIFs wordt ondersteund via
gifPlayback: truebij videoverzendingen forceDocument/asDocumentverzendt uitgaande afbeeldingen, GIFs en video’s via de Baileys-documentpayload om WhatsApp-mediacompressie te vermijden, terwijl de opgeloste bestandsnaam en het MIME-type behouden blijven- bij het verzenden van multi-media-antwoordpayloads worden bijschriften toegepast op het eerste media-item, behalve dat PTT-voice notes eerst de audio en zichtbare tekst afzonderlijk verzenden omdat WhatsApp-clients bijschriften bij voice notes niet consistent weergeven
- mediabron kan HTTP(S),
file://of lokale paden zijn
Limieten voor mediagrootte en fallbackgedrag
Limieten voor mediagrootte en fallbackgedrag
- opslaglimiet voor inkomende media:
channels.whatsapp.mediaMaxMb(standaard50) - verzendlimiet voor uitgaande media:
channels.whatsapp.mediaMaxMb(standaard50) - overrides per account gebruiken
channels.whatsapp.accounts.<accountId>.mediaMaxMb - afbeeldingen worden automatisch geoptimaliseerd (resize/kwaliteitsweep) om binnen limieten te passen, tenzij
forceDocument/asDocumentdocumentbezorging aanvraagt - bij mislukte mediaverzending stuurt first-item fallback een tekstwaarschuwing in plaats van het antwoord stilzwijgend te laten vallen
Antwoordcitaat
WhatsApp ondersteunt native antwoordcitaat, waarbij uitgaande antwoorden het inkomende bericht zichtbaar citeren. Beheer dit metchannels.whatsapp.replyToMode.
| Waarde | Gedrag |
|---|---|
"off" | Nooit citeren; verzenden als een gewoon bericht |
"first" | Alleen de eerste uitgaande antwoordchunk citeren |
"all" | Elke uitgaande antwoordchunk citeren |
"batched" | In wachtrij geplaatste gebatchte antwoorden citeren en directe antwoorden ongeciteerd laten |
"off". Overrides per account gebruiken channels.whatsapp.accounts.<id>.replyToMode.
Reactieniveau
channels.whatsapp.reactionLevel bepaalt hoe breed de agent emoji-reacties op WhatsApp gebruikt:
| Niveau | Ack-reacties | Door agent geïnitieerde reacties | Beschrijving |
|---|---|---|---|
"off" | Nee | Nee | Helemaal geen reacties |
"ack" | Ja | Nee | Alleen Ack-reacties (ontvangst vóór antwoord) |
"minimal" | Ja | Ja (conservatief) | Ack + agentreacties met conservatieve richtlijnen |
"extensive" | Ja | Ja (aangemoedigd) | Ack + agentreacties met aangemoedigde richtlijnen |
"minimal".
Overrides per account gebruiken channels.whatsapp.accounts.<id>.reactionLevel.
Bevestigingsreacties
WhatsApp ondersteunt directe Ack-reacties bij ontvangst van inkomende berichten viachannels.whatsapp.ackReaction.
Ack-reacties worden beperkt door reactionLevel — ze worden onderdrukt wanneer reactionLevel "off" is.
- direct verzonden nadat inkomend verkeer is geaccepteerd (vóór het antwoord)
- als
ackReactionaanwezig is zonderemoji, gebruikt WhatsApp de identiteitsemoji van de geroute agent, met terugval naar ”👀”; laatackReactionweg of stelemoji: ""in om geen bevestigingsreactie te verzenden - fouten worden gelogd, maar blokkeren normale antwoordbezorging niet
- groepsmodus
mentionsreageert op beurten die door een vermelding zijn gestart; groepsactivatiealwayswerkt als bypass voor deze controle - WhatsApp gebruikt
channels.whatsapp.ackReaction(legacymessages.ackReactionwordt hier niet gebruikt)
Lifecycle-statusreacties
Stelmessages.statusReactions.enabled: true in om WhatsApp de bevestigingsreactie tijdens een beurt te laten vervangen in plaats van een statische ontvangstemoji te laten staan. Wanneer dit is ingeschakeld, gebruikt OpenClaw dezelfde reactiesleuf van het inkomende bericht voor lifecycle-statussen zoals in wachtrij, nadenken, toolactiviteit, Compaction, voltooid en fout.
channels.whatsapp.ackReactionbepaalt nog steeds of statusreacties in aanmerking komen voor directe berichten en groepen.- De statusreactie voor de wachtrij gebruikt dezelfde effectieve bevestigingsemoji als gewone bevestigingsreacties.
- WhatsApp heeft één botreactiesleuf per bericht, dus lifecycle-updates vervangen de huidige reactie op dezelfde plek.
messages.removeAckAfterReply: truewist de uiteindelijke statusreactie na de geconfigureerde vasthoudtijd voor voltooid/fout.- Tool-emojicategorieën omvatten
tool,coding,web,deploy,buildenconcierge.
Meerdere accounts en referenties
Accountselectie en standaardwaarden
Accountselectie en standaardwaarden
- account-id’s komen uit
channels.whatsapp.accounts - standaard accountselectie:
defaultindien aanwezig, anders de eerste geconfigureerde account-id (gesorteerd) - account-id’s worden intern genormaliseerd voor lookup
Referentiepaden en legacy-compatibiliteit
Referentiepaden en legacy-compatibiliteit
- huidig auth-pad:
~/.openclaw/credentials/whatsapp/<accountId>/creds.json - back-upbestand:
creds.json.bak - legacy standaard-auth in
~/.openclaw/credentials/wordt nog steeds herkend/gemigreerd voor standaardaccountflows
Uitloggedrag
Uitloggedrag
openclaw channels logout --channel whatsapp [--account <id>] wist de WhatsApp-authstatus voor dat account.Wanneer een Gateway bereikbaar is, stopt uitloggen eerst de live WhatsApp-listener voor het geselecteerde account, zodat de gekoppelde sessie geen berichten blijft ontvangen tot de volgende herstart. openclaw channels remove --channel whatsapp stopt ook de live-listener voordat accountconfiguratie wordt uitgeschakeld of verwijderd.In legacy auth-mappen blijft oauth.json behouden terwijl Baileys-authbestanden worden verwijderd.Tools, acties en config-schrijfacties
- Agent-toolondersteuning omvat de WhatsApp-reactieactie (
react). - Actiegates:
channels.whatsapp.actions.reactionschannels.whatsapp.actions.polls
- Door het kanaal geïnitieerde config-schrijfacties zijn standaard ingeschakeld (uitschakelen via
channels.whatsapp.configWrites=false).
Probleemoplossing
Niet gekoppeld (QR vereist)
Niet gekoppeld (QR vereist)
Gekoppeld maar verbroken / reconnect-lus
Gekoppeld maar verbroken / reconnect-lus
status=408 Request Time-out Connection was lost tonen, stem dan
Baileys-sockettimings af onder web.whatsapp. Begin met het verkorten van
keepAliveIntervalMs tot onder de idle-time-out van je netwerk en verhoog
connectTimeoutMs op trage of verliesgevoelige verbindingen:~/.openclaw/logs/whatsapp-health.log Gateway inactive meldt maar
openclaw gateway status en openclaw channels status --probe tonen dat de
gateway en WhatsApp gezond zijn, voer dan openclaw doctor uit. Op Linux waarschuwt doctor
voor legacy crontab-vermeldingen die nog steeds
~/.openclaw/bin/ensure-whatsapp.sh aanroepen; verwijder die verouderde vermeldingen met
crontab -e, omdat Cron de systemd user-bus-omgeving kan missen en
dat oude script de Gateway-gezondheid verkeerd kan laten rapporteren.Koppel indien nodig opnieuw met channels login.QR-login verloopt achter een proxy
QR-login verloopt achter een proxy
openclaw channels login --channel whatsapp mislukt voordat een bruikbare QR-code wordt getoond met status=408 Request Time-out of een TLS-socketverbreking.WhatsApp Web-login gebruikt de standaard proxy-omgeving van de gatewayhost (HTTPS_PROXY, HTTP_PROXY, varianten in kleine letters, en NO_PROXY). Controleer of het gatewayproces de proxy-env erft en dat NO_PROXY niet overeenkomt met mmg.whatsapp.net.Geen actieve listener bij verzenden
Geen actieve listener bij verzenden
Antwoord verschijnt in transcript maar niet in WhatsApp
Antwoord verschijnt in transcript maar niet in WhatsApp
auto-reply delivery failed of auto-reply was not accepted by WhatsApp provider.Groepsberichten onverwacht genegeerd
Groepsberichten onverwacht genegeerd
groupPolicygroupAllowFrom/allowFrom- allowlist-vermeldingen in
groups - vermelding-gating (
requireMention+ vermeldingspatronen) - dubbele sleutels in
openclaw.json(JSON5): latere vermeldingen overschrijven eerdere, dus houd ééngroupPolicyper scope aan
channels.whatsapp.groups aanwezig is, kan WhatsApp nog steeds berichten uit andere groepen waarnemen, maar OpenClaw laat ze vallen vóór sessierouting. Voeg de groeps-JID toe aan channels.whatsapp.groups of voeg groups["*"] toe om alle groepen toe te laten terwijl afzenderautorisatie onder groupPolicy en groupAllowFrom blijft.Bun-runtimewaarschuwing
Bun-runtimewaarschuwing
Systeemprompts
WhatsApp ondersteunt Telegram-achtige systeemprompts voor groepen en directe chats via de mapsgroups en direct.
Resolutiehiërarchie voor groepsberichten:
De effectieve groups-map wordt eerst bepaald: als het account zijn eigen groups definieert, vervangt die de root-groups-map volledig (geen diepe merge). Promptlookup draait daarna op de resulterende enkele map:
- Groepsspecifieke systeemprompt (
groups["<groupId>"].systemPrompt): gebruikt wanneer de specifieke groepsvermelding in de map bestaat en de sleutelsystemPromptis gedefinieerd. AlssystemPrompteen lege string ("") is, wordt de wildcard onderdrukt en wordt er geen systeemprompt toegepast. - Groepswildcard-systeemprompt (
groups["*"].systemPrompt): gebruikt wanneer de specifieke groepsvermelding volledig afwezig is in de map, of wanneer deze bestaat maar geen sleutelsystemPromptdefinieert.
direct-map wordt eerst bepaald: als het account zijn eigen direct definieert, vervangt die de root-direct-map volledig (geen diepe merge). Promptlookup draait daarna op de resulterende enkele map:
- Direct-specifieke systeemprompt (
direct["<peerId>"].systemPrompt): gebruikt wanneer de specifieke peer-vermelding in de map bestaat en de sleutelsystemPromptis gedefinieerd. AlssystemPrompteen lege string ("") is, wordt de wildcard onderdrukt en wordt er geen systeemprompt toegepast. - Directe wildcard-systeemprompt (
direct["*"].systemPrompt): gebruikt wanneer de specifieke peer-vermelding volledig afwezig is in de map, of wanneer deze bestaat maar geen sleutelsystemPromptdefinieert.
dms blijft de lichte override-bucket voor geschiedenis per DM (dms.<id>.historyLimit). Promptoverrides staan onder direct.groups opzettelijk onderdrukt voor alle accounts in een opstelling met meerdere accounts — zelfs accounts die geen eigen groups definiëren — om te voorkomen dat een bot groepsberichten ontvangt voor groepen waartoe deze niet behoort. WhatsApp past deze guard niet toe: root-groups en root-direct worden altijd geërfd door accounts die geen override op accountniveau definiëren, ongeacht hoeveel accounts zijn geconfigureerd. In een WhatsApp-opstelling met meerdere accounts moet je, als je groeps- of directe prompts per account wilt, de volledige map expliciet onder elk account definiëren in plaats van te vertrouwen op standaardwaarden op rootniveau.
Belangrijk gedrag:
channels.whatsapp.groupsis zowel een config-map per groep als de allowlist op chatniveau voor groepen. Op root- of accountscope betekentgroups["*"]dat “alle groepen worden toegelaten” voor die scope.- Voeg alleen een wildcard-groep
systemPrompttoe wanneer je al wilt dat die scope alle groepen toelaat. Als je nog steeds alleen een vaste set groeps-ID’s in aanmerking wilt laten komen, gebruik dan geengroups["*"]voor de promptstandaard. Herhaal in plaats daarvan de prompt op elke expliciet toegestane groepsvermelding. - Groepstoelating en afzenderautorisatie zijn afzonderlijke controles.
groups["*"]verbreedt de set groepen die groepsafhandeling kan bereiken, maar autoriseert op zichzelf niet elke afzender in die groepen. Afzendertoegang wordt nog steeds afzonderlijk beheerd doorchannels.whatsapp.groupPolicyenchannels.whatsapp.groupAllowFrom. channels.whatsapp.directheeft niet hetzelfde neveneffect voor DM’s.direct["*"]biedt alleen een standaardconfiguratie voor directe chats nadat een DM al is toegelaten doordmPolicyplusallowFromof regels uit de pairing-store.
Verwijzingen naar configuratiereferentie
Primaire referentie: Belangrijke WhatsApp-velden:- toegang:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups - aflevering:
textChunkLimit,chunkMode,mediaMaxMb,sendReadReceipts,ackReaction,reactionLevel - meerdere accounts:
accounts.<id>.enabled,accounts.<id>.authDir, overschrijvingen op accountniveau - bewerkingen:
configWrites,debounceMs,web.enabled,web.heartbeatSeconds,web.reconnect.*,web.whatsapp.* - sessiegedrag:
session.dmScope,historyLimit,dmHistoryLimit,dms.<id>.historyLimit - prompts:
groups.<id>.systemPrompt,groups["*"].systemPrompt,direct.<id>.systemPrompt,direct["*"].systemPrompt