# Runbook - Track 11 Live Operator Call Control Use this runbook to verify the accepted call-control path introduced in Track 11. For the current operator UX and active/recent call behavior, use `docs/runbooks/track12-operator-voice-ux.md`. ## Preconditions - Track 9 bridge works: `/proxy/asterisk-bridge/asterisk/status` returns `ami_connected=true` - operator SIP extensions exist in Asterisk: `2001`, `2002` - bridge env includes: - `ASTERISK_CALLCONTROL_ENABLED=1` - `ASTERISK_OPERATOR_EXTENSION_MAP_JSON` - `ASTERISK_TRANSFER_TARGET_MAP_JSON` ## 1) Start the QA stack ```powershell powershell -ExecutionPolicy Bypass -File scripts\start_track9_qa.ps1 ``` Verify: ```powershell curl http://127.0.0.1:8080/proxy/asterisk-bridge/asterisk/status ``` ## 2) Real call scenario 1. Register caller softphone `1001`. 2. Register operator softphone `2001`. 3. Make call `1001 -> 7000`. 4. Open `http://127.0.0.1:8080/operator` as `operator`. 5. In `Живые звонки`: - select the active call - click `Принять в работу` 6. Speak in `MicroSIP/Zoiper`. 7. Finish with one of: - `Завершить` - `Передать` ## 3) Verify persisted events Expected event types for the same call: - `call.started` - `call.connected` - `call.ended` - `recording.ready` - optional `call.transferred` ## 4) Verify recording playback 1. Open `http://127.0.0.1:8080/supervisor`. 2. In `Записи`, load the latest recording for the call. 3. Check inline playback: `audio/*`, HTTP `200`. ## 5) Inspect action log ```powershell curl -H "X-User: operator_a" -H "X-Role: operator" ^ http://127.0.0.1:8080/proxy/asterisk-bridge/asterisk/live-calls//actions ``` Each action should have: - `action_type` in `claim|hangup|blind-transfer` - `result_status=ok` - `ami_action_id` for a successful AMI call ## 6) Failure handling - `403 Operator can control only own claimed call` - use the correct operator account or claim the call first - `409 Unable to resolve active channel for call` - check AMI permissions and channel resolution - `Unknown transfer queue_code` - fix `ASTERISK_TRANSFER_TARGET_MAP_JSON`