first commit

This commit is contained in:
2026-04-05 15:07:53 +08:00
commit d1bac85f28
30 changed files with 1071 additions and 0 deletions
+23
View File
@@ -0,0 +1,23 @@
PORT=8080
AUTH_USERNAME=admin
AUTH_PASSWORD=P@ssw0rd123!@#
OPENCLAW_GATEWAY_TOKEN=ogt_cc2a54883345b1dfc409f716b08d4104d6dfd94cea47da80ee99c98fda1a1384
TZ=Asia/Kuala_Lumpur
OPENROUTER_API_KEY= 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
OPENCLAW_PRIMARY_MODEL=openrouter/free
# Optional alternatives
# OPENAI_API_KEY=
# ANTHROPIC_API_KEY=
# OPENCODE_API_KEY=replace-with-your-key
# GEMINI_API_KEY=
# GROQ_API_KEY=
# OLLAMA_BASE_URL=http://host.docker.internal:11434
TELEGRAM_BOT_TOKEN=8602405814:AAF09-zauk8VnPYpRw9GNIwCCMFJYoMz6vI
TELEGRAM_DM_POLICY=pairing
+97
View File
@@ -0,0 +1,97 @@
########################### skills/brevo/SKILL.md
---
name: brevo
description: Manage Brevo contacts, lists, transactional emails, and campaigns.
---
# Brevo Email Marketing API
Use this skill when you need to manage Brevo contacts, lists, transactional emails, and campaigns.
## Authentication
Use this shell pattern:
`BREVO_KEY=$(cat ~/.config/brevo/api_key)`
All Brevo API requests require:
`api-key: $BREVO_KEY`
## Base URL
`https://api.brevo.com/v3`
## Common endpoints
- Create contact: `POST /contacts`
- Get contact: `GET /contacts/{email}`
- Update contact: `PUT /contacts/{email}`
- List contacts: `GET /contacts?limit=50&offset=0`
- Get all lists: `GET /contacts/lists`
- Add contacts to list: `POST /contacts/lists/{listId}/contacts/add`
- Send transactional email: `POST /smtp/email`
- Get templates: `GET /smtp/templates`
## Best practices
- Always check blacklisted or unsubscribed contacts before importing.
- Use `updateEnabled: true` when creating contacts.
- Prefer templates for transactional emails.
- Store list IDs in config, not hardcoded prompts.
########################### skills/brevo/SKILL.md
##########################/data/state/.config/brevo/api_key
{
"skills": {
"entries": {
"brevo": {
"enabled": true,
"env": {
"BREVO_KEY": "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"
}
}
}
}
}
##########################/data/state/.config/brevo/api_key
export BREVO_KEY="$(cat ~/.config/brevo/api_key)"
curl "https://api.brevo.com/v3/account" \
-H "api-key: $BREVO_KEY"
curl "https://api.brevo.com/v3/contacts/lists?limit=50" \
-H "api-key: $BREVO_KEY"
################################### config
📧 Brevo Email Configuration
SMTP Relay
• Server: smtp-relay.brevo.com
• Port: 587
• Login: a5d823001@smtp-brevo.com
• Password: xsmtpsib-dc1bd72ebb127d5b026e510adeaa2261b3044585afaef2fe0c12b7868beaf445-eQi9LSnFiKX6WXyg
API (v3)
• Base URL: https://api.brevo.com/v3
• API Key: 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
Test Send (Working)
• Sender: eujin.lai.82@gmail.com
• Recipient: lejin2000@hotmail.com
• Last Message ID: <202603300718.31101727365@smtp-relay.mailin.fr>
• Status: ✅ Verified
Reusable Scripts
• send_brevo_api.py: Basic test
• send_test_email_custom.py: Custom to/from
Notes
• Stored in /data/state/.config/brevo/api_key for secure access
• Local backup: /data/workspace/MEMORY.md and /data/workspace/brevo_notes.md
########################################
+53
View File
@@ -0,0 +1,53 @@
services:
openclaw:
image: coollabsio/openclaw:latest
restart: unless-stopped
env_file:
- .env
environment:
PORT: "${PORT:-8080}"
AUTH_USERNAME: "${AUTH_USERNAME}"
AUTH_PASSWORD: "${AUTH_PASSWORD}"
OPENCLAW_GATEWAY_TOKEN: "${OPENCLAW_GATEWAY_TOKEN}"
OPENROUTER_API_KEY: "${OPENROUTER_API_KEY}"
OPENCLAW_PRIMARY_MODEL: "${OPENCLAW_PRIMARY_MODEL}"
BROWSER_CDP_URL: "http://browser:9223"
BROWSER_DEFAULT_PROFILE: "openclaw"
BROWSER_EVALUATE_ENABLED: "true"
OPENCLAW_STATE_DIR: "/data/.openclaw"
OPENCLAW_WORKSPACE_DIR: "/data/workspace"
OPENCLAW_CONFIG_JSON: '{"gateway":{"mode":"local"}}'
volumes:
- openclaw-data:/data
depends_on:
- browser
networks:
- internal
- caddy_caddy_net
# Optional: only keep this if you also want direct host access for testing
# ports:
# - "${PORT:-8080}:${PORT:-8080}"
browser:
image: coollabsio/openclaw-browser:latest
restart: unless-stopped
environment:
PUID: "1000"
PGID: "1000"
TZ: "${TZ:-Asia/Kuala_Lumpur}"
CHROME_CLI: "--remote-debugging-port=9222"
volumes:
- browser-data:/config
shm_size: 2g
networks:
- internal
volumes:
openclaw-data:
browser-data:
networks:
internal:
driver: bridge
caddy_caddy_net:
external: true
+29
View File
@@ -0,0 +1,29 @@
####################### /data/state/openclaw.json
"messages": {
"tts": {
"auto": "inbound",
"provider": "elevenlabs",
"providers": {
"elevenlabs": {
"apiKey": "cd1d07445c67ac457d87ab44d0a677fe684810f6ea8923944147939d7f5a7427",
"voiceId": "tMvyQtpCVQ0DkixuYm6J",
"modelId": "eleven_multilingual_v2",
"baseUrl": "https://api.elevenlabs.io",
"languageCode": "en",
"voiceSettings": {
"stability": 0.5,
"similarityBoost": 0.75,
"style": 0.0,
"useSpeakerBoost": true,
"speed": 1.0
}
}
}
}
}
###############################
export ELEVENLABS_API_KEY=cd1d07445c67ac457d87ab44d0a677fe684810f6ea8923944147939d7f5a7427
+117
View File
@@ -0,0 +1,117 @@
############ /data/workspace/skills/notion/SKILL.md
---
name: notion
description: Work with Notion pages and databases via the official Notion API.
homepage: https://developers.notion.com
metadata:
clawdbot:
emoji: 🧠
requires:
env:
- NOTION_API_KEY
install:
- id: node
kind: note
label: "Requires notion-cli (Node.js) or notion-cli-py (Python). See docs below."
---
# Notion
This skill lets the agent work with **Notion pages and databases** using the official Notion API.
The skill is declarative: it documents **safe, recommended operations** and assumes a local CLI
(`notion-cli`) that actually performs API calls.
## Authentication
- Create a Notion Integration at https://www.notion.so/my-integrations
- Copy the Internal Integration Token.
- Export it as:
```bash
export NOTION_API_KEY=secret_xxx
```
Share the integration with the pages or databases you want to access.
Unshared content is invisible to the API.
## Profiles (personal / work)
You may define multiple profiles (e.g. personal, work) via env or config.
Default profile: personal
Override via:
```bash
export NOTION_PROFILE=work
```
## Pages
**Read page:**
```bash
notion-cli page get <page_id>
```
**Append blocks:**
```bash
notion-cli block append <page_id> --markdown "..."
```
Prefer appending over rewriting content.
**Create page:**
```bash
notion-cli page create --parent <page_id> --title "..."
```
## Databases
**Inspect schema:**
```bash
notion-cli db get <database_id>
```
**Query database:**
```bash
notion-cli db query <database_id> --filter <json> --sort <json>
```
**Create row:**
```bash
notion-cli page create --database <database_id> --props <json>
```
**Update row:**
```bash
notion-cli page update <page_id> --props <json>
```
## Schema changes (advanced)
Always inspect diffs before applying schema changes.
Never modify database schema without explicit confirmation.
Recommended flow:
```bash
notion-cli db schema diff <database_id> --desired <json>
notion-cli db schema apply <database_id> --desired <json>
```
## Safety notes
- Notion API is rate-limited; batch carefully.
- Prefer append and updates over destructive operations.
- IDs are opaque; store them explicitly, do not infer from URLs.
############ /data/workspace/skills/notion/SKILL.md
+76
View File
@@ -0,0 +1,76 @@
sudo docker exec -it openclaw-openclaw-1 /bin/bash
docker exec -it openclaw /bin/bash
docker exec openclaw openclaw config set gateway.auth.token "ogt_cc2a54883345b1dfc409f716b08d4104d6dfd94cea47da80ee99c98fda1a1384"
docker exec openclaw openclaw config set agents.defaults.model.primary "openrouter/free"
docker exec openclaw openclaw config get agents.defaults.model.primary
docker exec openclaw openclaw config set gateway.controlUi.allowInsecureAuth false
docker compose logs openclaw --tail=25
docker exec -it openclaw openclaw onboard --auth-choice gemini-api-key
# Step 1 — List pending pairing requests first
docker exec -it openclaw openclaw pairing list telegram
# Step 2 — Approve with your code
docker exec -it openclaw openclaw pairing approve telegram PW864DGY
docker exec -it --user root openclaw bash -c "apt-get update && apt-get install -y at cron"
docker exec -it --user root openclaw bash -c "apt-get update && apt-get install -y sh"
### use nvidia
# Set NVIDIA API key
docker exec openclaw openclaw config set models.providers.nvidia.baseUrl "https://integrate.api.nvidia.com/v1"
docker exec openclaw openclaw config set models.providers.nvidia.apiKey "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"
docker exec openclaw openclaw config set models.providers.nvidia.api "openai-completions"
# Set as primary model
docker exec openclaw openclaw config set agents.defaults.model.primary "nvidia/meta/llama-4-scout-17b-16e-instruct"
# If accessing via IP
docker exec openclaw openclaw config set gateway.controlUi.allowedOrigins '["*"]'
# OR specific domain (more secure)
docker exec openclaw openclaw config set gateway.controlUi.allowedOrigins '["https://lejin82.ooguy.com/", "http://openclaw:8080"]'
http://ollama:11434
openclaw configure
openclaw gateway restart
openclaw onboard
openclaw models status
# remove heartbeat
openclaw config set agents.defaults.heartbeat.every "0m"
openclaw config set channels.defaults.heartbeat.showOk false
openclaw config set channels.defaults.heartbeat.showAlerts false
openclaw config set channels.defaults.heartbeat.useIndicator false
openclaw gateway restart
openclaw config set gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback true
openclaw gateway restart
openclaw skills list --eligible
openclaw config set gateway.bind lan
openclaw gateway status
openclaw status
openclaw config set gateway.trustedProxies '["127.0.0.1","::1"]'
openclaw config set channels.telegram.groupAllowFrom '[795409110]'
openclaw devices list
openclaw devices approve 30310d90-e843-48b8-a32c-f44a73c94409
openclaw config set gateway.mode local
openclaw doctor --fix
openclaw gateway probe
+8
View File
@@ -0,0 +1,8 @@
TAVILY_API_KEY=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
export TAVILY_API_KEY="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"
"tavily-search": {
"enabled": true,
"apiKey": "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"
}