Zalo osobisty (nieoficjalny)

Status: eksperymentalny. Ta integracja automatyzuje osobiste konto Zalo przez natywne zca-js wewnatrz OpenClaw.

Ostrzezenie: To jest nieoficjalna integracja i moze skutkowac zawieszeniem/banem konta. Uzywasz na wlasne ryzyko.

Wymagany plugin

Zalo Personal jest dostarczany jako plugin i nie jest dolaczony do instalacji podstawowej.

  • Instalacja przez CLI: openclaw plugins install @openclaw/zalouser
  • Lub z checkoutu zrodlowego: openclaw plugins install ./extensions/zalouser
  • Szczegoly: Pluginy

Zewnetrzny plik binarny zca/openzca CLI nie jest wymagany.

Szybka konfiguracja (dla poczatkujacych)

  1. Zainstaluj plugin (zobacz wyzej).
  2. Zaloguj sie (QR, na maszynie Gateway):
    • openclaw channels login --channel zalouser
    • Zeskanuj kod QR aplikacja mobilna Zalo.
  3. Wlacz kanal:
{
  channels: {
    zalouser: {
      enabled: true,
      dmPolicy: "pairing",
    },
  },
}
  1. Zrestartuj Gateway (lub zakoncz onboarding).
  2. Dostep DM domyslnie wymaga parowania; zatwierdz kod parowania przy pierwszym kontakcie.

Czym jest

  • Dziala calkowicie w procesie przez zca-js.
  • Uzywa natywnych listenerow zdarzen do odbioru wiadomosci przychodzacych.
  • Wysyla odpowiedzi bezposrednio przez API JS (tekst/media/link).
  • Zaprojektowany do przypadkow uzycia “konta osobistego”, gdy Zalo Bot API nie jest dostepne.

Nazewnictwo

ID kanalu to zalouser, aby jasno wskazac, ze automatyzuje osobiste konto uzytkownika Zalo (nieoficjalne). Nazwe zalo rezerwujemy na potencjalna przyszla oficjalna integracje z API Zalo.

Znajdowanie ID (katalog)

Uzyj CLI katalogu, aby odkryc peery/grupy i ich ID:

openclaw directory self --channel zalouser
openclaw directory peers list --channel zalouser --query "name"
openclaw directory groups list --channel zalouser --query "work"

Limity

  • Tekst wychodzacy jest dzielony na kawalki po ~2000 znakow (limity klienta Zalo).
  • Strumieniowanie jest domyslnie blokowane.

Kontrola dostepu (DM)

channels.zalouser.dmPolicy obsluguje: pairing | allowlist | open | disabled (domyslnie: pairing).

channels.zalouser.allowFrom akceptuje ID uzytkownikow lub nazwy. Podczas onboardingu nazwy sa rozwiazywane na ID za pomoca wbudowanego wyszukiwania kontaktow pluginu.

Zatwierdzanie przez:

  • openclaw pairing list zalouser
  • openclaw pairing approve zalouser <code>

Dostep grupowy (opcjonalny)

  • Domyslnie: channels.zalouser.groupPolicy = "open" (grupy dozwolone). Uzyj channels.defaults.groupPolicy aby nadpisac domyslne gdy nie ustawione.
  • Ograniczenie do listy dozwolonych:
    • channels.zalouser.groupPolicy = "allowlist"
    • channels.zalouser.groups (klucze powinny byc stabilnymi ID grup; nazwy sa rozwiazywane na ID przy starcie gdy to mozliwe)
    • channels.zalouser.groupAllowFrom (kontroluje, ktorzy nadawcy w dozwolonych grupach moga wyzwalac bota)
  • Zablokowanie wszystkich grup: channels.zalouser.groupPolicy = "disabled".
  • Kreator konfiguracji moze wyswietlic monit o listy dozwolonych grup.
  • Przy starcie OpenClaw rozwiazuje nazwy grup/uzytkownikow w listach dozwolonych na ID i loguje mapowanie.
  • Dopasowanie listy dozwolonych grup domyslnie odbywa sie tylko po ID. Nierozwiazane nazwy sa ignorowane dla autoryzacji, chyba ze channels.zalouser.dangerouslyAllowNameMatching: true jest wlaczone.
  • channels.zalouser.dangerouslyAllowNameMatching: true to tryb awaryjny kompatybilnosci, ktory ponownie wlacza zmienne dopasowywanie nazw grup.
  • Jesli groupAllowFrom nie jest ustawione, runtime stosuje zastepczym allowFrom do sprawdzen nadawcow grupowych.
  • Sprawdzenia nadawcow dotycza zarowno zwyklych wiadomosci grupowych, jak i polecen sterujacych (np. /new, /reset).

Przyklad:

{
  channels: {
    zalouser: {
      groupPolicy: "allowlist",
      groupAllowFrom: ["1471383327500481391"],
      groups: {
        "123456789": { allow: true },
        "Work Chat": { allow: true },
      },
    },
  },
}

Bramkowanie wzmiankami grup

  • channels.zalouser.groups.<group>.requireMention kontroluje, czy odpowiedzi grupowe wymagaja wzmianki.
  • Kolejnosc rozwiazywania: dokladne ID/nazwa grupy -> znormalizowany slug grupy -> * -> domyslne (true).
  • Dotyczy to zarowno grup z listy dozwolonych, jak i trybu otwartego.
  • Autoryzowane polecenia sterujace (np. /new) moga ominac bramkowanie wzmiankami.
  • Gdy wiadomosc grupowa jest pomijana z powodu wymogu wzmianki, OpenClaw przechowuje ja jako oczekujaca historie grupy i dolacza ja przy nastepnej przetworzonej wiadomosci grupowej.
  • Limit historii grupy domyslnie messages.groupChat.historyLimit (zastepczym 50). Mozesz nadpisac per konto przez channels.zalouser.historyLimit.

Przyklad:

{
  channels: {
    zalouser: {
      groupPolicy: "allowlist",
      groups: {
        "*": { allow: true, requireMention: true },
        "Work Chat": { allow: true, requireMention: false },
      },
    },
  },
}

Wiele kont

Konta mapuja sie na profile zalouser w stanie OpenClaw. Przyklad:

{
  channels: {
    zalouser: {
      enabled: true,
      defaultAccount: "default",
      accounts: {
        work: { enabled: true, profile: "work" },
      },
    },
  },
}

Pisanie, reakcje i potwierdzenia dostarczenia

  • OpenClaw wysyla zdarzenie pisania przed wyslaniem odpowiedzi (best-effort).
  • Akcja reakcji na wiadomosc react jest obslugiwana dla zalouser w akcjach kanalu.
    • Uzyj remove: true aby usunac konkretna reakcje emoji z wiadomosci.
    • Semantyka reakcji: Reakcje
  • Dla wiadomosci przychodzacych zawierajacych metadane zdarzen, OpenClaw wysyla potwierdzenia dostarczenia + odczytania (best-effort).

Rozwiazywanie problemow

Logowanie nie trzyma sie:

  • openclaw channels status --probe
  • Ponowne logowanie: openclaw channels logout --channel zalouser && openclaw channels login --channel zalouser

Nazwa na liscie dozwolonych/grupy nie zostala rozwiazana:

  • Uzyj numerycznych ID w allowFrom/groupAllowFrom/groups lub dokladnych nazw znajomych/grup.

Aktualizacja ze starej konfiguracji opartej na CLI:

  • Usun wszelkie stare zalozenia dotyczace zewnetrznego procesu zca.
  • Kanal teraz dziala calkowicie w OpenClaw bez zewnetrznych plikow binarnych CLI.