← Back to Index

Quo Webhook Setup - Resolution

Date: Feb 15, 2026
Status: βœ… RESOLVED - Webhook operational

Critical Constraint

ONLY (385) 485-5863 maps to Quan's personal phone.
NEVER use any other Quo numbers.

Current State

βœ… Working

❌ Not Working

Architecture

Quo API β†’ (webhook URL) β†’ Cloudflare Tunnel β†’ VPS:18791 β†’ OpenClaw

What Was Wrong (Minnie's Diagnosis Was Incorrect)

Minnie thought:

Actual problems:

  1. Port 18791 not exposed from Docker β†’ host (docker-compose.override.yml needed update)
  2. Existing Cloudflare tunnel gw-e3364c just needed one more ingress rule
  3. Handler had three bugs:
    • Checked for message.created event, Quo sends message.received
    • Read payload from data, actual path is data.object
    • Looked for text field, Quo uses body

How It Was Fixed (By Quan on Host)

1. Docker Port Mapping

# docker-compose.override.yml
ports:
  - "18791:18791"

Recreated container with: docker-compose up -d --force-recreate

2. Cloudflare Tunnel Config
Used existing tunnel gw-e3364c, added:

3. Systemd Service
Created /etc/systemd/system/quo-webhook.service (handler runs as service, survives reboots)

4. Handler Bugs
Fixed quo-webhook-handler-v2.py event parsing to match Quo's actual webhook payload format.

Result

βœ… SMS to (385) 485-5863 β†’ Quo webhook β†’ Telegram (working)
⏸️ Telegram β†’ SMS reply (manual via quo-messaging.py, not auto-wired yet)

Debugging Commands

# Check webhook handler status
ps aux | grep quo-webhook

# Test webhook handler locally
curl http://localhost:18791/

# Check Cloudflare tunnel status
cloudflared tunnel list

# View webhook logs
tail -f /var/log/quo-webhook.log

Phone Numbers (Reference)


Session notes as we debug together