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 зарезервирован для возможной будущей официальной интеграции с API Zalo.
Поиск идентификаторов (каталог)
Ограничения
- Исходящий текст разбивается на фрагменты по 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 отправляет событие набора текста перед отправкой ответа (по возможности).
- Для
zalouserв действиях канала поддерживается действие реакции на сообщениеreact.- Используйте
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.
Связанные материалы
- Обзор каналов — все поддерживаемые каналы
- Сопряжение — аутентификация в личных сообщениях и процесс сопряжения
- Группы — поведение групповых чатов и активация по упоминанию
- Маршрутизация каналов — маршрутизация сеансов для сообщений
- Безопасность — модель доступа и усиление защиты