Skip to main content
Статус: експериментальна функція. Ця інтеграція автоматизує особистий обліковий запис Zalo за допомогою вбудованої бібліотеки zca-js, що працює в межах процесу, без зовнішнього виконуваного файла CLI.
Це неофіційна інтеграція, і її використання може призвести до призупинення або блокування облікового запису. Використовуйте на власний ризик.

Встановлення

Zalo Personal — це офіційний зовнішній плагін, який не входить до складу ядра. Установіть його перед використанням:
  • Зафіксувати версію: openclaw plugins install @openclaw/zalouser@<version>
  • З локальної копії вихідного коду: openclaw plugins install ./path/to/local/zalouser-plugin
  • Докладніше: Плагіни

Швидке налаштування

  1. Установіть плагін (див. вище).
  2. Увійдіть (за QR-кодом на машині з Gateway):
    • openclaw channels login --channel zalouser
    • Відскануйте QR-код у мобільному застосунку Zalo.
  3. Увімкніть канал:
  1. Перезапустіть Gateway (або завершіть налаштування).
  2. Доступ до приватних повідомлень типово потребує сполучення; під час першого контакту схваліть код сполучення.

Що це таке

  • Повністю працює в межах процесу через бібліотеку zca-js (без зовнішнього виконуваного файла zca/openzca).
  • Використовує вбудовані обробники подій (message, error) для отримання вхідних повідомлень.
  • Надсилає відповіді безпосередньо через JS API (текст, медіафайли та посилання).
  • Призначена для сценаріїв використання «особистого облікового запису», коли Zalo Bot API недоступний.

Іменування

Ідентифікатор каналу — zalouser, щоб явно вказати, що ця інтеграція автоматизує особистий обліковий запис користувача Zalo (неофіційно). Ідентифікатор zalo зарезервовано для можливої майбутньої офіційної інтеграції з Zalo API.

Пошук ідентифікаторів (каталог)

Обмеження

  • Вихідний текст розбивається на частини по 2000 символів (обмеження клієнта Zalo).
  • Потокове передавання не підтримується.

Керування доступом (приватні повідомлення)

channels.zalouser.dmPolicy: pairing | allowlist | open | disabled (типове значення: pairing). У channels.zalouser.allowFrom слід використовувати стабільні ідентифікатори користувачів Zalo. Також можна посилатися на статичні групи доступу відправників (accessGroup:<name>). Під час інтерактивного налаштування введені імена можна зіставити з ідентифікаторами за допомогою вбудованого в процес пошуку контактів плагіна. Якщо в конфігурації залишається необроблене ім’я, під час запуску воно зіставляється лише тоді, коли ввімкнено channels.zalouser.dangerouslyAllowNameMatching: true. Без цієї явної згоди перевірки відправників під час виконання здійснюються лише за ідентифікаторами, а необроблені імена не враховуються під час авторизації. Схвалення:
  • openclaw pairing list zalouser
  • openclaw pairing approve zalouser <code>

Доступ до груп (необов’язково)

  • Типове значення: channels.zalouser.groupPolicy = "allowlist" (групи потребують явного запису в списку дозволених).
  • Відкрити всі групи: channels.zalouser.groupPolicy = "open".
  • Заблокувати всі групи: channels.zalouser.groupPolicy = "disabled".
  • Коли встановлено groupPolicy = "allowlist":
    • Ключами channels.zalouser.groups мають бути стабільні ідентифікатори груп; імена зіставляються з ідентифікаторами під час запуску лише тоді, коли ввімкнено channels.zalouser.dangerouslyAllowNameMatching: true.
    • channels.zalouser.groupAllowFrom визначає, які відправники в дозволених групах можуть активувати бота; на статичні групи доступу відправників можна посилатися за допомогою accessGroup:<name>.
  • Майстер налаштування може запропонувати вказати списки дозволених груп.
  • Зіставлення зі списком дозволених груп типово здійснюється лише за ідентифікаторами. Нерозпізнані імена не враховуються під час авторизації, якщо не ввімкнено channels.zalouser.dangerouslyAllowNameMatching: true.
  • channels.zalouser.dangerouslyAllowNameMatching: true — це аварійний режим сумісності, який повторно вмикає зіставлення змінюваних імен під час запуску та зіставлення назв груп під час виконання.
  • Для звичайних групових повідомлень groupAllowFrom не використовує allowFrom як резервний варіант: якщо залишити його порожнім для групи зі списку дозволених, будь-який відправник у цій групі зможе активувати бота. Винятком є авторизовані керівні команди (наприклад, /new); коли groupAllowFrom порожній, перевірки відправника команд використовують allowFrom як резервний варіант.
Приклад:
channels.zalouser.groups.<id>.allow — застаріла назва поля; поточна конфігурація використовує enabled. Команда openclaw doctor --fix автоматично переносить allow до enabled.

Перевірка згадок у групах

  • channels.zalouser.groups.<group>.requireMention визначає, чи потрібна згадка для відповіді в групі.
  • Порядок визначення: ідентифікатор групи -> псевдонім group:<id> -> назва/коротке ім’я групи (варіанти на основі імен застосовуються лише тоді, коли встановлено dangerouslyAllowNameMatching: true) -> * -> типове значення (true).
  • Застосовується як до груп зі списку дозволених, так і до режиму відкритих груп.
  • Цитування повідомлення бота вважається неявною згадкою для активації в групі.
  • Авторизовані керівні команди (наприклад, /new) можуть обходити перевірку згадок.
  • Якщо групове повідомлення пропущено через вимогу згадки, OpenClaw зберігає його як незавершену історію групи та додає до наступного обробленого групового повідомлення.
  • Обмеження історії групи: channels.zalouser.historyLimit, потім messages.groupChat.historyLimit, а далі резервне значення 50.
Приклад:

Кілька облікових записів

Облікові записи зіставляються з профілями zalouser у стані OpenClaw. Приклад:

Змінні середовища

Профіль також можна вибрати за допомогою змінних середовища: Назви профілів визначають збережені облікові дані для входу в Zalo у стані OpenClaw. Порядок визначення:
  1. Явно заданий profile у конфігурації.
  2. ZALOUSER_PROFILE.
  3. ZCA_PROFILE.
  4. Ідентифікатор облікового запису для облікових записів, відмінних від типового, або default для типового облікового запису.
Для налаштувань із кількома обліковими записами рекомендовано задавати profile для кожного облікового запису в конфігурації, щоб одна змінна середовища не змушувала кілька облікових записів використовувати спільний сеанс входу.

Індикатор набору тексту, реакції та підтвердження доставки

  • OpenClaw надсилає подію набору тексту перед відправленням відповіді (за можливості).
  • Дія реакції на повідомлення react підтримується для zalouser у діях каналу.
    • Використовуйте remove: true, щоб видалити певну реакцію-емодзі з повідомлення.
    • Семантика реакцій: Реакції
  • Для вхідних повідомлень, що містять метадані події, OpenClaw надсилає підтвердження доставки та перегляду (за можливості).

Усунення несправностей

Сеанс входу не зберігається:
  • openclaw channels status --probe
  • Повторний вхід: openclaw channels logout --channel zalouser && openclaw channels login --channel zalouser
Не вдалося зіставити ім’я зі списку дозволених або назву групи:
  • Використовуйте числові ідентифікатори в allowFrom/groupAllowFrom і стабільні ідентифікатори груп у groups. Якщо вам навмисно потрібно використовувати точні імена друзів або груп, увімкніть channels.zalouser.dangerouslyAllowNameMatching: true.
Оновлення зі старого зовнішнього налаштування на основі zca/CLI:
  • Усуньте всі припущення щодо зовнішнього процесу zca; тепер канал повністю працює в межах процесу через zca-js, без зовнішнього виконуваного файла CLI.

Пов’язані матеріали