Skip to main content

WhatsApp (web channel)

Holat: WhatsApp Web (Baileys) orqali production-ready. Gateway bog‘langan sessiya(lar)ga egalik qiladi.

Pairing

Standart DM siyosati noma’lum yuboruvchilar uchun pairing hisoblanadi.

Channel troubleshooting

Kanallararo diagnostika va tuzatish bo‘yicha yo‘riqnomalar.

Gateway configuration

Kanal konfiguratsiyasining to‘liq andozalari va misollari.

Tezkor sozlash

1

Configure WhatsApp access policy

2

Link WhatsApp (QR)

3

Start the gateway

4

Approve first pairing request (if using pairing mode)

OpenClaw imkon qadar WhatsApp’ni alohida raqamda ishga tushirishni tavsiya qiladi. (Kanal metama’lumotlari va onboarding jarayoni shu sozlama uchun optimallashtirilgan, ammo shaxsiy raqam bilan sozlash ham qo‘llab-quvvatlanadi.)

Joylashtirish andozalari

Onboarding shaxsiy raqam rejimini qo‘llab-quvvatlaydi va self-chat uchun mos bazaviy sozlamani yozadi:
Xabar almashish platformasi kanali joriy OpenClaw kanal arxitekturasida WhatsApp Web (Baileys) asosida ishlaydi.

Inbound flow (DM + group)

  • WhatsApp events come from messages.upsert (Baileys).
  • Inbox listeners are detached on shutdown to avoid accumulating event handlers in tests/restarts.
  • Status/broadcast chats are ignored.
  • Direct chats use E.164; groups use group JID.
  • DM policy: channels.whatsapp.dmPolicy controls direct chat access (default: pairing).

Personal-number mode (fallback)

channels.whatsapp.dmPolicy to‘g‘ridan-to‘g‘ri chat kirishini boshqaradi:

Shaxsiy raqam va self-chat xulq-atvori

Bog‘langan self raqam allowFrom ichida ham mavjud bo‘lsa, WhatsApp self-chat himoyasi faollashadi:
  • self-chat xabarlari uchun o‘qilganlik kvitansiyalarini o‘tkazib yuborish
  • aks holda o‘zingizni ping qilishi mumkin bo‘lgan mention-JID avtomatik trigger xulq-atvorini e’tiborsiz qoldirish
  • agar messages.responsePrefix o‘rnatilmagan bo‘lsa, self-chat javoblari standart tarzda [{identity.name}] yoki [openclaw] bilan boshlanadi

Xabarni normallashtirish va kontekst

Kiruvchi WhatsApp xabarlari umumiy inbound envelope ichiga o‘raladi.
Faqat media tarkibli kiruvchi xabarlar quyidagi kabi placeholder’lar bilan normallashtiriladi:
Guruhlar uchun qayta ishlanmagan xabarlar buferga saqlanishi va bot oxir-oqibat ishga tushganda kontekst sifatida qo‘shilishi mumkin.
Qabul qilingan kiruvchi WhatsApp xabarlari uchun o‘qilganlik tasdiqlari (read receipts) sukut bo‘yicha yoqilgan.

Yetkazib berish, bo‘laklash (chunking) va media

  • standart bo‘lak limiti: channels.whatsapp.textChunkLimit = 4000
  • channels.whatsapp.chunkMode = "length" | "newline"
  • newline rejimi avval paragraf chegaralarini (bo‘sh qatorlar) afzal ko‘radi, so‘ng uzunlik bo‘yicha xavfsiz bo‘laklashga o‘tadi
  • rasm, video, audio (PTT voice-note) va hujjat payload’larini qo‘llab-quvvatlaydi
  • audio/ogg voice-note mosligi uchun audio/ogg; codecs=opus ga qayta yoziladi
  • animatsion GIF ijrosi video yuborishda gifPlayback: true orqali qo‘llab-quvvatlanadi
  • bir nechta media bilan javob yuborilganda caption birinchi media elementiga qo‘llanadi
  • media manbasi HTTP(S), file:// yoki lokal yo‘llar bo‘lishi mumkin
  • kiruvchi media saqlash limiti: channels.whatsapp.mediaMaxMb (standart 50)
  • avtomatik javoblar uchun chiquvchi media limiti: agents.defaults.mediaMaxMb (standart 5MB)
  • rasmlar limitlarga moslash uchun avtomatik optimallashtiriladi (o‘lcham/sifat moslashtirish)
  • media yuborishda xatolik bo‘lsa, javobni jim tashlab yuborish o‘rniga birinchi element fallback sifatida ogohlantiruvchi matn yuboriladi

Tasdiqlovchi reaksiyalar

WhatsApp kiruvchi xabar qabul qilinganda darhol ack reaksiyalarini channels.whatsapp.ackReaction orqali qo‘llab-quvvatlaydi.
Xulq-atvor bo‘yicha eslatmalar:
  • kiruvchi xabar qabul qilingach darhol (javobdan oldin) yuboriladi
  • xatoliklar log qilinadi, ammo odatiy javob yetkazilishini to‘xtatmaydi
  • mentions guruh rejimi mention-trigger qilingan burilishlarda reaksiya bildiradi; guruh aktivatsiyasi always bo‘lsa, bu tekshiruvni chetlab o‘tadi
  • WhatsApp channels.whatsapp.ackReaction dan foydalanadi (legacy messages.ackReaction bu yerda ishlatilmaydi)

Multi-account va credentials

  • akkaunt id’lari channels.whatsapp.accounts dan olinadi
  • standart akkaunt tanlovi: agar mavjud bo‘lsa default, aks holda sozlangan akkaunt id’laridan birinchisi (saralangan)
  • akkaunt id’lari qidiruv uchun ichki tarzda normallashtiriladi
  • joriy auth yo‘li: ~/.openclaw/credentials/whatsapp/<accountId>/creds.json
  • zaxira fayl: creds.json.bak
  • ~/.openclaw/credentials/ ichidagi legacy standart auth hanuz tan olinadi/migratsiya qilinadi (default-account oqimlari uchun)
openclaw channels logout --channel whatsapp [--account <id>] ushbu akkaunt uchun WhatsApp auth holatini tozalaydi.

Vositalar, amallar va config yozuvlari

  • Agent vositalari WhatsApp reaksiya amalini (react) qo‘llab-quvvatlaydi.
  • [[audio_as_voice]] WhatsApp uchun e’tiborga olinmaydi (audio allaqachon ovozli xabar sifatida yuboriladi).
    • channels.whatsapp.actions.reactions
    • channels.whatsapp.actions.polls
  • Channel tomonidan boshlangan config yozuvlari sukut bo‘yicha yoqilgan (channels.whatsapp.configWrites=false orqali o‘chiriladi).

Media limitlari + optimallashtirish

Alomat: channel holati bog‘lanmagan deb ko‘rsatilmoqda.
Alomat: ulangan akkauntda takroriy uzilishlar yoki qayta ulanish urinishlari kuzatilmoqda.
Maqsadli akkaunt uchun faol gateway listener mavjud bo‘lmasa, chiquvchi yuborishlar darhol xato bilan to‘xtaydi.
Quyidagi tartibda tekshiring:
WhatsApp gateway ishga tushirish muhiti Node’dan foydalanishi kerak. Bun barqaror WhatsApp/Telegram gateway ishlashi uchun mos emas deb belgilangan.

Konfiguratsiya ma’lumotnomasi havolalari

Bun runtime WhatsApp uchun muhim maydonlar:
  • access: dmPolicy, allowFrom, groupPolicy, groupAllowFrom, groups
  • delivery: textChunkLimit, chunkMode, mediaMaxMb, sendReadReceipts, ackReaction
  • multi-account: accounts.<id>.enabled, accounts.<id>.authDir, account-level overrides
  • operations: configWrites, debounceMs, web.enabled, web.heartbeatSeconds, web.reconnect.*
  • session xatti-harakati: session.dmScope, historyLimit, dmHistoryLimit, dms.<id>.historyLimit

Bog‘liq