Weeek CRM — российская CRM-система для управления воронками продаж, контактами, организациями и сделками. Плагин weeek даёт агентам OpenClaw (например, ivan-sales) нативные инструменты для управления CRM через REST API.
| Параметр | Значение |
|---|---|
| ID плагина | weeek |
| Тип | Source plugin (TypeScript → ESM) |
| Расположение | ~/.openclaw/source-plugins/weeek/ |
| Репозиторий | git.poreklame.tech/poreklameadmin/openclaw-plugin-weeek — HEAD 1283cd1 |
| API Base URL | https://api.weeek.net/public/v1 |
| Аутентификация | Bearer token |
| Rate Limit | sliding window ≤15 запросов/мин + экспоненциальный backoff на HTTP 401/429 (с уважением Retry-After) |
| Количество инструментов | 48 |
| Статус | enabled: true, в проде. toolNames — все 48 зарегистрированы, diagnostics: [] (проверено openclaw plugins inspect weeek --runtime --json, 2026-07-22) |
source-plugins/weeek/
├── openclaw.plugin.json # Манифест плагина + контракты (48 tools)
├── package.json # Зависимости (openclaw/plugin-sdk)
├── tsconfig.json # TypeScript конфигурация
├── src/
│ ├── config.ts # Парсинг конфига, разрешение токенов
│ ├── client.ts # HTTP-клиент Weeek API + rate limiter
│ └── index.ts # Регистрация 48 инструментов в OpenClaw
├── dist/
│ ├── index.js # Скомпилированный плагин
│ ├── client.js
│ └── config.js
└── .claude/
└── settings.local.json # Настройки Claude Code для разработки
Плагин поддерживает два уровня токенов:
apiToken) — для всех агентов по умолчаниюagentTokens) — per-agent токены, позволяют разным агентам использовать разные workspace Weeekinterface PluginSettings {
enabled: boolean; // По умолчанию true
apiBaseUrl: string; // По умолчанию https://api.weeek.net/public/v1
apiToken: string; // Глобальный Bearer токен
agentTokens: Record<string, string>; // Токены по agentId
timeoutMs: number; // Таймаут запроса (по умолчанию 30000ms)
rateLimitMs: number; // Минимальный интервал между запросами (по умолчанию 3000ms)
}
Приоритет токенов: agentTokens[agentId] → apiToken → WEEEK_API_TOKEN (env).
В текущем проде (openclaw.json, 2026-07-22): plugins.entries.weeek = { enabled: true, config: {} } — конфиг пустой, токен подставляется из WEEEK_API_TOKEN (env, значение установлено).
5b014fd) переработан на sliding window ≤15 запросов/мин + экспоненциальный backoff при HTTP 401/429, с уважением заголовка Retry-After. Заменяет более раннюю схему фиксированного интервала (1 запрос / 3 сек), которая не защищала от банов при всплесках.timeoutMs.WeeekError с кодом статуса и телом ответа.| Инструмент | Эндпоинт | Описание |
|---|---|---|
weeek_list_funnels |
GET /crm/funnels |
Список всех воронок |
weeek_get_funnel |
GET /crm/funnels/:id |
Детали одной воронки |
weeek_create_funnel |
POST /crm/funnels |
Создать воронку |
weeek_update_funnel |
PUT /crm/funnels/:id |
Обновить имя воронки |
weeek_delete_funnel |
DELETE /crm/funnels/:id |
Удалить воронку |
weeek_list_funnel_statuses |
GET /crm/funnels/:id/statuses |
Список статусов воронки |
weeek_get_funnel_status |
GET /crm/statuses/:id |
Детали одного статуса |
weeek_create_funnel_status |
POST /crm/funnels/:id/statuses |
Создать статус |
weeek_update_funnel_status |
PUT /crm/statuses/:id |
Обновить статус |
weeek_delete_funnel_status |
DELETE /crm/statuses/:id |
Удалить статус |
| Инструмент | Эндпоинт | Описание |
|---|---|---|
weeek_list_deals |
GET /crm/statuses/:id/deals |
Список сделок в статусе |
weeek_get_deal |
GET /crm/deals/:id |
Детали сделки |
weeek_create_deal |
POST /crm/statuses/:id/deals |
Создать сделку |
weeek_update_deal |
PATCH /crm/deals/:id |
Обновить поля сделки |
weeek_delete_deal |
DELETE /crm/deals/:id |
Удалить сделку |
weeek_move_deal |
POST /crm/deals/:id/move |
Переместить сделку (порядок/статус) |
weeek_change_deal_funnel |
PUT /crm/deals/:id/funnel |
Перенести в другую воронку |
weeek_change_deal_status |
PUT /crm/deals/:id/status |
Сменить статус сделки |
weeek_attach_deal_tag |
POST /crm/deals/:id/tags |
Добавить тег к сделке |
weeek_detach_deal_tag |
DELETE /crm/deals/:id/tags |
Убрать тег |
weeek_create_deal_subtask |
POST /crm/deals/:id/tasks |
Создать задачу у сделки |
weeek_detach_deal_subtask |
DELETE /crm/deals/:id/tasks/:taskId |
Удалить задачу |
Подтверждено живыми тестами:
- Тело
create_deal/update_dealпринимаетassignees,organizations,contactsкак массивы id-строк существующих записей — это линковка по ID, не создание записи (подтверждено 2026-07-21,c856416). ПоляexecutorId/organizationId/contactId(ед. число) из PHP-клиентаweeekcom/weeek-client-phpреальному API не соответствуют и не используются.- Тело
attach_deal_tag/detach_deal_tag:{tag: <id>}.- Комментарии к сделкам — эндпоинта в публичном API нет, не реализовано (подтверждено 2026-07-22,
1283cd1).
| Инструмент | Эндпоинт | Описание |
|---|---|---|
weeek_list_organizations |
GET /crm/organizations |
Список организаций |
weeek_get_organization |
GET /crm/organizations/:id |
Детали организации |
weeek_create_organization |
POST /crm/organizations |
Создать организацию |
weeek_update_organization |
PUT /crm/organizations/:id |
Обновить организацию |
weeek_delete_organization |
DELETE /crm/organizations/:id |
Удалить организацию |
weeek_create_org_address |
POST /crm/organizations/:id/addresses |
Добавить адрес |
weeek_delete_org_address |
DELETE /crm/organizations/:id/addresses/:addrId |
Удалить адрес |
weeek_create_org_email |
POST /crm/organizations/:id/emails |
Добавить email |
weeek_delete_org_email |
DELETE /crm/organizations/:id/emails/:emailId |
Удалить email |
weeek_create_org_phone |
POST /crm/organizations/:id/phones |
Добавить телефон |
weeek_delete_org_phone |
DELETE /crm/organizations/:id/phones/:phoneId |
Удалить телефон |
weeek_detach_org_contact |
POST /crm/organizations/:id/detach-contact |
Отвязать контакт |
weeek_attach_org_tag |
POST /crm/organizations/:id/attach-tag |
Добавить тег |
weeek_detach_org_tag |
POST /crm/organizations/:id/detach-tag |
Убрать тег |
weeek_attach_org_contactудалён из плагина (коммитeddb5de, 2026-07-21): такого эндпоинта/тула больше не существует в реестре. Привязка контакта к организации выполняется через тело контакта/организации, отдельного attach-инструмента нет.
| Инструмент | Эндпоинт | Описание |
|---|---|---|
weeek_list_contacts |
GET /crm/contacts |
Список контактов |
weeek_get_contact |
GET /crm/contacts/:id |
Детали контакта |
weeek_create_contact |
POST /crm/contacts |
Создать контакт |
weeek_update_contact |
PUT /crm/contacts/:id |
Обновить контакт |
weeek_delete_contact |
DELETE /crm/contacts/:id |
Удалить контакт |
weeek_create_contact_email |
POST /crm/contacts/:id/emails |
Добавить email контакту |
weeek_delete_contact_email |
DELETE /crm/contacts/:id/emails/:emailId |
Удалить email контакта |
weeek_create_contact_phone |
POST /crm/contacts/:id/phones |
Добавить телефон контакту |
weeek_delete_contact_phone |
DELETE /crm/contacts/:id/phones/:phoneId |
Удалить телефон контакта |
weeek_attach_contact_tag |
POST /crm/contacts/:id/attach-tag |
Добавить тег контакту |
weeek_detach_contact_tag |
POST /crm/contacts/:id/detach-tag |
Убрать тег контакта |
Подтверждено живым тестом (2026-07-22,
1283cd1):phones/emailsв телеcreate_contact— плоские массивы строк (не объекты). Ответ API возвращает каждый элемент в форме{id, phone}/{id, email}.
| Инструмент | Эндпоинт | Описание |
|---|---|---|
weeek_list_currencies |
GET /crm/currencies |
Список валют workspace |
{
"plugins": {
"entries": {
"weeek": {
"enabled": true,
"config": {}
}
},
"load": {
"paths": [
"/home/openclaw/.openclaw/source-plugins/weeek"
]
}
}
}
Плагин включён глобально для всех агентов. Токен берётся из WEEEK_API_TOKEN (env) — agentTokens/apiToken в конфиге сейчас пустые. Видимость конкретных weeek_* инструментов для агента управляется не этим блоком, а agents.list[agentId].tools.allow/tools.deny (см. ниже, ivan-sales).
Токен Weeek доступен через переменную WEEEK_API_TOKEN в ~/.openclaw/.env.
Где взять значение токена:
Weeek API~/.openclaw/shared/company/tokens/weeekЗначение токена не публикуется в документации. Подставляется индивидуально.
5b014fd)Было: gateway plugins inspect weeek показывал toolNames: [], хотя плагин регистрировал тулы. Исправлено коммитом 5b014fd («Fix tool registration and deal endpoints; harden rate limiting»). По состоянию на 2026-07-22: toolNames содержит все 48 имён, diagnostics: [].
5b014fd)Weeek не документирует точные лимиты и жёстко банит IP при превышении. Прежняя защита (интервал 1 запрос/3с) заменена на sliding window ≤15 запросов/мин + экспоненциальный backoff на 401/429 с уважением Retry-After.
c856416)Официальная документация Weeek (developers.weeek.net) — JS-рендеренный SPA, не парсится напрямую. PHP-клиент (weeekcom/weeek-client-php) использует поля executorId/organizationId/contactId (ед. число) — они реальному API не соответствуют. Подтверждено живыми запросами: реальные поля — assignees[]/organizations[]/contacts[], массивы id-строк. weeek_create_deal/weeek_update_deal используют подтверждённую форму.
Статус: осознанное решение. Плагин покрывает только CRM-часть Weeek API (воронки, сделки, организации, контакты, валюты). Task Manager (проекты, доски, задачи) — не реализован. Каталог эндпоинтов лежит в research/weeek-api-full.md.
1283cd1)Эндпоинта для комментариев к сделке в публичном API Weeek нет — подтверждено и закрыто как «не будет реализовано» на текущей версии публичного API.
/public/v1/docs — не существует (проверено 2026-07-22)https://api.weeek.net/public/v1/docs возвращает 404. Ссылка убрана из раздела «Ссылки» ниже.
sandbox.mode:"all" у ivan-sales (установлен вручную 20.07 без документированной причины в config-audit.jsonl) при незаданном tools.sandbox.tools молча обрезал видимую модели схему до 4 базовых тулов независимо от tools.allow. Решение: sandbox снят (config unset agents.list[14].sandbox), т.к. deny-политика ортогональна sandbox и продолжает блокировать exec/edit/browser независимо от него. Урок: sandboxed-агентам нужен явный tools.sandbox.tools.allow, иначе плагинные тулы не пробрасываются.
Плагин weeek включён глобально (см. выше). Доступ к конкретным инструментам для Ивана задаётся через agents.list["ivan-sales"].tools.allow/tools.deny в openclaw.json, а не через конфиг плагина.
Решение Романа (2026-07-22, чек-лист ivan-config-checklist.md): Иван = read (list/get) по contacts/organizations/deals/funnels/statuses + полная работа со сделками (create/update/move/tag/subtask), без create/update/delete по contacts/organizations, их email/phone/tag. Целевой список: 18 weeek_* в allow, 30 в deny — покрывают все 48 инструментов реестра без пересечений.
Применено и верифицировано 2026-07-23:
tools.allow=36 (18 weeek),tools.deny=54 (30 weeek) в живом конфиге; схема сессии подтверждена из trajectory-лога (context.compiled: 36 тулов, 18 weeek); контрольный живой вызовweeek_list_funnelsвыполнен агентом успешно.
agentTokens) → разные workspace Weeek (сейчас не используется, общий WEEEK_API_TOKEN)cd ~/.openclaw/source-plugins/weeek
npm install
npx tsc
src/client.ts (API-запрос)src/index.ts через reg({...})contracts.tools в openclaw.plugin.jsonnpx tsc — собрать dist| Дата | Событие |
|---|---|
| 2026-07-17 | Начало разработки, исследование API (151 эндпоинт) |
| 2026-07-18 | Первая версия плагина: config.ts, client.ts, index.ts |
| 2026-07-18 | Получен и подставлен API-токен Weeek |
| 2026-07-19 | Обнаружена IP-блокировка, добавлен rate limiter (3s) |
| 2026-07-19 | Плагин добавлен в plugins.load.paths, гейтвей рестартован |
| 2026-07-19 | Обнаружена проблема: toolNames: [] — инструменты регистрируются, но не видны |
| 2026-07-20 | Плагин enabled: false — временно отключён до решения toolNames |
| 2026-07-21 | 5b014fd — исправлена регистрация тулов, rate limiter → sliding window ≤15/мин + backoff |
| 2026-07-21 | eddb5de — аудит Contacts/Organizations, удалён мёртвый weeek_attach_org_contact |
| 2026-07-21 | c856416 — подтверждена и включена линковка assignees/organizations/contacts по ID в сделках |
| 2026-07-22 | 1283cd1 — подтверждена форма phones/emails у create_contact, закрыт вопрос о комментариях к сделкам |
| 2026-07-22 | Плагин enabled: true, в проде: 48/48 tools зарегистрированы, diagnostics: [] |
| 2026-07-22 | Чек-лист доступа ivan-sales финализирован Романом (18 allow / 30 deny); применение к живому конфигу агента — ожидает патча |
| 2026-07-22 | Страница синхронизирована с фактическим состоянием кода (HEAD 1283cd1) и живым конфигом агентов |
| 2026-07-23 | Применение чек-листа ivan-sales к живому конфигу: tools.allow=36 (18 weeek), tools.deny=54 (30 weeek) |
| 2026-07-23 | Обнаружен и снят sandbox.mode:"all" у ivan-sales (обрезал схему до 4 тулов); deny-политика ортогональна sandbox |
| 2026-07-23 | Схема сессии верифицирована из trajectory-рантайма (36/18, дважды подряд); weeek_list_funnels — успех, 3 воронки; MEMORY.md Ивана обновлена |
1283cd1research/weeek-api-full.md (локально, ~/.openclaw/research/)~/.openclaw/shared/company/tokens/weeeksource-plugins/weeek/src/