Setting up and testing Dial & Translate¶
Status: Current | Last reviewed: 2026-08-05
This is the step-by-step for turning Dial & Translate on and proving it works — first inside AI Manager, then embedded in someone else's page. For what the finished thing does, see Dial & Translate embeds.
Budget about 15 minutes, most of it in Genesys.
Before you start¶
You need:
- Genesys: an org where you can edit an Architect flow, plus a routing number (a number in your Genesys org you can point a flow at).
- A real phone you can call, with a person who speaks the second language — or just call your own mobile and talk to yourself in both languages to prove the audio path.
- AI Manager: the
adminordeveloperrole (you need Manage Configuration to edit embed configs).
Live Translation places a real outbound PSTN call on your Genesys trunk. Every dial costs money and rings a real phone. Use your own number while testing.
Step 1 — Prepare the Genesys side¶
This is the part most likely to be missing, and the part TrueServe can't do for you.
1a. Enable consult dial-out on the integration¶
In AI Manager, go to Settings → Integrations and open your Genesys integration. Scroll to the External Consults card, below SIP / AudioHook / API:
| Field | Set it to |
|---|---|
| Enable External Consults | on |
| Routing Number | the number in your Genesys org whose flow will place the outbound call |
| BYOC Trunk FQDN | your BYOC trunk, on the SIP card (already set in most deployments; only needed if you run more than one tenant) |
Routing Number only appears after you switch Enable External Consults on. Enable External Consults itself is always shown — it doesn't depend on which Genesys modes you've enabled.
Save. If this integration isn't active, or either of the first two fields is blank, every dial fails with "No Genesys integration with External Consults enabled…".
If you don't see an External Consults card at all, your AI Manager predates the fix for it (the card existed in the configuration schema but the Genesys form didn't render it). Reload after updating; there's nothing to enable.
1b. Point an Architect flow at that number¶
TrueServe calls your Routing Number and passes the number the viewer typed as the SIP header X-Target-DNIS. Your Architect flow reads that header and dials it.
If you already run External Consult / warm transfer through Genesys, this flow exists and you can skip ahead — it's the same mechanism and the same header.
If not, the flow needs to:
- Read
X-Target-DNISfrom the inbound call. - Place an outbound call to that number.
- Bridge the two parties.
Two Architect specifics that cost real debugging time:
- The Transfer to Number action must NOT use Release Link Transfer. TrueServe taps the call audio on the leg you answered, so Genesys has to stay bridged in the media path for the whole call. With release-link on, Genesys drops out once the transfer completes, the audio on our leg stops, and TrueServe ends the call about 10 seconds later (
rtp_timeout) — it looks like "the call connects then dies", intermittently. - The header names in the Get SIP Headers result JSON are lowercase (
x-target-dnis,x-routing-type), regardless of how they're spelled on the wire or in the action's Header Names list. Read them by lowercase name, not by position — position breaks becauseX-Queue-Nameisn't sent on this path.
X-Routing-Type: external is also sent, so one flow can serve several routing behaviours if you branch on it.
This is the single most common reason a call "connects but nobody picks up": TrueServe reached Genesys fine, and the flow never dialled out. Test the flow in Genesys on its own before blaming the embed.
Step 2 — Publish a translation agent¶
Dial & Translate needs an agent whose type is Translation with both directions configured, and it has to be published — the embed always runs the published version.
Create one via Agents → New (type Translation), configure the incoming and outgoing flows, then Publish. See Creating an agent.
The languages you set on the agent's stages are its defaults. The dial screen's dropdowns override them per call, so one published agent covers every language pair you want to demo — you don't need one agent per pair.
Only agents of type Translation are accepted. If your agent doesn't appear in the picker in step 3, it's the wrong type, or it isn't in this tenant.
Publishing isn't currently checked when you save the embed config, so an unpublished agent saves fine and then fails when someone dials. Publish it.
Quick test without any embed configuration¶
Once steps 1 and 2 are done you can already place a translated call, before creating any embed config:
- Open https://ai-manager.vanguard.dev.trueserve.deloitte.com/emulator.
- Click Translate (top right). The dial pad becomes the Dial & Translate screen.
- Pick your published translation agent from the Translation agent dropdown.
- Type your own mobile number, set My language and Their language (both or neither), and press Call.
This uses your signed-in session — no token, origin, or embed config involved — so it's the fastest way to prove the Genesys side (steps 1a/1b) and the agent (step 2) work. Only agents with a published version are accepted here; an unpublished one is rejected with a message when you dial.
Limits: 5 dials per minute per user. Click Translate again to return to the normal dialer.
Steps 3–5 below are only needed when you want the phone embedded somewhere.
Step 3 — Create the embed configuration¶
- Open https://ai-manager.vanguard.dev.trueserve.deloitte.com/emulator.
- Click Embed (top right) to open Embed configurations.
- Click New and fill in:
| Field | Value |
|---|---|
| Name | anything — Dial & Translate demo |
| Transport | SIP |
| SIP integration | your Genesys integration |
| Dial mode | Dial & Translate (viewer dials, live translation) |
| Translation agent | the agent from step 2 |
| Default "my language" / Default "their language" | optional — what the dropdowns start on |
| Selectable languages | optional, comma separated (en-US, es-ES, fr-FR) — up to 24 |
| Allowed origins | see the note below — include the AI Manager origin itself |
Dial mode only appears once Transport is SIP. Once you pick Dial & Translate, the Destination field disappears (the viewer supplies it) and so does Auto-connect (there's nothing to dial on load).
Allowed origins — the one that catches people¶
allowed_origins does double duty: it lists the sites permitted to embed the phone, and it gates the built-in preview. The preview mints a token for the current origin, so if AI Manager's own origin isn't listed you get:
Preview requires the current origin to be in allowed_origins
For a config you want to test in-app and ship externally, list both:
https://ai-manager.vanguard.dev.trueserve.deloitte.com
https://your-demo-site.example
Leave Selectable languages blank to get a curated list of 19 common languages. If you do fill it in, any default language you set must be one of the listed ones, or the save is rejected.
Step 4 — Test it inside AI Manager¶
Still in Embed configurations, click your config in the list. The right-hand pane shows Preview & snippets with a live phone.
That preview is the real embed — same route, same token exchange, same dial-grant call as an external site. It is not a mock.
- The phone opens on the dial pad with two language dropdowns underneath. If you see the ordinary dialer with an integration picker instead, the config isn't in Dial & Translate mode.
- Type your own mobile number. Punctuation and a leading
+or00are fine. - Set My language and Their language. Set both or neither — a single one is ignored and the call quietly runs on the agent's own languages.
- Press the green Call button.
- Your phone rings. Answer it, and talk. Each side should hear the other translated.
Nothing to install, and no external site needed to get this far. If you'd rather test in a full browser tab than the drawer, use Copy shareable URL and open it — same thing, minted for 1 hour.
What each failure means¶
| What you see | What to fix |
|---|---|
| Preview pane: "Preview requires the current origin to be in allowed_origins" | Add the AI Manager origin to the config (step 3). |
| "No Genesys integration with External Consults enabled…" | Step 1a — the integration needs both the toggle and a Routing Number, and must be active. |
| "This embed is not configured for Dial & Translate" | The config is WebRTC, or its dial mode is still Fixed destination. |
| "Enter a valid phone number" | Include the country code. |
| "Embed session expired; reload the page" | The preview token lasts 5 minutes. Reselect the config to re-mint. |
| "Too many dial attempts; wait a moment and try again" | 5 dials per minute per config. Wait. |
| No translation agents in the picker | No published agent of type Translation in this tenant (step 2). |
| Phone never rings | Genesys reached, flow didn't dial. Step 1b. |
| Both parties connected, no translation | Only one language was set, or the agent's own languages are in use. Set both dropdowns. |
Step 5 — Test it embedded in an external system¶
An external page never mints its own token. Its backend asks AI Manager for one, and the browser only ever sees the short-lived result.
The quickest honest test¶
In Embed configurations, select your config and click Copy shareable URL. Paste it into an iframe on the external page:
<iframe src="PASTE_THE_SHAREABLE_URL_HERE"
allow="microphone"
style="width:420px;height:860px;border:0"></iframe>
Two requirements, or you'll get a blank frame or a dead microphone:
- The page's origin must be in the config's Allowed origins.
allow="microphone"is mandatory, and the page must be HTTPS (browsers refuse microphone access otherwise).
That URL is a one-hour token, so it's right for a demo and wrong for production.
The production shape¶
For anything lasting, the host page loads the phone element and its backend mints the token per page load:
<script src="https://ai-manager.vanguard.dev.trueserve.deloitte.com/embed/trueserve-phone.js"></script>
<trueserve-phone id="phone"
iframe-url="https://ai-manager.vanguard.dev.trueserve.deloitte.com/embed/phone?t=MINT_TOKEN">
</trueserve-phone>
The host's backend gets MINT_TOKEN from:
POST https://ai-manager.vanguard.dev.trueserve.deloitte.com/api/embed/mint-session
Authorization: Bearer tsf_<token with embed:mint>
Content-Type: application/json
{ "emulatorConfigId": "<your config id>",
"audienceOrigin": "https://your-demo-site.example" }
The Copy HTML snippet button in the drawer generates this for your specific config, with the ids filled in. Hand that to whoever owns the host page.
Never put a tsf_ token in browser code. It's a tenant-wide credential; the minted embed token is the thing that's safe to ship, and it's scoped to one config, one origin, and one hour.
Who can use the finished embed¶
Viewers do not need AI Manager accounts — the embed token their host page provides is the authorization. What holds the line instead:
- The token is scoped to one config and one origin, and expires.
- The config must have explicitly opted into Dial & Translate.
- The number the viewer types is only ever passed to your Architect flow as data. The call TrueServe places always goes to your Routing Number, so a viewer cannot dial anywhere your flow won't dial.
- 5 dials per minute per config.
- The Active switch on the config is an immediate kill-switch.
Turning it off¶
Switch the config's Active toggle off. New dials stop immediately and the embed stops loading within about a minute. The Genesys integration and the agent are untouched, so you can switch it back on without redoing anything.
See also¶
- Dial & Translate embeds — what the viewer sees
- Embedding a surface — embed tokens, origins, and clients generally
- Creating an agent
- Adding an integration
- Salesforce Live Translation — the same translation on a CRM softphone