install
source ยท Clone the upstream repo
git clone https://github.com/TechNickAI/openclaw-config
Claude Code ยท Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/TechNickAI/openclaw-config "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/quo" ~/.claude/skills/technickai-openclaw-config-quo && rm -rf "$T"
OpenClaw ยท Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/TechNickAI/openclaw-config "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/quo" ~/.openclaw/skills/technickai-openclaw-config-quo && rm -rf "$T"
manifest:
skills/quo/SKILL.mdsource content
Quo ๐
Query your Quo (formerly OpenPhone) business phone โ calls, texts, contacts, transcripts.
Setup
API key from my.quo.com โ Settings โ API. Configure via gateway under
skills.entries.quo.apiKey. OpenClaw injects it as QUO_API_KEY automatically.
What Users Ask
- "What's my Quo number?"
- "Show recent conversations"
- "Get the transcript from that call"
- "What was the summary of my call with [person]?"
- "List my business contacts"
- "Send a text to [number]"
- "Show my recent calls with [number]"
- "Any missed calls today?"
- "Who called the office?"
- "Text [person] from my work number"
- "Check my voicemails"
- "What messages came in on the business line?"
- "Who is this number?"
- "Show me everything from this number"
- "Show conversations from unknown numbers"
CLI Reference
{baseDir}/quo numbers List phone numbers {baseDir}/quo conversations [filters] List conversations {baseDir}/quo contacts [--limit N] List contacts {baseDir}/quo search-phone <phone> [--refresh] Find contact by phone (cached) {baseDir}/quo gather <phone> [--since ISO] [--until ISO] [--limit N] [--refresh] {baseDir}/quo custom-fields List contact custom fields {baseDir}/quo users List workspace users {baseDir}/quo summary <callId> Get AI call summary {baseDir}/quo transcript <callId> Get full dialogue transcript {baseDir}/quo recordings <callId> Get recording URLs {baseDir}/quo voicemails <callId> Get voicemail + transcript {baseDir}/quo send --from <num> --to <num> <message> {baseDir}/quo messages --number-id <id> --participant <phone> [--limit N] {baseDir}/quo calls --number-id <id> --participant <phone> [--limit N] [--created-after ISO] [--created-before ISO] {baseDir}/quo raw [METHOD] <endpoint> [json-body]
Conversation Filters
--phone <number-or-id> Filter by Quo phone line (repeatable) --updated-after ISO Conversations updated after date --updated-before ISO Conversations updated before date --created-after ISO Conversations created after date --created-before ISO Conversations created before date --include-inactive Include inactive/snoozed conversations --unknown Only show conversations with unrecognized numbers --limit N Max results (default 10)
API Endpoints
Full OpenAPI spec: https://openphone-public-api-prod.s3.us-west-2.amazonaws.com/public/openphone-public-api-v1-prod.json
| Endpoint | Method | Description |
|---|---|---|
| GET | List phone numbers |
| GET | List conversations (filterable) |
| GET | List messages for a conversation |
| POST | Send a text message |
| GET | Get message by ID |
| GET | List calls (with date filters) |
| GET | Get call by ID |
| GET | AI-generated call summary |
| GET | Full dialogue transcript with speaker attribution |
| GET | Recording URLs (MP3) |
| GET | Voicemail + transcript |
| GET | List contacts (paginated) |
| POST | Create a contact |
| GET | Get contact by ID |
| PATCH | Update contact (replaces entire defaultFields!) |
| DELETE | Delete a contact |
| GET | List custom contact fields |
| GET | List workspace users |
| Various | Webhook management for messages, calls, summaries, transcripts |
Key Data Formats
Transcript Response
Returns
dialogue[] array with speaker-attributed entries:
{ "data": { "callId": "AC...", "dialogue": [ { "content": "Hello", "start": 0.16, "end": 0.48, "identifier": "+15551234567", "userId": "US..." }, { "content": "Hi, my name is Jane", "start": 1.0, "end": 2.5, "identifier": "+15559876543", "userId": null } ] } }
Contact Fields
: firstName, lastName, company, role, emails[], phoneNumbers[]defaultFields
: Array of {key, value} pairs (keys fromcustomFields
)/contact-custom-fields- โ ๏ธ PATCH replaces entire
โ always include ALL existing fieldsdefaultFields
Custom Fields (example workspace)
(key:Property Associated
, type: string)1712532493777
(key:Address
, type: address)1700067557182
Notes
- Transcripts require call recording enabled in Quo settings
- Phone numbers in E.164 format (+1XXXXXXXXXX)
- Contacts API has no phone number search โ
,search-phone
, and--unknown
use a local cache atgather
(5-min TTL, use/tmp/quo-contacts-cache.json
to rebuild)--refresh - Voicemail endpoint returns single object (not array)
defaults to last 30 days, text only (no audio URLs or media)gather