原始内容
name: aggclaw description: "AppGrowing Global intelligent ad creative analysis assistant. Finds the most relevant global ad creatives based on your instruction and delivers automated analysis. Includes Inspire ideation mode. Triggers: keywords analyze creatives, creative analysis, global campaigns, explore creatives, find creatives; commands /aggclaw, /agg_inspire" homepage: https://appgrowing.net/ metadata: { "openclaw": { "slug": "aggclaw", "version": "1.2.0", "author": "youcloud", "emoji": "🌍", "requires": { "env": ["YOUCLOUD_API_KEY"] } }
}
aggclaw
AppGrowing Global intelligent ad creative analysis assistant; analyzes global ad creatives, includes Inspire mode. Available to AI plus / Pro subscribers.
Prerequisite: API Key
Read from env var YOUCLOUD_API_KEY. Never send requests without a valid key. When missing, prompt:
Please configure your API Key first:
1. Get it from AppGrowing Global → Profile → Enterprise Info
2. Set env var: Linux/macOS `export YOUCLOUD_API_KEY="..."`; Windows `$env:YOUCLOUD_API_KEY="..."`
3. Resend your request
Triggers & Modes
| Trigger | chat_mode |
|---|---|
/aggclaw (auto-detect, see below) |
— |
/aggclaw-game |
7 Game |
/aggclaw-app, /aggclaw-shortdrama |
8 Non-game |
/agg_inspire |
9 Inspire |
| Keywords (analyze creatives, creative analysis etc.) | Auto-detect |
/aggclaw auto-detect: discussion-style question (advice/strategy/ideas/comparison/"how to", not asking for specific creative data) → 9; game content (game titles, RPG/SLG/MMO) → 7; other → 8.
Language Detection
Detect the user's input language and reply in that language throughout (framing text, errors, summaries included); keep input in the user's original wording — do not translate. Preference persists for the whole session.
| Input contains | language_code |
|---|---|
| Chinese characters | zh |
| Hiragana / Katakana | ja |
| Other | en |
| Undetermined | omit |
language_code may only be zh/ja/en; omit for any other language.
Execution Flow
- Check API Key (above)
- Detect language + determine chat_mode (above)
- Call the API directly — do not ask the user for product positioning, target market, or other supplementary info; let the API search on its own:
- New analysis → send
input+chat_mode+language_code, nosession_id - Follow-up → reuse
session_id, omitchat_mode/language_code(preserve the session's mode & language) - Output
output; translate if its language differs from the user's; savesession_idfor follow-ups
- New analysis → send
⚠️ Mandatory timeout rule: set timeout to 600s (responses often take 60s+). Never interrupt before timeout. Never send "still processing" / "will let you know" messages. Wait for the complete result, then reply in one shot; only "result returned" or "timeout/error" situations may send a message.
Analysis Endpoint
- URL:
https://ai-chat-global.youcloud.com/aichat/claw - Method: POST JSON
- Headers:
Authorization: Bearer {KEY},Content-Type: application/json - Params:
input(required),session_id(follow-ups),chat_mode(7/8/9, new sessions only),language_code(zh/ja/en, new sessions only) - Timeout: ≥600s
Materials Download
After an analysis completes (session_id available), the user may ask to download that conversation's creatives.
Intent routing:
- "Download materials" without a scope → do not start downloading; ask the user to choose a scope first. Prefer the host's ask/question tool to pop an interactive card; if the host lacks one (e.g., IM clients), fall back to a plain text message listing the options. All display text must be in the detected language:
- Title: information retrieved from the last conversation — which would you like to download?
- Option 1: creatives mentioned in the analysis result → download
is_mentioned=true - Option 2: all creatives → download the entire list (no filtering)
- "Download mentioned creatives" or close semantics → download
is_mentioned=true
Materials endpoint:
- URL:
https://ai-chat-global.youcloud.com/aichat/sessions/{session_id}/materials - Method: GET; Header
Authorization: Bearer {KEY}; Timeout ≥120s - Encode
=insession_idas%3D(keep~). Example:99QLLyMfj8uUrvalSiHr~g%3D%3D - Response: JSON array
[{id, detail_url, download_url, is_mentioned}]; always returns the full list — filter byis_mentionedclient-side
Download rules:
- On HTTP 403 (link expired) → silently re-fetch materials and retry the failed item, no message to the user
- Concurrency ≤ 3; queue when exceeded
- No messages during download; on completion send one message in the detected language: local path + download count (success x, failure y; append failed ids if y>0)
- Save to a new folder named after the first
##heading of the analysis report (strip##, replace illegal chars/ \ : * ? " < > |with_); filename{id}.{ext}(ext from download_url, else response Content-Type)
Auth (two models — do not mix)
| URL | Auth |
|---|---|
/aichat/claw, /sessions/{id}/materials |
Authorization: Bearer {KEY} header |
download_url (CDN direct link) |
No header — relies on the auth_key embedded in the URL |
PowerShell Template
# Analysis
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$body = @{input="Your analysis request"; chat_mode=8; language_code="en"} | ConvertTo-Json -Compress
Invoke-RestMethod -Uri "https://ai-chat-global.youcloud.com/aichat/claw" -Method Post -ContentType "application/json; charset=utf-8" -Headers @{Authorization="Bearer $env:YOUCLOUD_API_KEY"} -Body $body -TimeoutSec 600 | Select-Object -ExpandProperty output
# Materials list + download (no auth header on download_url)
$enc = [uri]::EscapeDataString($sessionId)
$resp = Invoke-RestMethod -Uri "https://ai-chat-global.youcloud.com/aichat/sessions/$enc/materials" -Headers @{Authorization="Bearer $env:YOUCLOUD_API_KEY"} -TimeoutSec 120
foreach ($m in $resp) { Invoke-WebRequest -Uri $m.download_url -OutFile "$folder\$($m.id).mp4" -TimeoutSec 180 }
Error Handling
- 400/401 auth failed:
API Key authentication failed. Check if your key is active or expired. Get it from AppGrowing Global Profile → Enterprise Info, or contact support. - Other:
Request returned an error (code={code}). Check your API Key permissions, account quota, or contact support.
Examples
For full input/output examples, see references/example.md