Add voice name flow controls and analytics

This commit is contained in:
Yera All
2026-04-05 03:26:18 +05:00
parent d15fcf7129
commit d959c2b2f0
31 changed files with 6410 additions and 152 deletions
+26 -67
View File
@@ -49,7 +49,12 @@ def build_seed_plan(tag: str) -> dict[str, Any]:
}
def _demo_ivr_flow_document(plan: dict[str, Any], *, sales_queue_id: str, support_queue_id: str) -> dict[str, Any]:
def _demo_ivr_flow_document(
plan: dict[str, Any],
*,
voice_start_kz_queue_id: str,
voice_start_ru_queue_id: str,
) -> dict[str, Any]:
return {
"nodes": [
{
@@ -71,72 +76,26 @@ def _demo_ivr_flow_document(plan: dict[str, Any], *, sales_queue_id: str, suppor
"invalid_target_node_id": "root",
"no_input_target_node_id": "root",
"options": [
{"digit": "1", "target_node_id": "menu_kz"},
{"digit": "2", "target_node_id": "menu_ru"},
{"digit": "1", "target_node_id": "voice_start_kz"},
{"digit": "2", "target_node_id": "voice_start_ru"},
],
},
{
"node_id": "menu_ru",
"prompt_text": plan["ivr_ru_menu_prompt"],
"prompt_audio_key": "ivr/demo-menu-ru",
"is_terminal": False,
"invalid_target_node_id": "menu_ru",
"no_input_target_node_id": "menu_ru",
"options": [
{"digit": "1", "target_node_id": "sales_ru"},
{"digit": "2", "target_node_id": "support_ru"},
],
},
{
"node_id": "menu_kz",
"prompt_text": plan["ivr_kz_menu_prompt"],
"prompt_audio_key": "ivr/demo-menu-kz",
"is_terminal": False,
"invalid_target_node_id": "menu_kz",
"no_input_target_node_id": "menu_kz",
"options": [
{"digit": "1", "target_node_id": "sales_kz"},
{"digit": "2", "target_node_id": "support_kz"},
],
},
{
"node_id": "sales_ru",
"prompt_text": "Переводим в отдел продаж.",
"prompt_audio_key": "ivr/demo-sales-ru",
"node_id": "voice_start_ru",
"prompt_text": "Передаем звонок в русскоязычный стартовый voice-сценарий.",
"is_terminal": True,
"outcome_code": "sales_route_ru",
"resolved_queue_id": sales_queue_id,
"resolved_queue_code": "ivr_sales_ai_ru",
"outcome_code": "voice_start_ru",
"resolved_queue_id": voice_start_ru_queue_id,
"resolved_queue_code": "voice_start_ru",
"options": [],
},
{
"node_id": "support_ru",
"prompt_text": "Переводим в службу поддержки.",
"prompt_audio_key": "ivr/demo-support-ru",
"node_id": "voice_start_kz",
"prompt_text": "Қоңырауды қазақ тіліндегі бастапқы voice-сценарийге өткізіп жатырмыз.",
"is_terminal": True,
"outcome_code": "support_route_ru",
"resolved_queue_id": support_queue_id,
"resolved_queue_code": "ivr_support_ai_ru",
"options": [],
},
{
"node_id": "sales_kz",
"prompt_text": "Сату бөліміне қосып жатырмыз.",
"prompt_audio_key": "ivr/demo-sales-kz",
"is_terminal": True,
"outcome_code": "sales_route_kz",
"resolved_queue_id": sales_queue_id,
"resolved_queue_code": "ivr_sales_ai_kz",
"options": [],
},
{
"node_id": "support_kz",
"prompt_text": "Қолдау қызметіне қосып жатырмыз.",
"prompt_audio_key": "ivr/demo-support-kz",
"is_terminal": True,
"outcome_code": "support_route_kz",
"resolved_queue_id": support_queue_id,
"resolved_queue_code": "ivr_support_ai_kz",
"outcome_code": "voice_start_kz",
"resolved_queue_id": voice_start_kz_queue_id,
"resolved_queue_code": "voice_start_kz",
"options": [],
},
]
@@ -216,28 +175,28 @@ def seed_demo(base_url: str) -> dict[str, Any]:
"/proxy/routing/queues",
headers=admin,
json={
"name": "IVR Sales Queue",
"description": "Prepared automatically for IVR routing demo",
"name": "Voice Start KZ Queue",
"description": "Prepared automatically for voice-start routing demo",
"rules": [
{"channel": "voice", "priority": 3, "strategy": "round_robin", "sla_seconds": 25},
],
},
)
_raise_for_status(sales_queue, "sales queue create")
_raise_for_status(sales_queue, "voice_start_kz queue create")
sales_queue_id = sales_queue.json()["queue_id"]
support_queue = client.post(
"/proxy/routing/queues",
headers=admin,
json={
"name": "IVR Support Queue",
"description": "Prepared automatically for IVR routing demo",
"name": "Voice Start RU Queue",
"description": "Prepared automatically for voice-start routing demo",
"rules": [
{"channel": "voice", "priority": 3, "strategy": "round_robin", "sla_seconds": 35},
],
},
)
_raise_for_status(support_queue, "support queue create")
_raise_for_status(support_queue, "voice_start_ru queue create")
support_queue_id = support_queue.json()["queue_id"]
customer = client.post(
@@ -351,8 +310,8 @@ def seed_demo(base_url: str) -> dict[str, Any]:
"entry_node_id": "root",
"flow_json": _demo_ivr_flow_document(
plan,
sales_queue_id=sales_queue_id,
support_queue_id=support_queue_id,
voice_start_kz_queue_id=sales_queue_id,
voice_start_ru_queue_id=support_queue_id,
),
"is_active": True,
},