WhatsApp (webbkanal)
Status: WhatsApp Web via Baileys bara. Gateway äger session(erna).Snabbstart (nybörjare)
- Använd ett separat telefonnummer om möjligt (rekommenderas).
- Konfigurera WhatsApp i
~/.openclaw/openclaw.json. - Kör
openclaw channels loginför att skanna QR‑koden (Länkade enheter). - Starta gatewayen.
Mål
- Flera WhatsApp‑konton (multi‑account) i en Gateway‑process.
- Deterministisk routning: svar går tillbaka till WhatsApp, ingen modellroutning.
- Modellen ser tillräcklig kontext för att förstå citerade svar.
Konfigskrivningar
Som standard får WhatsApp skriva konfiguppdateringar som triggas av/config set|unset (kräver commands.config: true).
Inaktivera med:
Arkitektur (vem äger vad)
- Gateway äger Baileys‑socketen och inkorgsloopen.
- CLI / macOS‑app pratar med gatewayen; ingen direkt användning av Baileys.
- Aktiv lyssnare krävs för utgående sändningar; annars misslyckas sändningen direkt.
Skaffa ett telefonnummer (två lägen)
WhatsApp kräver ett riktigt mobilnummer för verifiering. VoIP och virtuella nummer är oftast blockerade. Det finns två sätt att köra OpenClaw på WhatsApp:Dedikerat nummer (rekommenderas)
Använd ett separat telefonnummer för OpenClaw. Bästa UX, ren routing, inga självchatt egendomar. Idealisk inställning: reserv/gammal Android-telefon + eSIM. Lämna den på Wi‐Fi och makt, och länka den via QR. WhatsApp Business: Du kan använda WhatsApp Business på samma enhet med ett annat nummer. Bra för att hålla din personliga WhatsApp separat — installera WhatsApp Business och registrera OpenClaw nummer där. Exempelkonfig (dedikerat nummer, allowlist för en användare):channels.whatsapp.dmPolicy till parkoppling. Okända avsändare får en parningskod; godkänn med:
openclaw parkoppling godkänna whatsapp <code>
Personligt nummer (reserv)
Snabb reserv: kör OpenClaw på ditt eget nummer. Meddelande själv (WhatsApp “Meddelande själv”) för att testa så att du inte spam kontakter. Räkna med att läsa verifieringskoder på din huvudtelefon under installation och experiment. **Måste aktivera självchatt läge. * När guiden frågar efter ditt personliga WhatsApp-nummer, ange telefonen kommer du att meddelande från (ägaren/avsändaren), inte assistentnumret. Exempelkonfig (personligt nummer, egen‑chatt):[{identity.name}] när satt (annars [openclaw])
om messages.responsePrefix är unset. Ange uttryckligen att anpassa eller inaktivera
prefixet (använd "" för att ta bort det).
Tips för nummeranskaffning
- Lokalt eSIM från ditt lands mobiloperatör (mest tillförlitligt)
- Kontantkort — billigt, behöver bara ta emot ett SMS för verifiering
creds.json.
Varför inte Twilio?
- Tidiga OpenClaw‑byggen stödde Twilios WhatsApp Business‑integration.
- WhatsApp Business‑nummer passar dåligt för en personlig assistent.
- Meta upprätthåller ett 24‑timmars svarsfönster; om du inte har svarat de senaste 24 timmarna kan företagsnumret inte initiera nya meddelanden.
- Hög volym eller ”pratig” användning triggar aggressiv blockering, eftersom företagskonton inte är avsedda att skicka dussintals personliga assistentmeddelanden.
- Resultat: opålitlig leverans och frekventa blockeringar, därför togs stödet bort.
Inloggning + autentiseringsuppgifter
- Inloggningskommando:
openclaw channels login(QR via Länkade enheter). - Multi‑account‑inloggning:
openclaw channels login --account <id>(<id>=accountId). - Standardkonto (när
--accountutelämnas):defaultom det finns, annars första konfigurerade konto‑ID (sorterat). - Autentiseringsuppgifter lagras i
~/.openclaw/credentials/whatsapp/<accountId>/creds.json. - Säkerhetskopia i
creds.json.bak(återställs vid korruption). - Bakåtkompatibilitet: äldre installationer lagrade Baileys‑filer direkt i
~/.openclaw/credentials/. - Utloggning:
openclaw channels logout(eller--account <id>) raderar WhatsApp‑auth‑tillståndet (men behåller deladoauth.json). - Utloggad socket ⇒ fel som instruerar att länka igen.
Inkommande flöde (DM + grupp)
- WhatsApp‑händelser kommer från
messages.upsert(Baileys). - Inkorgslyssnare kopplas bort vid nedstängning för att undvika ackumulerade händelsehanterare vid tester/omstarter.
- Status-/broadcast‑chattar ignoreras.
- Direktchattar använder E.164; grupper använder grupp‑JID.
- DM‑policy:
channels.whatsapp.dmPolicystyr åtkomst till direktchatt (standard:pairing).- Parning: okända avsändare får en parningskod (godkänn via
openclaw pairing approve whatsapp <code>; koder upphör efter 1 timme). - Öppen: kräver att
channels.whatsapp.allowFrominkluderar"*". - Ditt länkade WhatsApp‑nummer är implicit betrott, så egna meddelanden hoppar över kontrollerna
channels.whatsapp.dmPolicyochchannels.whatsapp.allowFrom.
- Parning: okända avsändare får en parningskod (godkänn via
Personligt‑nummer‑läge (reserv)
Om du kör OpenClaw på ditt personliga WhatsApp‑nummer, aktiverachannels.whatsapp.selfChatMode (se exempel ovan).
Beteende:
- Utgående DM triggar aldrig parningssvar (förhindrar spam till kontakter).
- Inkommande okända avsändare följer fortfarande
channels.whatsapp.dmPolicy. - Egen‑chatt‑läge (allowFrom inkluderar ditt nummer) undviker automatiska läskvitton och ignorerar mention‑JID.
- Läskvitton skickas för DM som inte är egen‑chatt.
Läskvitton
Som standard markerar gatewayen inkommande WhatsApp‑meddelanden som lästa (blå bockar) när de accepteras. Inaktivera globalt:- Egen‑chatt‑läge hoppar alltid över läskvitton.
WhatsApp‑FAQ: skicka meddelanden + parning
Kommer OpenClaw meddelanden slumpmässiga kontakter när jag länkar WhatsApp?Nej. Standardpolicy för DM är ihopkoppling, så okända avsändare får bara en parningskod och deras meddelande behandlas inte. OpenClaw svarar bara på chattar som den tar emot, eller för att skicka dig explicit trigger (agent/CLI). Hur fungerar parning på WhatsApp?
Parning är en DM‑grind för okända avsändare:
- Första DM från en ny avsändare returnerar en kort kod (meddelandet behandlas inte).
- Godkänn med:
openclaw pairing approve whatsapp <code>(lista medopenclaw pairing list whatsapp). - Koder upphör efter 1 timme; väntande förfrågningar är begränsade till 3 per kanal.
Yes, by routing each sender to a different agent via
bindings (peer kind: "direct", sender E.164 like +15551234567). Replies still come from the same WhatsApp account, and direct chats collapse to each agent’s main session, so use one agent per person. DM åtkomstkontroll (dmPolicy/allowFrom) är global per WhatsApp-konto. Se Multi-Agent Routing.
**Varför ber du om mitt telefonnummer i guiden? *Guiden använder den för att ställa in din allowlist/owner så att dina egna DMs är tillåtna. Det används inte för automatisk sändning. Om du kör på ditt personliga WhatsApp-nummer, använd samma nummer och aktivera
channels.whatsapp.selfChatMode.
Meddelandenormalisering (vad modellen ser)
-
Bodyär aktuell meddelandetext med kuvert. -
Kontext för citerade svar läggs alltid till:
-
Svarsmetadata sätts också:
ReplyToId= stanzaIdReplyToBody= citerad text eller mediaplatshållareReplyToSender= E.164 när känt
-
Inkommande meddelanden med enbart media använder platshållare:
<media:image|video|audio|document|sticker>
Grupper
- Grupper mappar till
agent:<agentId>:whatsapp:group:<jid>‑sessioner. - Gruppolicy:
channels.whatsapp.groupPolicy = open|disabled|allowlist(standardallowlist). - Aktiveringslägen:
mention(standard): kräver @omnämnande eller regex‑träff.always: triggar alltid.
/activation mention|alwaysär endast för ägare och måste skickas som ett fristående meddelande.- Ägare =
channels.whatsapp.allowFrom(eller egen E.164 om ej satt). - Historikinjektion (endast väntande):
- Nyliga obehandlade meddelanden (standard 50) infogas under:
[Chat messages since your last reply - for context](meddelanden som redan finns i sessionen återinjekteras inte) - Aktuellt meddelande under:
[Current message - respond to this] - Avsändarsuffix läggs till:
[from: Name (+E164)]
- Nyliga obehandlade meddelanden (standard 50) infogas under:
- Gruppmetadata cachelagras i 5 min (ämne + deltagare).
Leverans av svar (trådning)
- WhatsApp Web skickar standardmeddelanden (ingen citerad svars‑trådning i nuvarande gateway).
- Svarstaggar ignoreras på denna kanal.
Bekräftelsereaktioner (auto‑reaktion vid mottagning)
WhatsApp kan automatiskt skicka emoji-reaktioner till inkommande meddelanden omedelbart vid mottagandet, innan boten genererar ett svar. Detta ger omedelbar feedback till användare som deras meddelande mottogs. Konfiguration:emoji(sträng): Emoji att använda för bekräftelse (t.ex., ”👀”, ”✅”, ”📨”). Tom eller utelämnad = funktion inaktiverad.direct(boolesk, standard:true): Skicka reaktioner i direkt-/DM‑chattar.group(sträng, standard:"mentions"): Beteende i gruppchattar:"always": Reagera på alla gruppmeddelanden (även utan @omnämnande)"mentions": Reagera endast när boten @omnämns"never": Reagera aldrig i grupper
- Reaktioner skickas omedelbart vid mottagning av meddelandet, före skrivindikatorer eller botsvar.
- I grupper med
requireMention: false(aktivering: alltid) kommergroup: "mentions"att reagera på alla meddelanden (inte bara @omnämnanden). - Fire‑and‑forget: misslyckade reaktioner loggas men hindrar inte boten från att svara.
- Deltagar‑JID inkluderas automatiskt för gruppreaktioner.
- WhatsApp ignorerar
messages.ackReaction; användchannels.whatsapp.ackReactioni stället.
Agentverktyg (reaktioner)
- Verktyg:
whatsappmed åtgärdenreact(chatJid,messageId,emoji, valfriremove). - Valfritt:
participant(gruppavsändare),fromMe(reagera på eget meddelande),accountId(multi‑account). - Semantik för borttagning av reaktioner: se /tools/reactions.
- Verktygsgating:
channels.whatsapp.actions.reactions(standard: aktiverad).
Begränsningar
- Utgående text delas upp till
channels.whatsapp.textChunkLimit(standard 4000). - Valfri radbrytnings‑chunkning: sätt
channels.whatsapp.chunkMode="newline"för att dela på tomma rader (styckegränser) före längd‑chunkning. - Sparade inkommande media begränsas av
channels.whatsapp.mediaMaxMb(standard 50 MB). - Utgående mediaobjekt begränsas av
agents.defaults.mediaMaxMb(standard 5 MB).
Utgående sändning (text + media)
- Använder aktiv webblyssnare; fel om gatewayen inte körs.
- Text‑chunkning: max 4k per meddelande (konfigurerbart via
channels.whatsapp.textChunkLimit, valfrichannels.whatsapp.chunkMode). - Media:
- Bild/video/ljud/dokument stöds.
- Ljud skickas som PTT;
audio/ogg⇒audio/ogg; codecs=opus. - Bildtext endast på första mediaobjektet.
- Mediahämtning stöder HTTP(S) och lokala sökvägar.
- Animerade GIF: WhatsApp förväntar sig MP4 med
gifPlayback: trueför inline‑loopning.- CLI:
openclaw message send --media <mp4> --gif-playback - Gateway:
send‑parametrar inkluderargifPlayback: true
- CLI:
Röstmeddelanden (PTT‑ljud)
WhatsApp skickar ljud som röstmeddelanden (PTT‑bubbla).- Bästa resultat: OGG/Opus. OpenClaw skriver om
audio/oggtillaudio/ogg; codecs=opus. [[audio_as_voice]]ignoreras för WhatsApp (ljud skickas redan som röstmeddelande).
Mediebegränsningar + optimering
- Standardtak utgående: 5 MB (per mediaobjekt).
- Åsidosättning:
agents.defaults.mediaMaxMb. - Bilder optimeras automatiskt till JPEG under taket (storleksändring + kvalitets‑svep).
- För stora media ⇒ fel; mediasvar faller tillbaka till textvarning.
Heartbeats
- Gateway‑heartbeat loggar anslutningshälsa (
web.heartbeatSeconds, standard 60 s). - Agent‑heartbeat kan konfigureras per agent (
agents.list[].heartbeat) eller globalt viaagents.defaults.heartbeat(reserv när inga per‑agent‑poster är satta).- Använder den konfigurerade hjärtslagsprompten (standard:
Read HEARTBEAT.md om den existerar (arbetsytans sammanhang). Följ den strikt. Sluta inte eller upprepa gamla uppgifter från tidigare chattar. Om inget behöver uppmärksamhet, svara HEARTBEAT_OK.) +HEARTBEAT_OKhoppa över beteende. - Leverans går som standard till senast använda kanal (eller konfigurerat mål).
- Använder den konfigurerade hjärtslagsprompten (standard:
Återanslutningsbeteende
- Backoff‑policy:
web.reconnect:initialMs,maxMs,factor,jitter,maxAttempts.
- Om maxAttempts nås stoppas webbövervakning (degraderat läge).
- Utloggad ⇒ stoppa och kräv återlänkning.
Snabbkarta för konfig
channels.whatsapp.dmPolicy(DM‑policy: parning/allowlist/öppen/inaktiverad).channels.whatsapp.selfChatMode(samma‑telefon‑setup; boten använder ditt personliga WhatsApp‑nummer).channels.whatsapp.allowFrom(DM allowlist). WhatsApp använder E.164 telefonnummer (inga användarnamn).channels.whatsapp.mediaMaxMb(tak för sparad inkommande media).channels.whatsapp.ackReaction(auto‑reaktion vid mottagning:{emoji, direct, group}).channels.whatsapp.accounts.<accountId>.*(inställningar per konto + valfriaauthDir).channels.whatsapp.accounts.<accountId>.mediaMaxMb(per konto inkommande media cap).channels.whatsapp.accounts.<accountId>.ackReaction(reaktionsförflyttning per konto)channels.whatsapp.groupAllowFrom(allowlist för gruppavsändare).channels.whatsapp.groupPolicy(gruppolicy).channels.whatsapp.historyLimit/channels.whatsapp.accounts.<accountId>.historyLimit(grupp historia sammanhang;0inaktiveras).channels.whatsapp.dmHistoryLimit(DM historikgräns i användarvänder). Åsidosättningar per användare:channels.whatsapp.dms["<phone>"].historyLimit.channels.whatsapp.groups(grupp‑allowlist + standard för mention‑gating; använd"*"för att tillåta alla)channels.whatsapp.actions.reactions(grind för WhatsApp‑verktygsreaktioner).agents.list[].groupChat.mentionPatterns(ellermessages.groupChat.mentionPatterns)messages.groupChat.historyLimitchannels.whatsapp.messagePrefix(inkommande prefix; per-account:channels.whatsapp.accounts.<accountId>.messagePrefix; föråldrat:messages.messagePrefix)messages.responsePrefix(utgående prefix)agents.defaults.mediaMaxMbagents.defaults.heartbeat.everyagents.defaults.heartbeat.model(valfri åsidosättning)agents.defaults.heartbeat.targetagents.defaults.heartbeat.toagents.defaults.heartbeat.sessionagents.list[].heartbeat.*(åsidosättningar per agent)session.*(scope, idle, store, mainKey)web.enabled(inaktivera kanalstart när false)web.heartbeatSecondsweb.reconnect.*
Loggar + felsökning
- Delssystem:
whatsapp/inbound,whatsapp/outbound,web-heartbeat,web-reconnect. - Loggfil:
/tmp/openclaw/openclaw-YYYY-MM-DD.log(konfigurerbar). - Felsökningsguide: Gateway troubleshooting.
Felsökning (snabb)
Inte länkad / QR‑inloggning krävs- Symptom:
channels statusvisarlinked: falseeller varnar ”Not linked”. - Åtgärd: kör
openclaw channels loginpå gateway‑värden och skanna QR‑koden (WhatsApp → Inställningar → Länkade enheter).
- Symptom:
channels statusvisarrunning, disconnectedeller varnar ”Linked but disconnected”. - Fix:
openclaw doctor(eller starta om gateway). Om det kvarstår, länka tillbaka viakanalers inloggningoch inspekteraopenclaw loggar --follow.
- Bun är inte rekommenderas. WhatsApp (Baileys) och Telegram är opålitliga på Bun. Kör gateway med Node. (Se Kom igång runtime note.)