Add app credentials, account-scoped idempotency and per-app terminal notifications. Consolidate the unreleased migration baseline, preserve rule descriptions as AI context, and regenerate provider contracts with regression coverage.
54 lines
2.5 KiB
JSON
54 lines
2.5 KiB
JSON
{
|
|
"request_id": "f81c7c4e-a92a-4b19-8d7a-3a5c08eb4e6e",
|
|
"account_id": "3",
|
|
"subject_ref": "mock-lead-001",
|
|
"snapshot": {
|
|
"version": "1.0.0",
|
|
"scope": "linked_contact_history",
|
|
"captured_at": "2026-01-01T12:00:00Z",
|
|
"lead_profile": {
|
|
"ems_lead_id": "mock-lead-001",
|
|
"name": "Nguyen Minh An",
|
|
"phone": "+84000000001",
|
|
"email": "an@example.invalid",
|
|
"status": "new",
|
|
"custom_fields": {"region": "north", "program_interest": "data science"}
|
|
},
|
|
"conversations": [
|
|
{
|
|
"conversation_id": "mock-conversation-001",
|
|
"channel": "webchat",
|
|
"assigned_agent_id": "mock-agent-01",
|
|
"messages": [
|
|
{"message_id": "mock-message-001", "sender_type": "contact", "content": "I am interested in the data science program.", "sent_at": "2025-12-31T10:00:00Z"},
|
|
{"message_id": "mock-message-002", "sender_type": "agent", "content": "The next cohort starts in March.", "sent_at": "2025-12-31T10:05:00Z"},
|
|
{"message_id": "mock-message-003", "sender_type": "contact", "content": "Please send me the application requirements.", "sent_at": "2025-12-31T10:10:00Z"}
|
|
]
|
|
},
|
|
{
|
|
"conversation_id": "mock-conversation-002",
|
|
"channel": "email",
|
|
"assigned_agent_id": "mock-agent-02",
|
|
"messages": [
|
|
{"message_id": "mock-message-004", "sender_type": "agent", "content": "I have sent the program brochure.", "sent_at": "2025-12-31T11:00:00Z"},
|
|
{"message_id": "mock-message-005", "sender_type": "contact", "content": "Thank you, I will review it today.", "sent_at": "2025-12-31T11:15:00Z"}
|
|
]
|
|
}
|
|
],
|
|
"identity_context": {"match_quality": "phone_and_email", "contact_id": "mock-contact-001", "details": {"source": "local_mock_fixture"}},
|
|
"trigger_metadata": {"trigger_type": "manual_omni", "trigger_conversation_id": "mock-conversation-002", "actor_id": "mock-user-01"}
|
|
},
|
|
"scoring_config": {
|
|
"version": "mock-omni-v1",
|
|
"rules": [
|
|
{"id": "region-north", "field": "custom_fields.region", "operator": "eq", "value": "north", "points": 25},
|
|
{"id": "program-interest", "field": "custom_fields.program_interest", "operator": "contains", "value": "data", "points": 35},
|
|
{"id": "conversation-count", "field": "metrics.conversation_count", "operator": "eq", "value": 2, "points": 10},
|
|
{"id": "contact-message-count", "field": "metrics.contact_message_count", "operator": "eq", "value": 3, "points": 10}
|
|
],
|
|
"rule_weight": 1,
|
|
"ai_weight": 0
|
|
},
|
|
"ai_profile": "medium"
|
|
}
|