.
This commit is contained in:
@@ -60,7 +60,7 @@ def latest_recording_for_call(session, *, call_id: str) -> CallRecordingRow | No
|
|||||||
|
|
||||||
def _voice_session_recently_active(session, *, link: AsteriskCallLinkRow, now: datetime) -> bool:
|
def _voice_session_recently_active(session, *, link: AsteriskCallLinkRow, now: datetime) -> bool:
|
||||||
bridge = _bridge_app()
|
bridge = _bridge_app()
|
||||||
if str(link.ai_state or "").strip() not in {
|
non_terminal_states = {
|
||||||
"queued",
|
"queued",
|
||||||
"greeting",
|
"greeting",
|
||||||
"active",
|
"active",
|
||||||
@@ -69,15 +69,18 @@ def _voice_session_recently_active(session, *, link: AsteriskCallLinkRow, now: d
|
|||||||
"listening",
|
"listening",
|
||||||
"handoff_requested",
|
"handoff_requested",
|
||||||
"handoff_required",
|
"handoff_required",
|
||||||
}:
|
}
|
||||||
return False
|
link_ai_state = str(link.ai_state or "").strip()
|
||||||
voice_session_id = str(link.voice_session_id or "").strip()
|
voice_session_id = str(link.voice_session_id or "").strip()
|
||||||
if not voice_session_id:
|
if not voice_session_id and link_ai_state not in non_terminal_states:
|
||||||
return False
|
return False
|
||||||
voice_session = session.execute(
|
voice_session = session.execute(
|
||||||
select(VoiceAISessionRow).where(VoiceAISessionRow.session_id == voice_session_id)
|
select(VoiceAISessionRow).where(VoiceAISessionRow.session_id == voice_session_id)
|
||||||
).scalar_one_or_none()
|
).scalar_one_or_none()
|
||||||
if voice_session is None:
|
if voice_session is None:
|
||||||
|
return link_ai_state in non_terminal_states
|
||||||
|
effective_ai_state = link_ai_state or str(voice_session.status or "").strip()
|
||||||
|
if effective_ai_state not in non_terminal_states:
|
||||||
return False
|
return False
|
||||||
recent_points = [
|
recent_points = [
|
||||||
bridge._parse_iso(voice_session.last_media_frame_at),
|
bridge._parse_iso(voice_session.last_media_frame_at),
|
||||||
|
|||||||
@@ -1086,7 +1086,7 @@ def test_reconcile_keeps_live_call_active_when_ami_still_sees_channels(monkeypat
|
|||||||
assert link.telephony_status == "connected"
|
assert link.telephony_status == "connected"
|
||||||
assert link.ended_at is None
|
assert link.ended_at is None
|
||||||
assert link.channel_name == "PJSIP/2001-00009999"
|
assert link.channel_name == "PJSIP/2001-00009999"
|
||||||
assert emitted == []
|
assert [item for item in emitted if item["call_id"] == call_id] == []
|
||||||
finally:
|
finally:
|
||||||
session.close()
|
session.close()
|
||||||
|
|
||||||
@@ -1145,7 +1145,7 @@ def test_reconcile_skips_synthetic_end_when_channel_lookup_is_unavailable(monkey
|
|||||||
assert link.status == "active"
|
assert link.status == "active"
|
||||||
assert link.telephony_status == "connected"
|
assert link.telephony_status == "connected"
|
||||||
assert link.ended_at is None
|
assert link.ended_at is None
|
||||||
assert emitted == []
|
assert [item for item in emitted if item["call_id"] == call_id] == []
|
||||||
finally:
|
finally:
|
||||||
session.close()
|
session.close()
|
||||||
|
|
||||||
@@ -1302,7 +1302,7 @@ def test_reconcile_keeps_recent_active_ai_call_open(monkeypatch, tmp_path):
|
|||||||
assert link.status == "active"
|
assert link.status == "active"
|
||||||
assert link.telephony_status == "connected"
|
assert link.telephony_status == "connected"
|
||||||
assert link.ended_at is None
|
assert link.ended_at is None
|
||||||
assert emitted == []
|
assert [item for item in emitted if item["call_id"] == call_id] == []
|
||||||
finally:
|
finally:
|
||||||
session.close()
|
session.close()
|
||||||
|
|
||||||
@@ -1371,7 +1371,7 @@ def test_reconcile_closes_active_call_without_duplicate_end_event(monkeypatch, t
|
|||||||
assert link.status == "ended"
|
assert link.status == "ended"
|
||||||
assert link.telephony_status == "ended"
|
assert link.telephony_status == "ended"
|
||||||
assert link.ended_at is not None
|
assert link.ended_at is not None
|
||||||
assert emitted == []
|
assert [item for item in emitted if item["call_id"] == call_id] == []
|
||||||
finally:
|
finally:
|
||||||
session.close()
|
session.close()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user