Openclaw-config quo

Quo ๐Ÿ“ž

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.md
source 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

EndpointMethodDescription
/v1/phone-numbers
GETList phone numbers
/v1/conversations
GETList conversations (filterable)
/v1/messages
GETList messages for a conversation
/v1/messages
POSTSend a text message
/v1/messages/{id}
GETGet message by ID
/v1/calls
GETList calls (with date filters)
/v1/calls/{callId}
GETGet call by ID
/v1/call-summaries/{callId}
GETAI-generated call summary
/v1/call-transcripts/{id}
GETFull dialogue transcript with speaker attribution
/v1/call-recordings/{callId}
GETRecording URLs (MP3)
/v1/call-voicemails/{callId}
GETVoicemail + transcript
/v1/contacts
GETList contacts (paginated)
/v1/contacts
POSTCreate a contact
/v1/contacts/{id}
GETGet contact by ID
/v1/contacts/{id}
PATCHUpdate contact (replaces entire defaultFields!)
/v1/contacts/{id}
DELETEDelete a contact
/v1/contact-custom-fields
GETList custom contact fields
/v1/users
GETList workspace users
/v1/webhooks/*
VariousWebhook 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

  • defaultFields
    : firstName, lastName, company, role, emails[], phoneNumbers[]
  • customFields
    : Array of {key, value} pairs (keys from
    /contact-custom-fields
    )
  • โš ๏ธ PATCH replaces entire
    defaultFields
    โ€” always include ALL existing fields

Custom Fields (example workspace)

  • Property Associated
    (key:
    1712532493777
    , type: string)
  • Address
    (key:
    1700067557182
    , type: address)

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
    ,
    --unknown
    , and
    gather
    use a local cache at
    /tmp/quo-contacts-cache.json
    (5-min TTL, use
    --refresh
    to rebuild)
  • Voicemail endpoint returns single object (not array)
  • gather
    defaults to last 30 days, text only (no audio URLs or media)