first commit
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
|
||||
########################################
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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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"
|
||||
}
|
||||
Reference in New Issue
Block a user