dashboard
npx skills add https://github.com/dengineproblem/agents-monorepo --skill dashboard
Agent 安装分布
Skill 文档
Dashboard
Ð¢Ñ â ÑкÑпеÑÑ Ð¿Ð¾ ÑоÑмиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¼ÑлÑÑиаккаÑнÑнÑÑ Ð´Ð°ÑбоÑдов. ÐоказÑваеÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð¿Ð¾ ÑекламнÑм аккаÑнÑам Ñ Ð¸ÐµÑаÑÑ Ð¸ÐµÐ¹ Account â Campaign â AdSet â Ad.
Твои задаÑи
- Сводка по аккаÑнÑам â обÑÐ°Ñ ÑаблиÑа вÑÐµÑ Ð°ÐºÑивнÑÑ Ð°ÐºÐºÐ°ÑнÑов
- ÐеÑализаÑÐ¸Ñ Ð¿Ð¾ кампаниÑм â ÑаÑкÑÑÑие до ÑÑÐ¾Ð²Ð½Ñ ÐºÐ°Ð¼Ð¿Ð°Ð½Ð¸Ð¹
- ÐеÑализаÑÐ¸Ñ Ð¿Ð¾ AdSets â ÑаÑкÑÑÑие до ÑÑÐ¾Ð²Ð½Ñ Ð³ÑÑпп обÑÑвлений
- ÐеÑализаÑÐ¸Ñ Ð¿Ð¾ Ads â полнÑй даÑбоÑд до ÑÑÐ¾Ð²Ð½Ñ Ð¾Ð±ÑÑвлений
- WhatsApp меÑÑики â CPQL, Quality Rate Ð´Ð»Ñ WhatsApp кампаний
- Custom пеÑÐ¸Ð¾Ð´Ñ â лÑбой диапазон даÑ
Workflow
Шаг 1: ÐаÑÑинг паÑамеÑÑов запÑоÑа
Ðз запÑоÑа полÑзоваÑÐµÐ»Ñ Ð¾Ð¿Ñедели:
| ÐаÑамеÑÑ | ÐаÑианÑÑ | ÐеÑÐ¾Ð»Ñ |
|---|---|---|
| ÐеÑиод | today, yesterday, 7d, 30d, custom | yesterday |
| ÐккаÑнÑÑ | вÑе / конкÑеÑнÑй по имени | вÑе |
| УÑÐ¾Ð²ÐµÐ½Ñ | account, campaign, adset, ad | campaign |
ÐÐÐÐÐ: ÐÑли пеÑиод не Ñказан Ñвно â иÑполÑзÑй yesterday (вÑеÑа).
ÐлÑÑевÑе Ñлова Ð´Ð»Ñ Ð¿ÐµÑиода:
- “Ñегоднє, “today” â
today - “вÑеÑа”, “yesterday” â
yesterday - “7 дней”, “неделє, “7d” â
last_7d - “30 дней”, “меÑÑÑ”, “30d” â
last_30d - “YYYY-MM-DD â YYYY-MM-DD” â custom
{"since": "...", "until": "..."}
ÐлÑÑевÑе Ñлова Ð´Ð»Ñ ÑÑовнÑ:
- “ÑолÑко аккаÑнÑÑ”, “account” â ÑÑовенÑ
account - “Ñ Ð°Ð´ÑеÑами”, “adset” â ÑÑовенÑ
adset - “полнÑй”, “деÑалÑнÑй”, “вÑе ÑÑовни”, “ads” â ÑÑовенÑ
ad - без ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ â ÑÑовенÑ
campaign(по ÑмолÑаниÑ)
ÐлÑÑевÑе Ñлова Ð´Ð»Ñ Ð°ÐºÐºÐ°ÑнÑа:
- ÐÐ¼Ñ Ð°ÐºÐºÐ°ÑнÑа (напÑÐ¸Ð¼ÐµÑ “Profimed”, “ÐÐ°Ñ Ð´ÐµÐ½Ñ”) â ÑолÑко ÑÑÐ¾Ñ Ð°ÐºÐºÐ°ÑнÑ
- без ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ â вÑе акÑивнÑе аккаÑнÑÑ
Шаг 2: ÐагÑÑзка конÑигÑÑаÑии
1. ÐÑоÑиÑай .claude/ads-agent/config/ad_accounts.md
2. Ðзвлеки ÑпиÑок аккаÑнÑов Ñо ÑÑаÑÑÑом "акÑивен"
3. ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ аккаÑнÑа запомни:
- name (Ðазвание)
- account_id (Account ID)
- page_id (Page ID)
- brief_path (пÑÑÑ Ðº бÑиÑÑ)
4. ÐÑоÑиÑай бÑÐ¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ аккаÑнÑа (briefs/{name}.md)
5. Ðзвлеки target CPL Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ кампании из ÑаблиÑÑ "ÐкÑивнÑе кампании/напÑавлениÑ":
| ÐапÑавление | Campaign ID | Ð¦ÐµÐ»Ñ CPL | ...
ÐаÑÑинг ÑекÑий:
## ÐккаÑÐ½Ñ N: {name}
- **Account ID**: act_XXX â извлеÑÑ
- **Page ID**: XXX â извлеÑÑ
- **Ðазвание**: XXX
- **СÑаÑÑÑ**: акÑивен â ÑилÑÑÑоваÑÑ ÑолÑко "акÑивен"
Шаг 3: ÐолÑÑение даннÑÑ ÑеÑез MCP
ÐÐ»Ñ ÑÑÐ¾Ð²Ð½Ñ Account:
# ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ аккаÑнÑа паÑаллелÑно
for account in accounts:
insights = get_insights(
object_id=account.account_id,
time_range=period,
level="account"
)
ÐÐ»Ñ ÑÑÐ¾Ð²Ð½Ñ Campaign (еÑли нÑжно):
# 1. ÐолÑÑиÑÑ ÑпиÑок кампаний
campaigns = get_campaigns(
account_id=account_id,
status_filter="ACTIVE",
limit=50
)
# 2. ÐолÑÑиÑÑ insights на ÑÑовне кампаний
campaign_insights = get_insights(
object_id=account_id,
time_range=period,
level="campaign"
)
ÐÐ»Ñ ÑÑÐ¾Ð²Ð½Ñ AdSet (еÑли нÑжно):
# 1. ÐолÑÑиÑÑ ÑпиÑок adsets
adsets = get_adsets(account_id=account_id, campaign_id=campaign_id)
# 2. ÐолÑÑиÑÑ insights на ÑÑовне adset
adset_insights = get_insights(
object_id=account_id,
time_range=period,
level="adset"
)
# 3. ÐолÑÑиÑÑ daily_budget Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ adset
for adset in adsets:
details = get_adset_details(adset_id=adset.id)
daily_budget = details.daily_budget / 100 # ÑенÑÑ â доллаÑÑ
ÐÐ»Ñ ÑÑÐ¾Ð²Ð½Ñ Ad (еÑли нÑжно):
# 1. ÐолÑÑиÑÑ ÑпиÑок ads
ads = get_ads(account_id=account_id, adset_id=adset_id)
# 2. ÐолÑÑиÑÑ insights на ÑÑовне ad
ad_insights = get_insights(
object_id=account_id,
time_range=period,
level="ad"
)
Шаг 4: РаÑÑÑÑ Ð¼ÐµÑÑик
ÐазовÑе меÑÑики (из API)
| ÐеÑÑика | Ðоле API | ÐпиÑание |
|---|---|---|
| spend | spend | ÐаÑÑаÑÑ Ð² $ |
| impressions | impressions | ÐÐ¾ÐºÐ°Ð·Ñ |
| clicks | clicks | Ðлики |
ÐодÑÑÑÑ Ð»Ð¸Ð´Ð¾Ð² из actions
def count_leads(actions):
leads = 0
messagingLeads = 0
qualityLeads = 0
for action in actions:
action_type = action.get("action_type", "")
value = int(action.get("value", 0))
if action_type == "onsite_conversion.total_messaging_connection":
messagingLeads = value
leads += value
elif action_type == "onsite_conversion.messaging_user_depth_2_message_send":
qualityLeads = value
elif action_type in ["offsite_conversion.fb_pixel_lead", "onsite_conversion.lead_grouped"]:
leads += value
return leads, messagingLeads, qualityLeads
ÐÑоизводнÑе меÑÑики
ÐазовÑе (показÑваÑÑ Ð²Ñегда):
cpl = spend / leads if leads > 0 else None
ctr = (clicks / impressions) * 100 if impressions > 0 else 0
cpm = (spend / impressions) * 1000 if impressions > 0 else 0
# Ðлан-ÑÐ°ÐºÑ (ÐÐЯÐÐТÐÐЬÐÐ Ð´Ð»Ñ ÐºÐ°Ð¼Ð¿Ð°Ð½Ð¸Ð¹)
target_cpl = brief.campaigns[campaign_id].target_cpl # из бÑиÑа
cpl_diff = ((cpl - target_cpl) / target_cpl) * 100 if target_cpl and cpl else None # % оÑклонениÑ
WhatsApp меÑÑики (показÑваÑÑ ÐµÑли messagingLeads > 0):
cpql = spend / qualityLeads if qualityLeads > 0 else None
qualityRate = (qualityLeads / messagingLeads) * 100 if messagingLeads > 0 else 0
Шаг 5: ÐгÑегаÑÐ¸Ñ Ð²Ð²ÐµÑÑ Ð¿Ð¾ иеÑаÑÑ Ð¸Ð¸
# Ad â AdSet
adset.spend = sum(ad.spend for ad in adset.ads)
adset.leads = sum(ad.leads for ad in adset.ads)
# ... оÑÑалÑнÑе меÑÑики
# AdSet â Campaign
campaign.spend = sum(adset.spend for adset in campaign.adsets)
campaign.leads = sum(adset.leads for adset in campaign.adsets)
campaign.daily_budget = sum(adset.daily_budget for adset in campaign.adsets if adset.status == "ACTIVE")
# ... оÑÑалÑнÑе меÑÑики
# Campaign â Account
account.spend = sum(campaign.spend for campaign in account.campaigns)
account.leads = sum(campaign.leads for campaign in account.campaigns)
# ... оÑÑалÑнÑе меÑÑики
Шаг 6: ФоÑмиÑование вÑвода
ÐÑведи ÑаблиÑÑ ÑоглаÑно запÑоÑÐµÐ½Ð½Ð¾Ð¼Ñ ÑÑÐ¾Ð²Ð½Ñ Ð´ÐµÑализаÑии.
ФоÑмаÑÑ ÑаблиÑ
Ðаголовок даÑбоÑда
# Dashboard
ð
ÐеÑиод: {since} â {until}
Ðли Ð´Ð»Ñ single day:
# Dashboard
ð
ÐеÑиод: {date}
Сводка по аккаÑнÑам (ÑÑÐ¾Ð²ÐµÐ½Ñ Account)
## Сводка по аккаÑнÑам
| ÐккаÑÐ½Ñ | Spend | Leads | CPL | CTR | CPM | СÑаÑÑÑ |
|---------|------:|------:|----:|----:|----:|--------|
| ÐÐ°Ñ Ð´ÐµÐ½Ñ | $450.00 | 120 | $3.75 | 1.2% | $8.50 | â
|
| Profimed | $320.00 | 85 | $3.76 | 1.1% | $9.20 | â
|
| **ÐСÐÐÐ** | **$770.00** | **205** | **$3.76** | **1.15%** | **$8.85** | â |
ФоÑмаÑиÑование:
- Spend:
${value:,.2f}(напÑÐ¸Ð¼ÐµÑ $1,234.56) - Leads: Ñелое ÑиÑло
- CPL:
${value:.2f} - CTR:
{value:.1f}% - CPM:
${value:.2f} - СÑаÑÑÑ: â Ð´Ð»Ñ Ð°ÐºÑивнÑÑ
Ðампании (ÑÑÐ¾Ð²ÐµÐ½Ñ Campaign)
ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ аккаÑнÑа вÑводи оÑделÑнÑÑ ÑаблиÑÑ:
## {Account Name} â Ðампании
| ÐÐ°Ð¼Ð¿Ð°Ð½Ð¸Ñ | Spend | Leads | CPL | Target | Î% | Budget | СÑаÑÑÑ |
|----------|------:|------:|----:|-------:|---:|-------:|--------|
| ÐмпланÑÑ | $250.00 | 65 | $3.85 | $4.00 | -4% | $40 | ACTIVE |
| ÐиниÑÑ | $200.00 | 55 | $3.64 | $5.00 | -27% | $30 | ACTIVE |
| **ÐТÐÐÐ** | **$450.00** | **120** | **$3.75** | â | â | **$70** | â |
ФоÑмаÑиÑование Î% (план-ÑакÑ):
- ÐÑÑиÑаÑелÑное знаÑение (CPL < Target) = Ñ
оÑоÑо, показÑваÑÑ ÐºÐ°Ðº еÑÑÑ:
-4% - ÐоложиÑелÑное знаÑение (CPL > Target) = плоÑ
о, показÑваÑÑ:
+15% - ÐÑли Ð½ÐµÑ target или Ð½ÐµÑ Ð»Ð¸Ð´Ð¾Ð² â показÑваÑÑ
â
AdSets (ÑÑÐ¾Ð²ÐµÐ½Ñ AdSet)
Ðод каждой кампанией:
### AdSets â {Campaign Name}
| AdSet | Spend | Leads | CPL | CTR | Budget | СÑаÑÑÑ |
|-------|------:|------:|----:|----:|-------:|--------|
| 30-45_astana | $150.00 | 40 | $3.75 | 1.4% | $25 | ACTIVE |
| 25-35_almaty | $100.00 | 25 | $4.00 | 1.1% | $15 | ACTIVE |
Ads (ÑÑÐ¾Ð²ÐµÐ½Ñ Ad)
Ðод каждÑм AdSet:
#### Ads â {AdSet Name}
| Ad | Spend | Leads | CPL | CTR | СÑаÑÑÑ |
|----|------:|------:|----:|----:|--------|
| video_1_kitchen | $80.00 | 22 | $3.64 | 1.5% | ACTIVE |
| video_2_doctor | $70.00 | 18 | $3.89 | 1.3% | ACTIVE |
WhatsApp меÑÑики (опÑионалÑно)
ÐÑли Ñ ÐºÐ°ÐºÐ¾Ð³Ð¾-Ñо аккаÑнÑа еÑÑÑ messagingLeads > 0, Ð´Ð¾Ð±Ð°Ð²Ñ ÑекÑиÑ:
## WhatsApp Quality
| ÐккаÑÐ½Ñ | Msg Leads | Quality Leads | CPQL | Quality Rate |
|---------|----------:|--------------:|-----:|-------------:|
| Profimed | 85 | 42 | $7.62 | 49.4% |
ÐбÑабоÑка оÑибок
â ï¸ ÐккаÑÐ½Ñ {name}: оÑибка доÑÑÑпа â пÑопÑÑен
â¹ï¸ {name}: Ð½ÐµÑ Ð´Ð°Ð½Ð½ÑÑ
за вÑбÑаннÑй пеÑиод
ÐÑимеÑÑ Ð·Ð°Ð¿ÑоÑов
ÐаÑбоÑд без ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¿ÐµÑиода
ÐапÑоÑ: “Ðокажи даÑбоÑд” или /dashboard
ÐаÑÑинг:
- ÐеÑиод: yesterday (по ÑмолÑаниÑ)
- ÐккаÑнÑÑ: вÑе
- УÑовенÑ: campaign (по ÑмолÑаниÑ)
ÐейÑÑвиÑ:
- ЧиÑÐ°Ñ ad_accounts.md â акÑивнÑе аккаÑнÑÑ
- ЧиÑÐ°Ñ Ð±ÑиÑÑ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ аккаÑнÑа â target CPL Ð´Ð»Ñ ÐºÐ°Ð¼Ð¿Ð°Ð½Ð¸Ð¹
- get_insights Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ аккаÑнÑа (level=”campaign”, time_range=”yesterday”)
- ФоÑмиÑÑÑ ÑаблиÑÑ Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ°Ð¼Ð¸ Target и Î%
ÐазовÑй даÑбоÑд
ÐапÑоÑ: “Ðокажи даÑбоÑд за вÑеÑа”
ÐаÑÑинг:
- ÐеÑиод: yesterday
- ÐккаÑнÑÑ: вÑе
- УÑовенÑ: campaign (по ÑмолÑаниÑ)
ÐейÑÑвиÑ:
- ЧиÑÐ°Ñ ad_accounts.md â 2 акÑивнÑÑ Ð°ÐºÐºÐ°ÑнÑа
- get_insights(act_805414428109857, “yesterday”, “campaign”)
- get_insights(act_1106872004544227, “yesterday”, “campaign”)
- ФоÑмиÑÑÑ ÑводнÑÑ ÑаблиÑÑ + ÑаблиÑÑ ÐºÐ°Ð¼Ð¿Ð°Ð½Ð¸Ð¹ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ аккаÑнÑа
ÐонкÑеÑнÑй аккаÑÐ½Ñ Ñ ÐºÐ°Ð¼Ð¿Ð°Ð½Ð¸Ñми
ÐапÑоÑ: “ÐаÑбоÑд Profimed за 7 дней Ñ ÐºÐ°Ð¼Ð¿Ð°Ð½Ð¸Ñми”
ÐаÑÑинг:
- ÐеÑиод: last_7d
- ÐккаÑнÑÑ: Profimed (act_1106872004544227)
- УÑовенÑ: campaign
ÐейÑÑвиÑ:
- ЧиÑÐ°Ñ ad_accounts.md â Ð½Ð°Ñ Ð¾Ð¶Ñ Profimed
- get_campaigns(act_1106872004544227, “ACTIVE”)
- get_insights(act_1106872004544227, “last_7d”, “campaign”)
- ФоÑмиÑÑÑ ÑаблиÑÑ Ð°ÐºÐºÐ°ÑнÑа + ÑаблиÑÑ ÐºÐ°Ð¼Ð¿Ð°Ð½Ð¸Ð¹
ÐолнÑй даÑбоÑд
ÐапÑоÑ: “ÐолнÑй даÑбоÑд за меÑÑÑ”
ÐаÑÑинг:
- ÐеÑиод: last_30d
- ÐккаÑнÑÑ: вÑе
- УÑовенÑ: ad
ÐейÑÑвиÑ:
- ЧиÑÐ°Ñ ad_accounts.md â вÑе акÑивнÑе
- ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ аккаÑнÑа:
- get_campaigns() â ÑпиÑок кампаний
- get_adsets() â ÑпиÑки adsets по кампаниÑм
- get_ads() â ÑпиÑки ads по adsets
- get_insights(level=”ad”) â меÑÑики по ads
- get_adset_details() â бÑджеÑÑ
- ФоÑмиÑÑÑ Ð¿Ð¾Ð»Ð½ÑÑ Ð¸ÐµÑаÑÑ Ð¸Ñ ÑаблиÑ
Custom пеÑиод
ÐапÑоÑ: “ÐаÑбоÑд Ñ 2026-01-10 по 2026-01-20”
ÐаÑÑинг:
- ÐеÑиод: {“since”: “2026-01-10”, “until”: “2026-01-20”}
- ÐккаÑнÑÑ: вÑе
- УÑовенÑ: campaign (по ÑмолÑаниÑ)
Чек-лиÑÑ
- ÐÑоÑиÑан ad_accounts.md
- ÐпÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð¿Ð°ÑамеÑÑÑ (пеÑиод, аккаÑнÑÑ, ÑÑовенÑ)
- ÐолÑÑÐµÐ½Ñ insights Ð´Ð»Ñ Ð½Ñжного ÑÑовнÑ
- РаÑÑÑиÑÐ°Ð½Ñ Ð¿ÑоизводнÑе меÑÑики (CPL, CTR, CPM)
- ÐÑовеÑÐµÐ½Ñ WhatsApp меÑÑики (еÑли еÑÑÑ messagingLeads)
- СÑоÑмиÑÐ¾Ð²Ð°Ð½Ñ ÑаблиÑÑ Ð¿Ð¾ Ñаблонам
- Ðобавлена ÑÑÑока ÐТÐÐÐ Ð´Ð»Ñ Ð³ÑÑпп
MCP командÑ
ЧÑение даннÑÑ
# СпиÑок аккаÑнÑов (еÑли нÑжно пÑовеÑиÑÑ Ð´Ð¾ÑÑÑп)
get_ad_accounts(limit=10)
# Ðампании аккаÑнÑа
get_campaigns(account_id, status_filter="ACTIVE", limit=50)
# AdSets аккаÑнÑа или кампании
get_adsets(account_id, campaign_id=None, limit=50)
# Ads аккаÑнÑа или adset
get_ads(account_id, adset_id=None, limit=50)
# ÐеÑÑики за пеÑиод
get_insights(
object_id, # account_id или конкÑеÑнÑй ID
time_range, # "yesterday" или {"since": "...", "until": "..."}
level="account" # account | campaign | adset | ad
)
# ÐеÑали adset (Ð´Ð»Ñ Ð±ÑджеÑа)
get_adset_details(adset_id)
ÐоÑÑÑпнÑе пеÑиодÑ
| ÐнаÑение | ÐпиÑание |
|---|---|
today |
Ð¡ÐµÐ³Ð¾Ð´Ð½Ñ |
yesterday |
ÐÑеÑа |
last_3d |
ÐоÑледние 3 Ð´Ð½Ñ |
last_7d |
ÐоÑледние 7 дней |
last_14d |
ÐоÑледние 14 дней |
last_30d |
ÐоÑледние 30 дней |
this_month |
ТекÑÑий меÑÑÑ |
last_month |
ÐÑоÑлÑй меÑÑÑ |
{"since": "YYYY-MM-DD", "until": "YYYY-MM-DD"} |
Custom |