{"skill":{"slug":"openclaw-whatsapp-gif","displayName":"openclaw-whatsapp-gif","summary":"Source and send relevant reaction GIFs in WhatsApp chats using safe filters and deterministic ranking. Use when the user asks for a GIF/meme/reaction, or whe...","description":"---\nname: openclaw-whatsapp-gif\ndescription: Source and send relevant reaction GIFs in WhatsApp chats using safe filters and deterministic ranking. Use when the user asks for a GIF/meme/reaction, or when a short visual reaction is better than plain text for celebration, humor, acknowledgment, empathy, or agreement.\nmetadata:\n  optional_api_keys:\n    - TENOR_API_KEY\n    - GIPHY_API_KEY\n  operational_behavior:\n    downloads_remote_media: true\n    web_scrape_fallback_default: false\n    writes_temp_cache: true\n    telemetry_logging_default: false\n---\n\n# WhatsApp GIF\n\nSource safe, context-matching GIFs and send exactly one high-quality result to WhatsApp.\n\n## Workflow\n\n1. Decide if GIF is appropriate.\n2. Build concise search query from user intent (2-5 words).\n3. Run `scripts/find_gif.py` to fetch and rank candidates.\n4. Send top result with `message` tool to WhatsApp (prefer local-file payload mode).\n5. If send fails, retry once with next candidate.\n6. If still failing or no results, send concise fallback text.\n\n## Decision rules\n\nPrefer GIF when:\n- The user explicitly asks for GIF/meme/reaction.\n- A brief emotional signal is enough.\n- Tone benefits from a visual response.\n\nAvoid GIF when:\n- Topic is serious/sensitive (medical, legal, conflict, grief).\n- Group context is formal or unclear.\n- User asked for text-only response.\n\n## Script usage\n\nUse these deterministic helpers:\n\n```bash\npython3 skills/openclaw-whatsapp-gif/scripts/find_gif.py \"congrats celebration\" --limit 5 --json\npython3 skills/openclaw-whatsapp-gif/scripts/find_gif.py \"great job\" --limit 3 --json --target \"+1234567890\"\npython3 skills/openclaw-whatsapp-gif/scripts/send_gif.py \"+1234567890\" \"great job celebration\" --json\npython3 skills/openclaw-whatsapp-gif/scripts/send_gif.py \"+1234567890\" \"great job celebration\" --delivery-mode local --json\npython3 skills/openclaw-whatsapp-gif/scripts/send_gif.py \"+1234567890\" \"great job celebration\" --payload-only\n```\n\nBehavior:\n- Reads `TENOR_API_KEY` and/or `GIPHY_API_KEY`.\n- Applies safe filtering (`contentfilter=low` / `rating=g` + blocklist).\n- Uses retry + backoff for network fetches.\n- Ranks by keyword overlap + lightweight preference.\n- If no API keys or no provider results, uses built-in safe fallback catalog.\n- Optional web scraping fallback is available only when `allowWebScrapeFallback` is enabled in `references/policy.json`.\n- Expands intent queries using common reaction aliases.\n- Deduplicates repeated URLs across providers.\n- Returns URL only (default) or candidate list (`--json`).\n- With `--target`, prints a ready-to-send WhatsApp `message` payload in JSON.\n- With `send_gif.py --payload-only`, prints only the final message payload for direct tool handoff.\n- `send_gif.py` validates media size/type, retries next candidates when a URL is bad, and writes to OS temp cache.\n- Telemetry logging is disabled by default and can be enabled by policy or CLI flag.\n- Remote URL fallback is disabled by default and must be explicitly enabled in policy.\n- Runtime policy is configurable in `references/policy.json`.\n\n## WhatsApp send pattern\n\nUse `message` with:\n- `action: \"send\"`\n- `channel: \"whatsapp\"`\n- `target: <chat id/recipient>`\n- `media: <gif/mp4 url>`\n- `caption: <optional short line>`\n- `gifPlayback: true`\n\nIf provider rejects `.gif`, retry using next candidate URL (prefer MP4).\n\n## Fallback\n\nIf no suitable GIF or delivery fails twice:\n- Send concise text preserving intent.\n- Do not keep retrying in a loop.\n\n## References\n\n- Provider notes: `references/providers.md`\n","tags":{"latest":"1.0.1"},"stats":{"comments":0,"downloads":882,"installsAllTime":0,"installsCurrent":0,"stars":0,"versions":2},"createdAt":1771473961701,"updatedAt":1778491581507},"latestVersion":{"version":"1.0.1","createdAt":1771474728088,"changelog":"openclaw-whatsapp-gif v1.0.1\n\n- Added agents/openai.yaml configuration file.\n- Updated SKILL.md to include operational metadata: optional API keys, temp cache behavior, and policy controls for web scraping, remote URL fallback, and telemetry logging.\n- Clarified that web scraping and remote URL fallback are disabled by default and require explicit policy enabling.\n- Updated script usage notes for temp cache use and default telemetry/logging behavior.","license":null},"metadata":null,"owner":{"handle":"witty-quotes25","userId":"s173j0p19344628pysgecg7pyx885ftp","displayName":"witty-quotes25","image":"https://avatars.githubusercontent.com/u/205855626?v=4"},"moderation":null}