Skip to main content

email-webhook

Receive incoming emails via JSON webhooks and wake the agent. Built for AI Commander.

설치로 이동

소스 정보

저장소
ShoumikSaha/agent-skill-security
최근 소스 활동
2026년 5월 12일 23:24
감지된 SKILL.md 언어
영어
스타
17
포크
2

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
3 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
email-webhook
description
Receive incoming emails via JSON webhooks and wake the agent. Built for AI Commander.
metadata
{"openclaw":{"requires":{"bins":"[Truncated]","env":"[Truncated]"},"primaryEnv":"WEBHOOK_SECRET","install":["[Truncated]"]}}
# Email Webhook Receiver This skill provides a secure endpoint to receive emails as standardized JSON webhooks and automatically wakes the agent. ## 🤖 Agent Setup (Post-Install) After installing and starting this skill, add the following logic to your `HEARTBEAT.md`: ```markdown ### 📧 Inbound Email Check - Read `<path-to-inbox.jsonl>` (configured via INBOX_FILE or default: inbox.jsonl in cwd) - Compare the latest `receivedAt` timestamp with your last-checked timestamp - If there are NEW emails since last check: - Notify the user via their last active communication channel (Discord, WhatsApp, etc.) - Format: "📧 New email from [from]: [subject] — [text preview]" - Update your last-checked timestamp - If no new emails: continue silently ``` > 💡 You don't need to know the user's channel in advance — use the most recently active channel from your session history. If you're unsure how to reach the user, ask them directly. The skill fires `openclaw system event` on each incoming email to wake you immediately. Your HEARTBEAT.md logic will then run and handle the notification. ## ⚡️ Wake Mechanism When an email is received, the server invokes `openclaw system event --mode now`. This ensures the agent is notified immediately and can process the incoming communication without waiting for the next heartbeat cycle. ## 🚨 Security & Privacy ### Command Injection Protection The server uses secure process spawning (`child_process.spawn`) with argument arrays instead of shell execution. User-controlled input (email headers) cannot be used to execute arbitrary system commands. ### Path Traversal Protection The `INBOX_FILE` parameter is sanitized using `path.basename()`, ensuring that files are only written within the server's working directory. ### Authentication A strong `WEBHOOK_SECRET` environment variable is **REQUIRED** for the server to start. All incoming requests must provide this secret in the `Authorization: Bearer <secret>` header. ### Data Storage - **Local Inbox**: Incoming emails (raw body and metadata) are appended to a local `inbox.jsonl` file. - **Cleanup**: Users should periodically rotate or delete the inbox file to save disk space and protect privacy. ## Environment Variables | Variable | Required | Default | Description | |---|---|---|---| | `WEBHOOK_SECRET` | **Yes** | — | Secret token for webhook authentication. | | `OPENCLAW_AGENT_ID` | **Yes** | — | Your agent ID (e.g. `skippy`). Without this, incoming emails wake **ALL** agents on the server. | | `PORT` | No | `2083` | Port to listen on. Configurable — set to match your `OPENCLAW_WEBHOOK_URL`. | | `INBOX_FILE` | No | `inbox.jsonl` | Filename for the activity feed. | ## Setup 1. **Install dependencies**: ```bash npm install express@4.21.2 ``` 2. **Start Server**: ```bash WEBHOOK_SECRET=your-strong-token node scripts/webhook_server.js ``` ## Cloudflare Setup This server listens on port **2082**. Cloudflare natively supports port 2082 as an HTTP origin port with Flexible SSL. When configuring your Cloudflare Email Worker, set `OPENCLAW_WEBHOOK_URL` using **`http://`** with the port explicitly: ``` https://webhook.yourdomain.com:2083/api/email ``` Port **2083** is a Cloudflare-supported port. Works with **Flexible SSL** — the server uses a self-signed certificate (auto-generated on first run) which Cloudflare accepts on this port. > ⚠️ If you use a different port, set the `PORT` env var when starting the server. > ⚠️ If you omit the port in the Worker URL, Cloudflare defaults to port 80 → 404. DNS setup: create an A record for `webhook.yourdomain.com` pointing to your server IP with the orange cloud (proxy) enabled. ## Runtime Requirements Requires: `express`, `node`, `openclaw` CLI.
GitHub에서 보기