Ana içeriğe atla

WhatsApp (Web kanalı)

Durum: WhatsApp Web (Baileys) üzerinden üretime hazır. Gateway bağlı oturum(lar)ın sahibidir.

Kurulum (gerektiğinde)

  • Onboarding (openclaw onboard) ve openclaw channels add --channel whatsapp, ilk kez seçtiğinizde WhatsApp eklentisini yüklemeyi önerir.
  • openclaw channels login --channel whatsapp de, eklenti henüz mevcut değilse kurulum akışını sunar.
  • Geliştirme kanalı + git checkout: varsayılan olarak yerel eklenti yolunu kullanır.
  • Stable/Beta: varsayılan olarak npm paketi @openclaw/whatsapp kullanılır.
Elle kurulum seçeneği kullanılabilir olmaya devam eder:
openclaw plugins install @openclaw/whatsapp

Eşleştirme

Bilinmeyen gönderenler için varsayılan DM ilkesi eşleştirmedir.

Kanal sorun giderme

Kanallar arası tanılama ve onarım kılavuzları.

Gateway yapılandırması

Tam kanal yapılandırma kalıpları ve örnekleri.

Hızlı kurulum

1

WhatsApp erişim ilkesini yapılandırın

{
  channels: {
    whatsapp: {
      dmPolicy: "pairing",
      allowFrom: ["+15551234567"],
      groupPolicy: "allowlist",
      groupAllowFrom: ["+15551234567"],
    },
  },
}
2

WhatsApp'ı bağlayın (QR)

openclaw channels login --channel whatsapp
Belirli bir hesap için:
openclaw channels login --channel whatsapp --account work
3

Gateway'i başlatın

openclaw gateway
4

İlk eşleştirme isteğini onaylayın (eşleştirme modu kullanılıyorsa)

openclaw pairing list whatsapp
openclaw pairing approve whatsapp <CODE>
Eşleştirme isteklerinin süresi 1 saat sonra dolar. Bekleyen istekler kanal başına en fazla 3 ile sınırlandırılır.
OpenClaw mümkün olduğunda WhatsApp’ı ayrı bir numarada çalıştırmanızı önerir. (Kanal meta verileri ve kurulum akışı bu kurulum için optimize edilmiştir, ancak kişisel numara kurulumları da desteklenir.)

Dağıtım kalıpları

Bu en temiz operasyonel moddur:
  • OpenClaw için ayrı bir WhatsApp kimliği
  • daha net DM izin listeleri ve yönlendirme sınırları
  • kendi kendine sohbet karışıklığı olasılığının daha düşük olması
En az ilke kalıbı:
{
  channels: {
    whatsapp: {
      dmPolicy: "allowlist",
      allowFrom: ["+15551234567"],
    },
  },
}
Onboarding kişisel numara modunu destekler ve kendi kendine sohbet dostu bir temel yazar:
  • dmPolicy: "allowlist"
  • allowFrom kişisel numaranızı içerir
  • selfChatMode: true
Çalışma zamanında, kendi kendine sohbet korumaları bağlı kendi numaraya ve allowFrom değerine göre çalışır.
Mesajlaşma platformu kanalı, mevcut OpenClaw kanal mimarisinde WhatsApp Web tabanlıdır (Baileys).Yerleşik sohbet kanalı kayıt defterinde ayrı bir Twilio WhatsApp mesajlaşma kanalı yoktur.

Çalışma zamanı modeli

  • Gateway, WhatsApp soketinin ve yeniden bağlanma döngüsünün sahibidir.
  • Giden gönderimler, hedef hesap için etkin bir WhatsApp dinleyicisi gerektirir.
  • Durum ve yayın sohbetleri yok sayılır (@status, @broadcast).
  • Doğrudan sohbetler DM oturum kurallarını kullanır (session.dmScope; varsayılan main, DM’leri ajanın ana oturumunda birleştirir).
  • Grup oturumları yalıtılmıştır (agent:<agentId>:whatsapp:group:<jid>).
  • WhatsApp Web taşıması, gateway ana makinesinde standart proxy ortam değişkenlerine uyar (HTTPS_PROXY, HTTP_PROXY, NO_PROXY / küçük harfli varyantlar). Kanala özel WhatsApp proxy ayarları yerine ana makine düzeyinde proxy yapılandırmasını tercih edin.

Erişim denetimi ve etkinleştirme

channels.whatsapp.dmPolicy, doğrudan sohbet erişimini kontrol eder:
  • pairing (varsayılan)
  • allowlist
  • open (allowFrom içinde "*" bulunmasını gerektirir)
  • disabled
allowFrom, E.164 tarzı numaraları kabul eder (dahili olarak normalize edilir).Çoklu hesap geçersiz kılması: channels.whatsapp.accounts.<id>.dmPolicy (ve allowFrom) o hesap için kanal düzeyindeki varsayılanlardan önceliklidir.Çalışma zamanı davranışı ayrıntıları:
  • eşleştirmeler kanal izin deposunda kalıcı olarak saklanır ve yapılandırılmış allowFrom ile birleştirilir
  • hiçbir izin listesi yapılandırılmadıysa, bağlı kendi numaraya varsayılan olarak izin verilir
  • giden fromMe DM’leri asla otomatik eşleştirilmez

Kişisel numara ve kendi kendine sohbet davranışı

Bağlı kendi numara allowFrom içinde de mevcut olduğunda, WhatsApp kendi kendine sohbet korumaları etkinleşir:
  • kendi kendine sohbet dönüşlerinde okundu bilgilerini atla
  • aksi halde kendinize ping atacak olan mention-JID otomatik tetikleme davranışını yok say
  • messages.responsePrefix ayarlanmamışsa, kendi kendine sohbet yanıtları varsayılan olarak [{identity.name}] veya [openclaw] olur

Mesaj normalizasyonu ve bağlam

Gelen WhatsApp mesajları paylaşılan gelen zarfına sarılır.Alıntılanmış bir yanıt varsa, bağlam şu biçimde eklenir:
[<sender> kullanıcısına yanıt veriliyor id:<stanzaId>]
<alıntılanan gövde veya medya yer tutucusu>
[/Yanıt veriliyor]
Yanıt meta veri alanları da mevcut olduğunda doldurulur (ReplyToId, ReplyToBody, ReplyToSender, gönderen JID/E.164).
Yalnızca medya içeren gelen mesajlar şu gibi yer tutucularla normalize edilir:
  • <media:image>
  • <media:video>
  • <media:audio>
  • <media:document>
  • <media:sticker>
Konum ve kişi yükleri, yönlendirmeden önce metinsel bağlama normalize edilir.
Gruplar için, işlenmemiş mesajlar arabelleğe alınabilir ve bot sonunda tetiklendiğinde bağlam olarak eklenebilir.
  • varsayılan sınır: 50
  • yapılandırma: channels.whatsapp.historyLimit
  • yedek: messages.groupChat.historyLimit
  • 0 devre dışı bırakır
Ekleme işaretçileri:
  • [Son yanıtınızdan bu yana sohbet mesajları - bağlam için]
  • [Geçerli mesaj - buna yanıt verin]
Okundu bilgileri, kabul edilen gelen WhatsApp mesajları için varsayılan olarak etkindir.Genel olarak devre dışı bırakmak için:
{
  channels: {
    whatsapp: {
      sendReadReceipts: false,
    },
  },
}
Hesap başına geçersiz kılma:
{
  channels: {
    whatsapp: {
      accounts: {
        work: {
          sendReadReceipts: false,
        },
      },
    },
  },
}
Kendi kendine sohbet dönüşleri, genel olarak etkin olsa bile okundu bilgilerini atlar.

Teslimat, parçalara ayırma ve medya

  • varsayılan parça sınırı: channels.whatsapp.textChunkLimit = 4000
  • channels.whatsapp.chunkMode = "length" | "newline"
  • newline modu paragraf sınırlarını (boş satırlar) tercih eder, ardından uzunluk açısından güvenli parçalamaya geri döner
  • resim, video, ses (PTT sesli not) ve belge yüklerini destekler
  • audio/ogg, sesli not uyumluluğu için audio/ogg; codecs=opus olarak yeniden yazılır
  • animasyonlu GIF oynatımı, video gönderimlerinde gifPlayback: true ile desteklenir
  • çoklu medya yanıt yükleri gönderilirken başlıklar ilk medya öğesine uygulanır
  • medya kaynağı HTTP(S), file:// veya yerel yollar olabilir
  • gelen medya kaydetme sınırı: channels.whatsapp.mediaMaxMb (varsayılan 50)
  • giden medya gönderme sınırı: channels.whatsapp.mediaMaxMb (varsayılan 50)
  • hesap başına geçersiz kılmalar channels.whatsapp.accounts.<accountId>.mediaMaxMb kullanır
  • resimler, sınırlara sığması için otomatik olarak optimize edilir (yeniden boyutlandırma/kalite taraması)
  • medya gönderme hatasında, ilk öğe yedeği yanıtı sessizce düşürmek yerine metin uyarısı gönderir

Tepki düzeyi

channels.whatsapp.reactionLevel, ajanın WhatsApp’ta emoji tepkilerini ne kadar geniş kullandığını kontrol eder:
DüzeyAlındı tepkileriAjan tarafından başlatılan tepkilerAçıklama
"off"HayırHayırHiç tepki yok
"ack"EvetHayırYalnızca alındı tepkileri (yanıt öncesi alındı)
"minimal"EvetEvet (temkinli)Alındı + temkinli yönlendirmeli ajan tepkileri
"extensive"EvetEvet (teşvik edilir)Alındı + teşvik edilen yönlendirmeli ajan tepkileri
Varsayılan: "minimal". Hesap başına geçersiz kılmalar channels.whatsapp.accounts.<id>.reactionLevel kullanır.
{
  channels: {
    whatsapp: {
      reactionLevel: "ack",
    },
  },
}

Alındı tepkileri

WhatsApp, channels.whatsapp.ackReaction üzerinden gelen alımında anında alındı tepkilerini destekler. Alındı tepkileri reactionLevel tarafından geçitlenir — reactionLevel "off" olduğunda bastırılır.
{
  channels: {
    whatsapp: {
      ackReaction: {
        emoji: "👀",
        direct: true,
        group: "mentions", // always | mentions | never
      },
    },
  },
}
Davranış notları:
  • gelen kabul edildikten hemen sonra gönderilir (yanıt öncesi)
  • hatalar günlüğe kaydedilir ancak normal yanıt teslimatını engellemez
  • grup modu mentions, bahsetmeyle tetiklenen dönüşlerde tepki verir; grup etkinleştirme always bu denetim için baypas görevi görür
  • WhatsApp channels.whatsapp.ackReaction kullanır (eski messages.ackReaction burada kullanılmaz)

Çoklu hesap ve kimlik bilgileri

  • hesap kimlikleri channels.whatsapp.accounts içinden gelir
  • varsayılan hesap seçimi: varsa default, aksi halde ilk yapılandırılmış hesap kimliği (sıralanmış)
  • hesap kimlikleri arama için dahili olarak normalize edilir
  • geçerli kimlik doğrulama yolu: ~/.openclaw/credentials/whatsapp/<accountId>/creds.json
  • yedek dosya: creds.json.bak
  • ~/.openclaw/credentials/ içindeki eski varsayılan kimlik doğrulama hâlâ tanınır/varsayılan hesap akışları için taşınır
openclaw channels logout --channel whatsapp [--account <id>], o hesap için WhatsApp kimlik doğrulama durumunu temizler.Eski kimlik doğrulama dizinlerinde, oauth.json korunurken Baileys kimlik doğrulama dosyaları kaldırılır.

Araçlar, eylemler ve yapılandırma yazımları

  • Ajan araç desteği WhatsApp tepki eylemini (react) içerir.
  • Eylem geçitleri:
    • channels.whatsapp.actions.reactions
    • channels.whatsapp.actions.polls
  • Kanal tarafından başlatılan yapılandırma yazımları varsayılan olarak etkindir (channels.whatsapp.configWrites=false ile devre dışı bırakın).

Sorun giderme

Belirti: kanal durumu bağlı olmadığını bildirir.Düzeltme:
openclaw channels login --channel whatsapp
openclaw channels status
Belirti: tekrar eden bağlantı kesilmeleri veya yeniden bağlanma denemeleri olan bağlı hesap.Düzeltme:
openclaw doctor
openclaw logs --follow
Gerekirse channels login ile yeniden bağlayın.
Giden gönderimler, hedef hesap için etkin bir gateway dinleyicisi yoksa hızlıca başarısız olur.Gateway’in çalıştığından ve hesabın bağlı olduğundan emin olun.
Şu sırayla kontrol edin:
  • groupPolicy
  • groupAllowFrom / allowFrom
  • groups izin listesi girdileri
  • bahsetme geçidi (requireMention + bahsetme kalıpları)
  • openclaw.json içindeki yinelenen anahtarlar (JSON5): sonraki girdiler öncekileri geçersiz kılar, bu nedenle kapsam başına tek bir groupPolicy tutun
WhatsApp gateway çalışma zamanı Node kullanmalıdır. Bun, kararlı WhatsApp/Telegram gateway işlemi için uyumsuz olarak işaretlenmiştir.

Yapılandırma başvuru işaretçileri

Birincil başvuru: Yüksek sinyalli WhatsApp alanları:
  • erişim: dmPolicy, allowFrom, groupPolicy, groupAllowFrom, groups
  • teslimat: textChunkLimit, chunkMode, mediaMaxMb, sendReadReceipts, ackReaction, reactionLevel
  • çoklu hesap: accounts.<id>.enabled, accounts.<id>.authDir, hesap düzeyi geçersiz kılmalar
  • operasyonlar: configWrites, debounceMs, web.enabled, web.heartbeatSeconds, web.reconnect.*
  • oturum davranışı: session.dmScope, historyLimit, dmHistoryLimit, dms.<id>.historyLimit

İlgili