dengineproblem

Онбординг нового клиента

- Не сохраняй невалидированные токены

dengineproblem 4 1 Updated 3mo ago
GitHub

Install

npx skillscat add dengineproblem/agents-monorepo/openclaw-standalone-skills-fb-onboarding

Install via the SkillsCat registry.

SKILL.md

Онбординг нового клиента

Первый скилл для запуска после подключения нового клиента.
Проведи пользователя через настройку — спрашивай шаг за шагом, не всё сразу.


Когда запускать

При первом обращении клиента или по команде "настроить рекламу", "онбординг", "начать".
Проверь заполнен ли config — если пустой, запусти этот скилл автоматически:

SELECT fb_access_token, fb_ad_account_id FROM config WHERE id = 1;

Если fb_access_token IS NULL — клиент не настроен, начни онбординг.


Шаг 1: Приветствие

👋 *Добро пожаловать в OpenClaw!*

Я — AI-агент для управления Facebook рекламой.
Давай настроим всё, чтобы я мог работать с твоим рекламным кабинетом.

Мне понадобится:
1. Facebook Access Token (долгоживущий)
2. ID рекламного аккаунта (act_...)
3. ID страницы Facebook
4. Информация о направлениях рекламы

Начнём? Отправь мне свой *Facebook Access Token*.

Шаг 2: Facebook Access Token

Пользователь отправляет токен. Проверь что он рабочий:

curl -s "https://graph.facebook.com/v23.0/me?access_token={TOKEN}" | head -c 500

Если ответ содержит "name": — токен рабочий. Сохрани:

UPDATE config SET fb_access_token = '{TOKEN}', updated_at = NOW() WHERE id = 1;

Ответь:

✅ Токен работает! Аккаунт: {name}

Теперь отправь *ID рекламного аккаунта* (формат: act_XXXXXXXXX).
Его можно найти в Facebook Ads Manager → Настройки → ID аккаунта.

Если ошибка — попроси прислать другой токен, объясни как получить.


Шаг 3: Рекламный аккаунт (Ad Account ID)

Пользователь присылает act_.... Проверь доступ:

curl -s "https://graph.facebook.com/v23.0/{AD_ACCOUNT_ID}?fields=name,currency,timezone_name,account_status&access_token={TOKEN}"

Если доступен — сохрани:

UPDATE config SET fb_ad_account_id = '{AD_ACCOUNT_ID}', updated_at = NOW() WHERE id = 1;

Из ответа API определи:

  • currency → сохрани в config если отличается от KZT
  • timezone_name → сохрани если отличается от Asia/Almaty
UPDATE config SET currency = '{CURRENCY}', timezone = '{TIMEZONE}', updated_at = NOW() WHERE id = 1;

Ответь:

✅ Рекламный аккаунт подключён!
📋 Аккаунт: {name}
💱 Валюта: {currency}
🕐 Часовой пояс: {timezone}

Теперь нужен *ID Facebook страницы*. Отправь его (число) или ссылку на страницу.

Шаг 4: Facebook Page ID

Пользователь присылает ID страницы или ссылку. Если ссылка — извлеки ID:

curl -s "https://graph.facebook.com/v23.0/{PAGE_ID}?fields=name,id&access_token={TOKEN}"

Сохрани:

UPDATE config SET fb_page_id = '{PAGE_ID}', updated_at = NOW() WHERE id = 1;

Также получи Page Access Token для Lead Gen:

curl -s "https://graph.facebook.com/v23.0/{PAGE_ID}?fields=access_token&access_token={TOKEN}"
UPDATE config SET fb_page_access_token = '{PAGE_ACCESS_TOKEN}', updated_at = NOW() WHERE id = 1;

Ответь:

✅ Страница подключена: {page_name}

Теперь настроим направления рекламы. Расскажи:
1. Какие виды рекламы ты запускаешь?
   • WhatsApp (лиды через WhatsApp)
   • Lead Forms (формы лидов Facebook)
   • Instagram Traffic (трафик на Instagram)
   • Site Leads (лиды на сайт через пиксель)
   • App Installs (установки приложения)

2. По каким городам/регионам?
3. Какой допустимый CPL (стоимость лида) для каждого направления?
4. Дневной бюджет на каждое направление?

Шаг 5: Направления (Directions)

На основе ответа пользователя создай направления. Для каждого:

INSERT INTO directions (name, objective, daily_budget_cents, target_cpl_cents, is_active)
VALUES (
  '{name}',              -- например "Алматы WhatsApp"
  '{objective}',         -- whatsapp | lead_forms | instagram_traffic | site_leads | app_installs
  {daily_budget_cents},  -- бюджет в центах ($10 = 1000)
  {target_cpl_cents},    -- целевой CPL в центах ($3 = 300)
  true
)
ON CONFLICT DO NOTHING;

Типичные направления:

  • "Алматы WhatsApp" → objective: whatsapp, target_cpl: $3-5
  • "Астана Lead Forms" → objective: lead_forms, target_cpl: $2-4
  • "Весь КЗ Instagram" → objective: instagram_traffic, target_cpl: $1-3

Ответь после создания:

✅ Направления созданы!

{Таблица направлений: name | objective | budget | target CPL}

Если нужно добавить/изменить направления — скажи.

Шаг 6: Telegram (опционально)

📱 Хочешь получать отчёты в Telegram?
Если да — отправь мне:
1. Bot Token (создай бота через @BotFather)
2. Chat ID (свой или группы)

Если нет — просто скажи "пропустить".

Если пользователь присылает:

UPDATE config SET
  telegram_bot_token = '{BOT_TOKEN}',
  telegram_chat_id = '{CHAT_ID}',
  updated_at = NOW()
WHERE id = 1;

Проверь отправкой тестового сообщения:

curl -s "https://api.telegram.org/bot{BOT_TOKEN}/sendMessage" \
  -d chat_id="{CHAT_ID}" \
  -d text="✅ OpenClaw подключён! Отчёты будут приходить сюда." \
  -d parse_mode=Markdown

Шаг 7: Target CPL по умолчанию

🎯 Какой CPL считать целевым *по умолчанию* (для новых направлений)?
Сейчас: $3.00

Отправь число в долларах (например 2.5) или скажи "ок" чтобы оставить $3.
UPDATE config SET default_target_cpl_cents = {CENTS}, updated_at = NOW() WHERE id = 1;

Шаг 8: Итоговая проверка

Проверь всё и покажи сводку:

SELECT
  fb_access_token IS NOT NULL as has_token,
  fb_ad_account_id,
  fb_page_id,
  telegram_bot_token IS NOT NULL as has_telegram,
  timezone,
  currency,
  default_target_cpl_cents
FROM config WHERE id = 1;
SELECT name, objective, daily_budget_cents, target_cpl_cents, is_active
FROM directions ORDER BY name;

Ответь:

🎉 *Настройка завершена!*

*Facebook:*
✅ Токен: подключён
✅ Аккаунт: {ad_account_id}
✅ Страница: {page_id}

*Направления:*
{Список направлений с бюджетами}

*Telegram:* {подключён / не настроен}
*Часовой пояс:* {timezone}
*Валюта:* {currency}
*Целевой CPL:* ${target_cpl}

*Что дальше?*
• "Покажи дашборд" — текущие метрики
• "Создай кампанию" — запуск новой кампании
• "Запусти скоринг" — оценка текущих адсетов
• "Утренний отчёт" — сводка за вчера

Важно

  • Не запрашивай все данные сразу — спрашивай по одному шагу
  • Если пользователь не знает где взять токен/ID — объясни пошагово
  • Валидируй каждое значение через API перед сохранением
  • Если что-то не работает — предложи альтернативу или помощь
  • Не сохраняй невалидированные токены