zca-js, що працює в межах процесу, без зовнішнього виконуваного файла CLI.
Встановлення
Zalo Personal — це офіційний зовнішній плагін, який не входить до складу ядра. Установіть його перед використанням:- Зафіксувати версію:
openclaw plugins install @openclaw/zalouser@<version> - З локальної копії вихідного коду:
openclaw plugins install ./path/to/local/zalouser-plugin - Докладніше: Плагіни
Швидке налаштування
- Установіть плагін (див. вище).
- Увійдіть (за QR-кодом на машині з Gateway):
openclaw channels login --channel zalouser- Відскануйте QR-код у мобільному застосунку Zalo.
- Увімкніть канал:
- Перезапустіть Gateway (або завершіть налаштування).
- Доступ до приватних повідомлень типово потребує сполучення; під час першого контакту схваліть код сполучення.
Що це таке
- Повністю працює в межах процесу через бібліотеку
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 zalouseropenclaw 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. Порядок визначення:
- Явно заданий
profileу конфігурації. ZALOUSER_PROFILE.ZCA_PROFILE.- Ідентифікатор облікового запису для облікових записів, відмінних від типового, або
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.
Пов’язані матеріали
- Огляд каналів — усі підтримувані канали
- Сполучення — автентифікація приватних повідомлень і процес сполучення
- Групи — поведінка групових чатів і перевірка згадок
- Маршрутизація каналів — маршрутизація сеансів для повідомлень
- Безпека — модель доступу та посилення захисту