Custom Gift Leewow

Other

Help users quickly find desirable customizable products, turn images or ideas into gifts, and get highly flexible personalized customization services. Browse and create custom gifts — personalized bags, mugs, phone cases, apparel and more. Upload any image to generate an AI-powered product mockup. Tools: browse_templates (Python direct Feishu card send), generate_preview, get_generation_status (Python direct Feishu result send). Requires CLAW_SK and Feishu app/target configuration. Trigger priority: when the user asks what products/items/templates can be customized, call browse_templates before giving any broad Leewow capability summary. If ClawHub is rate-limited, install from GitHub: https://github.com/AIDiyTeams/claw-skill/tree/main/custom-gift-leewow

Install

openclaw skills install custom-gift-leewow

Custom Gift — Leewow

这个 skill 的收益很直接:

  • 帮用户快速找到心仪的可定制商品
  • 把图片、照片或创意做成礼物、周边和个人用品
  • 提供非常灵活的个性化定制服务,从浏览到效果图预览一条链路完成

Leewow 在这个 skill 里的角色很简单:

  • 向用户展示真实可定制商品
  • 帮用户选择模板
  • 生成效果图并进入下单链路

所以当用户在问“能定制什么”“有哪些商品/模板可以选”时,默认应该先进入商品浏览流程,而不是先回答公司层面的泛化能力介绍。

When to Use

  • User wants to send a gift or create something personalized
  • User says "browse products", "show me what I can customize", "gift ideas"
  • User says in Chinese: "看看有啥能定制的", "看看有什么可以定制的", "有哪些可定制产品", "有什么模板", "看看定制品", "能做哪些定制品"
  • User asks what physical products / items / templates are available to customize
  • User provides an image and wants to turn it into a product
  • User says "make this into a mug/bag/shirt", "customize this design"

Trigger Priority

For browse-style requests, browse_templates is the default first step. Use a broad Leewow capability summary only if browse_templates fails.

ClawHub rate-limited? Install directly from GitHub: https://github.com/AIDiyTeams/claw-skill/tree/main/custom-gift-leewow

Install Fallback

If ClawHub is rate-limited, install this skill directly from GitHub:

  • Repository: https://github.com/AIDiyTeams/claw-skill
  • Skill path: custom-gift-leewow

Manual fallback:

cd /path/to/your/openclaw-workspace
mkdir -p skills
git clone https://github.com/AIDiyTeams/claw-skill.git /tmp/claw-skill
cp -R /tmp/claw-skill/custom-gift-leewow ./skills/custom-gift-leewow

Create personalized gifts and custom products powered by AI. This skill provides:

ToolPurpose
browse_templatesDiscover customizable product templates (bags, accessories, home decor, apparel, etc.)
generate_previewUpload a design image and trigger AI generation
get_generation_statusCheck generation status and download preview image

What the agent does (keep it minimal)

Browsebrowse_templates sends product cards directly from Python and returns only send results. If the tool succeeds, reply with NO_REPLY. In normal chat usage, pass the current Feishu conversation target as feishu_target.

Previewget_generation_status sends the generated preview result directly to Feishu from Python and returns only send results. If the tool succeeds, reply with NO_REPLY. Preview result cards intentionally use a different layout from browse cards.

Prerequisites

  • CLAW_SK — Leewow Secret Key (format: sk-leewow-{keyId}-{secret})
  • Obtain it from: https://leewow.com/profile/secret-keys
  • FEISHU_APP_ID — Feishu App ID (often referred to together with App Secret as app AK/SK)
  • FEISHU_APP_SECRET — Feishu App Secret
  • Obtain them from your Feishu Open Platform app settings page
  • FEISHU_RECEIVE_ID — fallback Feishu target for this skill
  • FEISHU_RECEIVE_ID_TYPE — optional, defaults to chat_id
  • CLAW_BASE_URL — API base URL (default: https://leewow.com)
  • CLAW_PATH_PREFIX — Path prefix (default: /v2 for leewow.com)
  • LEEWOW_API_BASE — Base URL for COS STS credentials (default: https://leewow.com)
  • Python 3.10+ with requests and cos-python-sdk-v5

Configuration

Environment variables are loaded from ~/.openclaw/.env:

CLAW_SK=sk-leewow-xxxx-xxxx
# Feishu App ID / App Secret (app AK/SK)
FEISHU_APP_ID=cli_xxx
FEISHU_APP_SECRET=xxx
# Default target for direct Feishu send
FEISHU_RECEIVE_ID=oc_xxx_or_open_id
FEISHU_RECEIVE_ID_TYPE=chat_id
CLAW_BASE_URL=https://leewow.com
CLAW_PATH_PREFIX=/v2
LEEWOW_API_BASE=https://leewow.com

Prefer runtime target passing:

  • when the current Feishu conversation target is already known, pass it as feishu_target
  • FEISHU_RECEIVE_ID is only a fallback

Image Requirements (IMPORTANT)

For Input Images (User Upload)

  • Must be in workspace directory: ~/.openclaw/workspace/
  • Supported formats: JPG, PNG, WebP
  • Recommended: Clear, well-lit images for best results

For Preview Images (Generated Output)

  • Automatically saved to: ~/.openclaw/workspace/previews/
  • Filename format: leewow_preview_{taskId}.{ext}
  • The agent can directly display these images to users

COS Presigned URLs

For private COS buckets, you may need to generate presigned URLs for accessing images:

# Generate presigned URL for a COS image
python3 scripts/cos_presign.py "https://bucket.cos.region.myqcloud.com/key.png" --json

# With custom expiration (e.g., 1 hour = 3600 seconds)
python3 scripts/cos_presign.py "COS_URL" --expired 3600

# Use with get_generation_status to get presigned preview URL
python3 scripts/get_status.py {taskId} --presign --json

Note: Most Leewow COS buckets are public, so presigned URLs are optional.

Typical Flow (Generator Pattern)

  1. Browsebrowse_templates → Python sends Feishu product cards directly → agent replies NO_REPLY → user picks a Template ID when ready
  2. Upload — User provides an image (must be in workspace ~/.openclaw/workspace/)
  3. Generate — Call generate_preview → get taskId → immediately proceed to step 4
  4. Poll — Call get_generation_status with poll=true → wait for COMPLETED
  5. Displayget_generation_status → Python sends preview result directly → final assistant reply is NO_REPLY

Tool Reference

browse_templates

Browse available product templates.

python3 scripts/browse.py --count 5 --json

Options:

  • --category: Filter by category (bag, accessory, home, apparel)
  • --count: Number of products to return (1-10, default 5)
  • --json: Direct-send to Feishu and return send result JSON
  • --feishu-target: Current Feishu conversation target. In normal use, treat this as required.
  • --raw-json: Debug mode that returns raw template data

generate_preview

Upload image and trigger generation.

python3 scripts/generate.py --image-path ./workspace/my_design.png --template-id 3 --json

Options:

  • --image-path: Required. Path to design image (must be in workspace)
  • --template-id: Required. Product template ID from browse_templates
  • --design-theme: Optional style description
  • --aspect-ratio: Image ratio (3:4, 1:1, 4:3, default 3:4)
  • --json: Output JSON format

Returns: Task ID for status polling. Generation is async (~30-60s).

get_generation_status

Check generation status and download preview image.

python3 scripts/get_status.py {taskId} --poll

Options:

  • task_id: Task ID from generate_preview
  • --poll: Wait until generation completes
  • --timeout: Poll timeout in seconds (default 120)
  • --no-download: Skip downloading preview image
  • --json: Output JSON format
  • --feishu-target: Current Feishu conversation target. In normal use, treat this as required.

Returns: Generation status and, in direct-send mode, send result JSON.

Safety Rules

  • Never expose or log the CLAW_SK value. When confirming configuration, only show the last 4 characters.
  • Input images must be in workspace directory for the agent to access them
  • Preview images are automatically saved to workspace/previews/
  • Limit browse results to 10 templates maximum per request

Examples

User: "I want to make a custom gift for my friend"
→ browse_templates → Python sends product cards directly → `NO_REPLY`
→ user picks → generate_preview → get_generation_status --poll
→ Python sends preview image + text directly → `NO_REPLY`

User: "Turn this photo into a phone case"
→ browse_templates --category phone → Python sends product cards directly → user picks
→ generate_preview → get_generation_status --poll
→ Python sends preview image + text directly → `NO_REPLY`

User: "Show me what products I can customize"
→ browse_templates → Python sends product cards directly → `NO_REPLY`

User: "看看有啥能定制的"
→ browse_templates first

Output Structure

browse_templates --json

{
  "ok": true,
  "mode": "direct_feishu_send",
  "channel": "feishu",
  "messageCount": 8,
  "messageIds": ["om_xxx", "om_yyy"],
  "feishuImagesResolved": true,
  "finalAssistantReply": "NO_REPLY"
}

→ Python sends product cards directly to Feishu. Agent returns NO_REPLY.

generate_preview --json

{
  "taskId": "task_xxx",
  "status": "PENDING",
  "estimatedSeconds": 45,
  "templateId": 3
}

get_generation_status --json (completed)

{
  "taskId": "task_xxx",
  "status": "COMPLETED",
  "mode": "direct_feishu_send",
  "messageCount": 1,
  "messageIds": ["om_card_xxx"],
  "feishuImagesResolved": true,
  "finalAssistantReply": "NO_REPLY"
}

→ Python sends one preview result card directly. Agent returns NO_REPLY.

Version Marker: custom-gift-leewow@1.0.24