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.