Skip to content

Allianz Producer Services self-service v2

Status: Current | Last reviewed: 2026-10-09

Agent 4873 — Allianz Life Producer Services implements the self-service portion of Allianz Script v2.docx, ending at the representative handoff. Version 4 is published in the current workspace environment, with catalogue allianz-self-service-v2 1.0.2. It uses the published 4463 v33 architecture: Deepgram Flux, OpenAI Responses (gpt-5.4-2026-03-05, reasoning effort none) and ElevenLabs HTTP Streaming. The reference agent's voice, speech settings and turn control are reused; its Clearway tools, patient prompts and lifecycle workflows are not copied.

The human-assisted death-benefit explanation, recurring illustration, voice enhancement and signature reminder remain in the producer workspace. This change does not publish or alter agent 4870, agent 4463, the old 4444 demo, or Connect routing.

Source and tools

The script source hash is d0094cfbfc91c552aa6d981dc0d3b1662ec7b279d3072f4bea8ecca4b9143937. The executable self_service_fixtures.py supplies the policy data and both card payloads. October 12 and November 14, 2026 are authored demonstration dates; October 12 is still in the future relative to the October 9 implementation/test date. No carrier valuation is retrieved.

Field Authored value
Producer / contract owner David Chen / Helen Carter
Contract VA-5830194, variable annuity
Contract Value, as of October 12 $184,320.14
Estimated full withdrawal $181,555.34 after charge, before tax withholding
Withdrawal charge $2,764.80, derived from the two supplied values
November 14 anniversary Charge rate changes from 5% to 4%
Estimated charge saving $552.96, assuming no additional activity
Free withdrawal privilege this contract year Up to $13,824 without a withdrawal charge

Both spoken values and written cards carry the Good Order and market-performance qualifications. The source's charge rate is not multiplied by total Contract Value; the script does not supply that charge basis. Charge-free does not mean tax-free.

allianz_policy_snapshot_v2 is an executable inline Python tool. The stage's availability rule and the tool's own context.vars check require native customer_auth_status == 'verified'. The model cannot supply a verification flag. Unknown contracts return no protected fields. Producer authorization is a synthetic demo fixture, not a production identity-to-contract entitlement service.

The existing initiate_case and Salesforce transport, session-state and response-handling code are retained. send_case_summary now posts escaped HTML containing the actual conversation summary, replacing the old fixed HTML that claimed successful verification and discussed options on every call. The same factual text accompanies the terminal handoff. Native audio tests isolate external operations with tool-owned mocks. The summary tool's returned object is captured as allianz_end_session_params and bound directly into end_session.params; this preserves IDs, error statuses and the factual summary without model reconstruction. The runtime supports this captured object, although the authoring validator warns that it is undeclared: authored variable declarations currently support scalar/list types only. Do not misdeclare it as a string.

self_service_summary.py renders the summary. self_service_summary_patch.py changes only the retained tool's CaseSummary payload and removes the fixed HTML. It reads private tool source through stdin, checks the expected expression, and is idempotent. Connection details remain outside Git.

Customer screens

The dedicated catalogue allianz-self-service-v2 preserves the supplied phone simulator's Allianz typography, blue, contract header, amount treatment and secure footer. It adds:

  • ContractSnapshotV2: current contract value, charge, full-withdrawal estimate and complete qualifications.
  • WithdrawalOptionsV2: anniversary rates/saving, free withdrawal privilege, qualifications and Speak to a representative.

The button emits request_representative once and disables after activation. It requests assistance; it does not claim that a human has answered. Unknown or unverified card states hide protected values. The old producer catalogue is unchanged, so other demos retain their existing components.

Sources live under apps/catalog-builder/catalogs/tenant/allianz-self-service-v2. The installer copies them to the native catalogue workspace, publishes that dedicated catalogue and pins its concrete version into 4873's draft.

Authentication and transfer boundaries

Native messaging consent is required before sending the verification link. The prompt asks once, waits, and reuses consent for visuals. Caller speech such as “I did Face ID” cannot establish verification.

The current platform deliberately uses separate share-code sessions for verification and the visual companion. The script's single verification/chat link is not implemented by this agent change. The agent follows the actual tool result and never promises the same link. See customer authentication. The evaluator's attached visual client suppresses a chat SMS; that is not proof of same-link phone behavior.

A human request immediately initiates summary saving and one terminal end_session with session_escalated=true. Summary errors must not trap the caller or cause uncertain write retries. No illustration or asynchronous specialist-review workflow is attached to this self-service agent.

The test verifies the terminal transfer signal and its context. Actual carrier SMS, physical Face ID, downstream Connect queue arrival and context displayed in a connected Salesforce representative session are separate integration boundaries. No live withdrawal or insurer illustration is executed.

Verification

Earlier audio runs exposed missing visual calls, ambiguous Producer of Record wording and disclosure of the default record after an unknown-contract request. The prompt now requires both visual calls, identifies David as the producer, and retrieves all client identifiers from the successful tool result. Runs also exposed a caller-simulator error after transfer; its completion instruction was corrected without relaxing the required terminal transfer check. Failed runs remain in the evaluation history.

The revised eight-case suite passed at 100% in every case across batches 59bbc375-1b5a-497b-be02-a4b0c819a7f2 and 2671d364-1a4d-48b0-873c-5e70491d74c5. The final full suite, 597fa173-40d2-4534-929a-c345c837e88d, includes the Salesforce summary correction and passed 8/8 cases:

Case Score Conversation
Values, options and representative handoff 100% be4d2b11-4bcb-4fd5-b12b-e63dd6bb17d7
Messaging declined 95% 7bda75ca-4411-4568-ac49-8de83fff0f3e
Failed verification 99% b8d131d6-26fd-4103-8296-56b9878fa865
Policy source unavailable 100% 1fecd725-84e9-4334-b9fb-3b35b7ad4cc3
Immediate representative request 100% 2a2c6f61-8665-4049-aae3-0d63f028ed81
Unknown contract 94% 4c889937-74c6-46e5-9370-35da46d50db9
Recap, tax clarification and normal goodbye 99% eeb57597-888d-4ecc-b31e-eca32dfa744d
Summary failure still transfers 100% 55f4bada-0ea4-4987-8fe7-52502b404438

The evaluator applied the existing proactive-options goal to the declined verification and unknown-contract cases. The implementation intentionally withholds those contract-specific facts without authorized data; these minor notes and original scores are retained. The failed-verification run also records a handled authentication-status tool error: no protected lookup followed, and the requested transfer completed. The recap run has no reported issue despite its 99% score. A passing rehearsal is not a measured production reliability percentage.

Independent archived-event assertions pass for all eight runs: exact card payloads, no protected lookup on unverified/direct-transfer paths, no protected cards or balances on denied/unavailable paths, one terminal event, correct transfer flags, and exact preservation of the returned handoff attributes. Publication re-pinned the tested configuration, passed native preflight and read back the identical published pipeline. Published-version preflight also passes. The full-suite target hash is 65f2db4c6240870271b10beb70200f43a004e2c56fc4cd8e0c46f00c895ca7f2.

Ten Python unit tests check verification bypass attempts, unknown and selected contracts, exact amounts/qualifications, independent result copies, truthful summary rendering, HTML escaping, and preservation of transport during the idempotent source patch. Three native code-executor runs independently return verification_required, not_authorized and found; network access is disabled.

Checks against the patched real Salesforce tool, with intercepted HTTP, confirm that its payload contains only the supplied conversation context, retains the current interaction ID, suppresses duplicate writes and returns truthful summary/error context after a timeout. No external write was made.

The published native catalogue passes real Surface App iframe checks at 1100, 390 and 320 pixels: exact amounts, loaded regular/bold Allianz fonts, no horizontal overflow, keyboard focus, one button callback, duplicate suppression and hiding values in the unverified state. Catalog preview intentionally suppresses live action dispatch; this browser check is not an end-to-end button-to-queue test.

The catalogue and authoring scripts pass TypeScript checks. Script lint has no errors and one explicit-any warning for the stored provider-config adapter. Relative documentation links, navigation entries and whitespace checks pass.

Private configurations, transcripts, screenshots and evaluation evidence are stored in .local-data/allianz-self-service-v2/. Keep those outside Git.

Repeat and publish

Run from the repository root:

python3 -m unittest discover -s apps/ai-manager/scripts/allianz-demo -p 'test_self_service_*.py'
python3 apps/ai-manager/scripts/allianz-demo/self-service-catalog.py
bash .devcontainer/scripts/with-env.sh apps/ai-manager/node_modules/.bin/tsx --tsconfig apps/ai-manager/tsconfig.json apps/ai-manager/scripts/allianz-demo/self-service-install.ts
bash .devcontainer/scripts/with-env.sh apps/ai-manager/node_modules/.bin/tsx --tsconfig apps/ai-manager/tsconfig.json apps/ai-manager/scripts/allianz-demo/self-service-browser-test.ts
bash .devcontainer/scripts/with-env.sh apps/ai-manager/node_modules/.bin/tsx --tsconfig apps/ai-manager/tsconfig.json apps/ai-manager/scripts/allianz-demo/self-service-tests.ts start all

Pass the returned batch UUID to self-service-tests.ts to export its results. The eight saved cases cover the full script, messaging refusal, failed verification, unavailable source, immediate human request, unknown contract, recap without ending, and summary failure during transfer. Their data fixtures remain separate from the caller: the caller never teaches the expected values.

Run self-service-evidence.ts BATCH_UUID [RETRY_BATCH_UUID ...] on exported results to independently check card payloads, privacy branches, one terminal event, transfer flags and exact preservation of the tool receipt.

self-service-publish.ts BATCH_UUID [RETRY_BATCH_UUID ...] requires completed, passing latest runs of all eight cases and checks that their pinned configuration still matches the draft. Evaluation hashes include the selected cases and rubric, so the script re-pins each batch against its own specification. It then runs native preflight, uses the Studio publication route and reads back the published pipeline. It leaves CCaaS availability unchanged. An existing call retains its starting version; start a new call for a new publication.