Prerequisites
- A signed-in browser app with an existing chat UI and backend.
- An active widget deployment in ConverSimple.
- One public HTTPS reply-hook URL and your SaaS page’s exact HTTPS origin.
- A server-side place to store the per-deployment shared secret. Never put it in browser code.
Integrate
- Open the deployment detail page. Under Existing Concierge Voice, enter the hook URL and SaaS origin, save, and copy the newly displayed secret. It is shown once.
- On your backend, add a signed-in endpoint that mints a short-lived HS256 identity token. Use the deployment ID as
iss,conversimple-voiceasaud, your stable user ID assub, andiat/expno more than five minutes apart. Identity contract. - Add
https://app.conversimple.com/assets/concierge_voice.jsto the SaaS page and connect it to your existing microphone and stop buttons:
- At your hook, verify
X-Conversimple-Signatureagainst the raw request bytes. Useturn_idas an idempotency key. For a fast answer, return the sameconversation_idandturn_idwithreply_textin HTTP 200. Reply contract. - If your answer takes longer, return
status: "accepted"promptly, then POST one signed reply to the callback URL within two minutes. Deferred reply.
What success looks like
The chat UI receivesfinal_transcript, then reply_text. For WebSocket playback, playback_started and playback_finished describe the browser audio path; they cannot prove the listener heard sound. Test speech on your actual host origin with a real microphone and speaker. Browser events.
Limits and troubleshooting
- The hook has a 15-second server timeout; acknowledge long-running work well before then. A deferred answer has a two-minute window.
- Replies are complete text. Token-by-token reply streaming is not supported.
- A browser disconnection sends a best-effort signed event for a pending turn; a late callback receives HTTP 410 if the conversation has ended.
- Microphone permission, autoplay, ICE, and output-device behavior still matter. Browser voice troubleshooting and reply troubleshooting.