Docs
Dorna Chats is a separate product from Dorna Forms and Dorna Ads Manager. Later we can optionally forward conversations into Dorna’s lead inbox — that is not built here.
Two hostnames
- chats.dorna.dev — public website and API. Host the SDK and conversation endpoints. Map this name to Cloud Run.
- notifications.dorna.dev — mail identity only. Emails are sent from
<chats@notifications.dorna.dev>. Do not point this name at the app.
Paste the snippet
<script
src="https://chats.dorna.dev/v1/sdk.js"
data-site-key="pk_…"
data-inbox="inbox_…"
></script>Sites console
Open /admin to add, change, or remove sites. Sign in with Google; only allowlisted owner emails can get in. Creating a site also creates a Website chat inbox and a public key for the snippet.
Create a site
curl -s https://chats.dorna.dev/v1/admin/sites \
-H "authorization: Bearer $CHATS_ADMIN_KEY" \
-H "content-type: application/json" \
-d '{
"name": "Dorna Studio",
"allowed_origins": ["https://studio.dorna.dev"],
"notify_emails": ["hello@studio.dorna.dev"]
}'Then create an inbox under that site. Modes: hybrid (default), ai, human.
Public API
- POST /v1/conversations
- POST /v1/conversations/:id/messages
- GET /v1/conversations/:id/messages
- POST /v1/conversations/:id/handoff
- GET /v1/sdk.js
- POST /v1/webhooks/resend
- GET /health
DNS for Resend
Reuse the domain already verified for Forms: notifications.dorna.dev. Add the chats@ sender. SPF, DKIM, and DMARC stay on that name. Keep chats.dorna.dev DNS-only on Cloudflare so Google can issue the Cloud Run certificate.
Cloud Run
us-central1, min instances 0, max 2, 512Mi, 1 CPU. Secrets in Secret Manager: CHAT_AI_API_KEY, CHAT_AI_MODEL, RESEND_API_KEY, TURNSTILE_SECRET, TURNSTILE_SITE_KEY, RESEND_WEBHOOK_SECRET. Firestore via the service's attached service account. All secrets are required; the service fails closed when one is missing.