Allianz phone and Salesforce console¶
Status: Current | Last reviewed: 2026-10-12
The Vanguard Allianz agents are connected to the DevSDO Allianz Salesforce app and the dccdev Amazon Connect number +1 833-799-5477. Insurance records remain synthetic. This configuration does not change the Macau deployment.
Producer 4873 to human Copilot 4870¶
The separate producer number +1 866-898-5617 now uses voice agent 4873 v7, startup workflow 1932 v5, synchronous handoff workflow 1933 v4, and the existing customer whisper for Copilot 4870. The numbered menu below remains a separate configuration.
- Startup initializes the actual Case and Voice Task, then upserts
Allianz_Workspace__cusing its uniqueCase_Key__c. An existing workspace's context, draft, receipt and revision survive this step. - The existing
send_case_summarytool now invokes workflow 1933 synchronously. Its Case state, verification status and policy lookup result are bound by runtime tool logic and hidden from the model's input schema. It saves the actual summary, checks that the policy belongs to the Case Contact's Producer, and commits Case verification/policy/conversation plus workspace context in one Salesforce Composite transaction. It never preconfirms illustration assumptions or resets the human's draft. end_sessionreceives the workflow's captured return attributes. Connect routes onward only forsession_escalated=true; a normal goodbye disconnects.- Allianz - Producer Support transfers to TrueServe DevSDO Salesforce
Inbound (
0685b70d-3245-4a2d-a19b-a95546816192). That flow invokes the existingtrueserve-devsdo-scv-inboundrelay to prepare the VoiceCall and explicitly execute its SCVomniFlowoperation before queueing. - The connector carries validated
SalesforceFieldsand the actualcase_idinto the precreated VoiceCall.TrueServe_DevSDO_Inboundv9 resolvesVoiceCall.DCC_CaseId__c, links the Case, sets its actual conversation ID and requests the focused Case screen pop. It does not create workspaces or set verification/policy fields. Missing Case or popup errors retain queue routing.
The SCV contact-center allowlist includes this producer number in
routing.additionalPhoneNumbers; its original primary number remains configured.
The previously direct-to-queue producer return path did not invoke Omni.
The previous Omni configuration also used a fixed Case and a policy number with
leading whitespace. Neither remains in the deployed routing path.
Incoming caller name and summary¶
Workflow 1933 resolves CustomerName, CustomerRecordId and
CustomerOrganization from the actual Case's Contact and Account. The native
SCV contact receives the person's name and Contact ID; this lookup does not
verify the caller. For David Chen's Case, the organization remains Chen
Financial Group, and the caller display is David Chen.
The Allianz-only trusrv-vanguard-allianz-salesforce-fields Lambda prefers that
Contact name over the existing sfdc-DCC_Caller_Name__c fallback. It limits
DCC_Summary__c and DCC_Caller_Name__c to their Salesforce Text(255) capacity,
with an ellipsis for truncated preview text. The full summary remains in the
original contact attributes and Case workspace. The October 12 failing call
sent 293 characters into the summary field; its VoiceCall had a null summary.
The mapper now returns a 255-character preview for that same input.
The maintained Lambda source is producer-salesforce-fields.py; its deployment
package contains that file as lambda_function.py, with handler
lambda_function.lambda_handler. Back up the deployed package and configuration,
check RevisionId before replacing code, and verify the resulting code hash and
invocation output. A caller-display correction requires only this Lambda and
the two affected nodes in workflow 1933; do not rerun the full installer or
republish agents, startup, Omni, or unrelated contact flows for it.
Contact 56a7ca41-47a4-486d-b9fe-a282b01af09d reached a representative and opened
Case 00023309. Its voice transcript requested an immediate representative
without verification, so the hidden contract details were expected. Copilot
4870 stored transcripts but withheld policy guidance for the unverified Case.
The installed Agent Assist completed its embed-ready handshake in an ordinary
fresh browser, but enabling third-party cookie restrictions reproduced a
loading failure: exchange returned 302, both session cookies were blocked, and
the iframe returned 401 without reporting ready. Surface-app now partitions
both HTTPS session cookies. The same restricted-browser check then returned
200 and reported ready. The affected user's browser settings are not known;
this establishes a reproducible failure and its correction. Caller display,
embed readiness and policy authorization remain separate checks. The native
handset's reported “Speed Dial” label still requires a live check with the new
Contact identity.
The Salesforce integration is TrueServe Dev SDO
(f28f65a9-0598-47df-8d08-77f7282a8f09), API 62.0. Composite subrequest URLs
must use that same API version. Its run-as user needs the existing
Allianz_Service_Console permissions. If fields remain invisible after access
is granted, refresh only this integration's cached OAuth token; the October 12
test required a fresh session before the new field permissions became visible.
Maintained scripts in apps/ai-manager/scripts/allianz-demo/:
handoff-install.ts prepare: revision-check and publish the workflows, then stage agent 4873.publish-agentrequires passing native verification and an unchanged draft before preflight/publication.handoff-verify.py: initialize isolated Cases, exercise verified/unverified native handoffs, and verify idempotency and preservation of request state.handoff-salesforce.py: stage the routing-only Flow from a fresh live backup. Retrieve and compare the live Flow before deploying to preserve concurrent edits.handoff-connect.py: stage the producer return branch;publishchecks drift and verifies AWS readback. It preserves startup, caller selection and whisper.handoff-scv-verify.mjs: exercise SCRT VoiceCall creation and the real Omni Flow, then clear/close its synthetic routing record.handoff-ui-verify.ts: open the persisted Case in the installed DCC app and verify that its policy loads without the missing-policy widget.
Use .devcontainer/scripts/with-env.sh for the native workflow and SCV scripts.
Private snapshots, deployment results and test evidence are under
.local-data/allianz-handoff/. October 12 automated checks passed for native
verified/unverified persistence, retries, SCV queue resolution, Case linkage and
the installed Case page. On October 12, the user reported that the live Case
popup is working, completing the outstanding screen-pop acceptance check.
The deployed AWS relay also passed a call to the live connector and its Connect
read path; the live contact-center settings returned the updated number allowlist.
Call and supervision routing¶
The ElevenLabs Samantha recording says, “Thanks for calling Allianz. Press 1 for Beneficiary Support. Press 2 for Producer Support.” Synthesis uses “AH-lee-ahnz.” The uploaded prompt is mono, 8 kHz, G.711 mu-law WAV.
- 1: Target the personal queue of Connect user
erigolden@deloitte.com. On answer, the customer whisper starts Kinesis Video Streams in both audio directions and invokes the Allianz session-start alias for Copilot 4446. A Copilot startup failure allows the human call to continue. - 2: Transfer through the existing Vanguard Chime Voice Connector to
pipeline-4444, the producer voice agent. A normal return ends the contact. - The menu retries once after an invalid or missing choice. Transfer errors play an unavailable message and end the call.
- Workflow 1847 publishes
HITL_Escalation__eto DevSDO and finishes.Record_Properties__c.RecordTypeisAllianz_Support. The activeProcess_HITL_EscalationSalesforce flow branches only those requests to Allianz Specialist Support. The queue's sole member iserigolden@trueserve.devsdo. - The Case's right-hand specialist chat uses agent 4445, bound to
Related_Conversation_Id__c. Its injection returns a human question or decision to the live voice conversation. The workflow has no response/wait node. Approval alone is not a completed illustration submission.
Salesforce retains Erik's existing TrueServeContactCenter BYO SCV Call Center and Vanguard translator. Do not add the Amazon-native SCV create-VoiceCall Lambda: this org uses the existing TrueServe adapter. The shared Connect routing profile is unchanged; the inbound flow targets Erik's personal queue.
Producer Preview caller identity¶
The separate Allianz - Producer Support flow
b566a161-89fa-4e6c-b509-97610bf1aa19 routes to published voice agent 4873.
It is the flow selected in the shared Preview link for 4873:draft; Telephony
uses the published agent behind the Connect flow, not that open draft.
The numbered menu and pipeline-4444 route above remain a separate flow.
For Salesforce transfer testing, the DCCDev Connect integration maps this
Preview flow to contact center 04vDW0000000AkAYAU and DNIS +18668985617.
Enter ANI and leave DNIS blank. Studio validates the destination before AWS
call creation and binds the resolved numbers to the returned contact ID.
The SCV relay uses that authorized binding when a browser contact has no
native phone endpoints. See Preview routing.
The October 12 failed contact 76c448ea-7c9a-4372-b6c4-eadfc4e4e90b reached
the correct inbound flow but was rejected by the old native-endpoint-only
number check. Its Case/context had saved successfully; no human queue or
Copilot session was started.
On October 9, the browser start API returned HTTP 200, but the producer flow
failed its Voice Connector transfer because $.CustomerEndpoint.Address
resolved to an empty FromUser. For example, contact
c6b2ae90-99bf-4760-be03-3fdc97a269f0 started at 12:37:57 UTC
and ended two seconds later with CONTACT_FLOW_DISCONNECT.
Browser contacts created by StartWebRTCContact have no native phone ANI.
Adding a Preview variable cannot override that Connect system field.
At 12:40:58 UTC, producer-connect-preview.py --apply published a correction
to this producer flow only. Before every producer transfer, it selects:
$.CustomerEndpoint.Addresswhen it starts with+.- Otherwise
$.Attributes.aniwhen it starts with+. - Otherwise the literal SIP identity
anonymous.
The result is stored in trueserveCallerId, and
VoiceConnector.FromUser now reads $.Attributes.trueserveCallerId.
Native phone identity takes precedence over a supplied attribute. Preview
already validates and normalizes entered ANI; this source-selection check is
not an identity-verification gate. No synthetic phone number is assigned to
blank Preview calls.
The patch preserves agent 4873, the Voice Connector, existing prompts, return
path, queue, whisper and telephone associations. It reads the live flow, rejects
an unexpected transfer configuration, saves a private backup and proposed JSON,
then checks for concurrent changes before publication and verifies the readback.
Running it without --apply only prepares the plan. Do not rerun the older
connect-flow.py --apply to repair this separate flow.
Live browser verification used the shared Preview configuration:
| Check | Evidence | Result |
|---|---|---|
| Blank ANI | Contact 8b01d2c1-8ea6-4425-ae3b-5d3b54c57ba8, conversation 0dded4b0-e1ea-5232-9831-336f25139b58 |
Agent 4873 greeted the caller; trueserveCallerId=anonymous; browser audio stayed connected until the test hung up |
| Explicit test ANI | Contact 392a1bf9-fd43-44f1-9f7b-db538542df56, conversation 68c8a5d2-63c9-5f63-a1cc-9c0770f6c505 |
+12025550123 reached Connect and the AI session; caller speech was transcribed and the agent replied |
| Actual end-session return | Subsequent live contact 64e29a0b-59c1-4a2b-82f2-4c8e793ff19e at 12:42:15 UTC |
Attribute write succeeded, transfer returned Success at 12:42:43 UTC, then Connect played “Coming out of agent studio agent” and entered the IVR menu |
Both controlled browser samples received nonzero audio with zero reported inbound packet loss. Five caller-routing tests and focused Python lint pass; the existing ten ARI attribute-writer tests also pass. The native phone branch is covered by routing tests, not a new PSTN call.
Remaining agent behavior: in the explicit-ANI sample the agent announced a
human transfer but did not invoke end_session before the test hung up after
55 seconds. Do not count that sample as successful handback. The separate live
contact above did invoke the tool and verifies the actual return mechanism.
The current flow returns to its marker and menu; it does not automatically
select a human queue based on session_escalated.
End-session contact attributes¶
For Connect calls, ARI writes user-defined contact attributes using the initial
contact ID before hanging up the AI's SIP leg. The names are flat, with no
X-Session-End- prefix:
| Tool input | Connect attribute | Flow reference |
|---|---|---|
reason |
reason, such as representative_requested |
$.Attributes.reason |
session_escalated |
session_escalated, string "true" or "false" |
$.Attributes.session_escalated |
params.summary |
summary |
$.Attributes.summary |
Another params entry |
Its key, sanitized and stringified | $.Attributes.<key> |
Contact 64e29a0b-59c1-4a2b-82f2-4c8e793ff19e contains
reason=representative_requested, session_escalated=true, and a summary
stating that the caller requested a representative before verification.
The initial session_escalated=unresolved is replaced only when the tool
supplies its final value. A spoken transfer promise alone does not write these
attributes. Direct Preview has no Connect contact to update.
Private flow snapshots, browser screenshots, media counters and AWS readbacks
are under .local-data/allianz-connect-return/. Neither the Preview API nor its
request schema changed, so no API specification regeneration is required.
Producer startup preparation¶
The producer flow starts the published agent's Start Conversation workflow before playing a recorded welcome. The callout returns after durable acceptance; Salesforce initialization continues while the audio plays. On AI startup, the same initial Connect contact ID joins that operation and reuses its result. A pending, failed or expired result never triggers a second synchronous create. The native release is agent 4873 v6 and workflow 1932 v2.
The recording uses agent 4873's ElevenLabs voice ZoiZ8fuDWInAcwPXaVeq and
eleven_v4_turbo, with “AH-lee-ahnz” in the synthesis text:
Thanks for calling Allianz producer support. We're locating your records based on the number you're calling from. This will take just a moment.
The generated audio lasts 7.36 seconds and is uploaded as mono 8 kHz G.711 mu-law WAV. The AI greeting is “Hi David! How can I help you today?” The older menu recording and the beneficiary path remain separate.
The dedicated Lambda is trusrv-vanguard-allianz-startup:live, pinned to
version 1. Its prompt is e0fa2d46-1b8a-476b-8378-0a008053ffb6.
The October 10 synthetic qualification measured 605 ms for AWS acceptance
and 122 ms for the lifecycle join after the 7.36-second welcome lead.
Initialization had completed, and a repeat join returned the identical result
from exactly one workflow run. This measures preparation and result retrieval;
it does not include Connect media setup or the agent's first generated audio.
The first qualification exposed output mappings that assumed a nested code-node
result. Version 2 returns the initializer's persisted vars._allianz_sf_*
fields directly. The earlier run and its interaction remain in history; it was
not replayed after the workflow revision changed.
The workflow runs the existing Salesforce initializer and returns
_allianz_sf_state plus its linked identifier/status fields. initiate_case
now retrieves that state without a network call. Summary submission, native
authentication and policy-access checks retain their existing behavior.
Administrative caller lookup does not verify identity.
The inspected flow had subsequently configured both nonblank caller branches
to the fixed demo number ending 3123. This change preserves that override,
the anonymous branch, menu, queue, return path and phone associations. The
Lambda uses the resolved trueserveCallerId, exactly as the Voice Connector
does, so the early request and runtime join have identical caller fingerprints.
Reproduction scripts:
producer-startup.ts inspectsaves the reviewed native configuration.producer-startup.ts recordgenerates audio from the published voice settings.producer-startup.ts installpublishes the start workflow and revised agent through native APIs and creates a server-held, expiring startup token.producer-startup-connect.py --provisioncreates the dedicated versioned Lambda, exact-instance permission, Connect association and uploaded prompt.producer-startup-qualify.pyinvokes that Lambda with a synthetic contact, allows the measured welcome lead, joins through the native lifecycle helper, and checks that retrying returns the same result from one workflow run. It creates a synthetic demonstration interaction but no phone call or message.producer-startup-connect.py --applychecks the reviewed flow for concurrent changes, publishes the two added blocks and verifies readback.
The Lambda uses the existing private VPC path to Vanguard. Its endpoint and
token are server-owned configuration, never contact attributes. Configuration,
before/after snapshots, audio and qualification receipts remain under
.local-data/allianz-startup/; secrets must not enter source or flow exports.
The dedicated API token expires January 8, 2027; rotate it through the
normal token controls and publish a new Lambda version before that date.
See shared preparation semantics.
Salesforce pages and trusted context¶
sfdc/allianz-demo contains the app-scoped Case and Voice Call pages, three-column
template, caller context, specialist request summary, official Allianz static
assets, context Apex/Flow and permissions. Maintained SCV components are staged
under unique Allianz names by salesforce.py. The user's app logo and Omni
utility are preserved.
The Voice Call page resolves its live Copilot using VendorCallKey. It does not
start another chat agent. The Case page shows the related live transcript and a
separate supervisor chat. Both use the Vanguard connection and Allianz surface
brand 89e91d54-281e-4244-8da0-41636b4de0cf.
AllianzContextController reads the actual current record with user permissions.
A related Contact takes precedence; fallback phone matching must be unique.
ANI matching never verifies identity. Supervisor policy context may be read from
the request's explicit Policy: line; that also does not grant verification.
For a beneficiary call, the representative records Allianz_Policy_Number__c
and Allianz_Verified__c through Update verified context. The
TrueServe_Context_Allianz Flow supplies JSON recordContext to native host
events. allianz_claim_context_sfdc receives the bound HostContext and requires
the actual JSON boolean recordContext.verified === true. Strings, caller
assertions and model-supplied arguments do not unlock the synthetic policy data.
Removing verification replaces the financial card with the verification state.
The beneficiary card catalog is 1.0.1, with native scoped CSS, loaded Allianz Neo fonts and SVG logo. Unknown or unverified policy states hide private fields.
Deployed resources¶
| Resource | Identifier |
|---|---|
| Connect instance, us-east-1 | 9156b961-eb34-4d3a-92ad-f770d8f8b282 |
| Reused inbound flow | b211bb3c-5872-43b9-8d33-b397c96f5882 |
| Separate producer Preview flow, voice agent 4873 | b566a161-89fa-4e6c-b509-97610bf1aa19 |
| Phone resource | 5944c0f8-5a44-4b0e-8364-273857dd8ffd |
| Customer whisper | 0c7c8716-6596-440e-8d73-a4570e4f67bf |
| Recorded prompt | da1dbede-77d7-4225-8501-408f8d40add8 |
| Session-start function alias | trusrv-dev-orch-connect-session-start:allianz-vanguard, version 5 |
| Allianz app | 06mDW000000Fij3YAC |
| Allianz Case record type | 012DW000003rwCNYAY |
| Specialist queue | 00GDW000005xrbW2AQ |
| Presence status | Allianz_Available, label Allianz - Available |
| Permission set | Allianz_Service_Console, assigned to Erik |
| Connect availability integration | ec667d5f-cb9c-4423-a6d1-0626d1c9ef72 |
The retired Triwest-benifits-coverage-Complete-agent-main-flow was renamed and
reused as Allianz - Beneficiary and Producer Support. No new telephone number
was claimed. The initial September deployment added only the customer whisper;
the separate producer flow is described above.
Published JSON exports are under
apps/connect-session-start-lambda/examples/allianz/.
Reproduction and checks¶
Task scripts live in apps/ai-manager/scripts/allianz-demo/:
| Script | Purpose |
|---|---|
ivr-recording.ts |
Generate the greeting using the tenant ElevenLabs integration |
connect-flow.py |
Inspect, or explicitly --apply, the authorized Connect resources |
producer-connect-preview.py |
Prepare or apply the caller-identity correction to the separate producer flow while preserving its existing routing |
salesforce.py |
Generate Salesforce metadata and stage maintained wrappers |
salesforce-claim-context.ts |
Bind the Copilot facts worker to Salesforce host context |
publish-connect.ts |
Publish native agents/workflow and atomic CCaaS availability |
salesforce-supervision-test.ts |
Real event → exact queue → Salesforce browser chat → voice audio |
salesforce-context-test.ts |
Real host updates, strict verification, unknown policy and revocation; --salesforce checks the actual Voice Call page |
surface-catalog-test.ts assist publish |
Build, browser-check and publish the beneficiary catalog |
preview-test.ts copilot latency-warm |
Paced stereo speech → approved Copilot cards |
Run TypeScript scripts with the repository's with-env.sh and ai-manager tsx.
AWS tooling normally uses AWS MCP. In this session its host role lacked Connect
administration access; connect-flow.py used the existing authorized dccdev
SDK profile. Credentials and before-change snapshots remain in private local
storage, never source.
Connect CreatePrompt requires an S3 source in the Connect region, or a URL
generated by GetPromptFile. An arbitrary S3 presigned URL is not interchangeable.
The installed recording uses
s3://trueserve-custom-prompts/connect/allianz/prompts/allianz-welcome.wav.
Explicitly deploy the routing Flow with Active status and verify its active
version afterward. A successful metadata deployment with Draft status leaves
the previous queue behavior running. Assert PendingServiceRouting.QueueId, not
merely Case creation. Native agent publication must include the Connect
availability integration; do not write the allow-list table directly.
The audio test must keep its 20 ms input stream running while Salesforce and
browser operations execute. Use asynchronous subprocesses and check
AudioClock.check(); a synchronous Salesforce CLI command can stop simulated
audio and falsely appear to be a silent voice-agent failure.
Private evidence is in .local-data/allianz-demo/. The September 30 warm
published-Copilot run produced 12/12 expected cards, median 399 ms and
sample p95 541 ms after approximate acoustic speech end. These timings exclude
Kinesis transport and browser paint. Native browser checks confirm loaded fonts,
logo, hidden unverified fields and no overflow at 320 px.
The completed Salesforce supervisor test created an Allianz Case and verified its exact queue in 4,040 ms, then typed into the real Case-page chat and received the spoken question in 4,471 ms. The audio stream remained paced (maximum harness lateness 6.2 ms). Synthetic Cases were closed and moved out of their queues to cancel pending test offers. Salesforce rejects direct deletion of queue-based Pending Service Routing records. Six native host-context checks passed in 762–794 ms: unverified, verified, string-valued verification rejected, restored, revoked and unknown policy. 31 Apex tests passed, including unique/ambiguous caller context, explicit verification, request-policy display and maintained surface resolution.
The actual Salesforce Voice Call page also passed: Save context → visible verified policy card took 1,938 ms, including the Salesforce write, context Flow, runtime and browser paint. Clearing the checkbox and saving removed the financial fields. The temporary Voice Call was deleted afterward. The form disables Save during its current write; tests wait for the saved verification badge before making the next edit.
Focused script TypeScript checking and lint passed (lint retains advisory
any warnings). Three Connect graph checks and five compiled workflow checks
passed. These do not replace the real phone acceptance check.
Final acceptance requires a real call with Erik logged into the Connect adapter
and Allianz - Available in Omni. Verify the offer, accepted SCV Voice Call,
matching VendorCallKey/Copilot session, both transcript channels and live cards.
The automated tests do not establish that PSTN-to-headset path.
See the operator walkthrough and agent runbook.