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:

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:

  1. Read X-Target-DNIS from the inbound call.
  2. Place an outbound call to that number.
  3. Bridge the two parties.

Two Architect specifics that cost real debugging time:

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:

  1. Open https://ai-manager.vanguard.dev.trueserve.deloitte.com/emulator.
  2. Click Translate (top right). The dial pad becomes the Dial & Translate screen.
  3. Pick your published translation agent from the Translation agent dropdown.
  4. 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

  1. Open https://ai-manager.vanguard.dev.trueserve.deloitte.com/emulator.
  2. Click Embed (top right) to open Embed configurations.
  3. 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.

  1. 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.
  2. Type your own mobile number. Punctuation and a leading + or 00 are fine.
  3. 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.
  4. Press the green Call button.
  5. 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:

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:

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