handoff fixes
This commit is contained in:
parent
89ddebdb60
commit
8d5e9712a6
20 changed files with 1056 additions and 141 deletions
62
backend/app/services/handoff_mirror_policy.py
Normal file
62
backend/app/services/handoff_mirror_policy.py
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
"""Decide whether external messages should be mirrored into a Human Handoff thread."""
|
||||
|
||||
MESSAGE_SCOPE_EXTERNAL = "EXTERNAL"
|
||||
|
||||
# Message provenance — who authored / generated the content
|
||||
MESSAGE_ORIGIN_EXTERNAL_CUSTOMER = "EXTERNAL_CUSTOMER"
|
||||
MESSAGE_ORIGIN_HUMAN_OWNER = "HUMAN_OWNER"
|
||||
MESSAGE_ORIGIN_AGENT = "AGENT"
|
||||
MESSAGE_ORIGIN_SYSTEM = "SYSTEM"
|
||||
MESSAGE_ORIGIN_HANDOFF_MIRROR = "HANDOFF_MIRROR"
|
||||
|
||||
GENERATED_BY_CUSTOMER = "CUSTOMER"
|
||||
GENERATED_BY_HUMAN = "HUMAN"
|
||||
GENERATED_BY_AGENT = "AGENT"
|
||||
GENERATED_BY_HANDOFF_BRIDGE = "HANDOFF_BRIDGE"
|
||||
GENERATED_BY_SYSTEM = "SYSTEM"
|
||||
GENERATED_BY_RELAY_ACK = "RELAY_ACK"
|
||||
|
||||
RELAY_STATUS_SENT = "SENT"
|
||||
RELAY_STATUS_FAILED = "FAILED"
|
||||
RELAY_STATUS_PENDING = "PENDING"
|
||||
|
||||
|
||||
def should_mirror_to_human(message: dict) -> bool:
|
||||
"""Return True only for new external customer content worth mirroring."""
|
||||
scope = message.get("message_scope", MESSAGE_SCOPE_EXTERNAL)
|
||||
if scope != MESSAGE_SCOPE_EXTERNAL:
|
||||
return False
|
||||
|
||||
if message.get("direction") != "inbound":
|
||||
return False
|
||||
|
||||
generated_by = message.get("generated_by")
|
||||
if generated_by in (
|
||||
GENERATED_BY_HANDOFF_BRIDGE,
|
||||
GENERATED_BY_RELAY_ACK,
|
||||
GENERATED_BY_SYSTEM,
|
||||
):
|
||||
return False
|
||||
|
||||
origin = message.get("message_origin")
|
||||
if origin in (
|
||||
MESSAGE_ORIGIN_HUMAN_OWNER,
|
||||
MESSAGE_ORIGIN_SYSTEM,
|
||||
MESSAGE_ORIGIN_HANDOFF_MIRROR,
|
||||
):
|
||||
return False
|
||||
|
||||
if message.get("generated_from_handoff_message_id"):
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def is_relay_acknowledgment_message(message: dict) -> bool:
|
||||
"""Detect legacy or internal delivery-receipt messages in handoff threads."""
|
||||
if message.get("generated_by") == GENERATED_BY_RELAY_ACK:
|
||||
return True
|
||||
if message.get("message_origin") == MESSAGE_ORIGIN_SYSTEM:
|
||||
return True
|
||||
body = (message.get("body_text") or message.get("snippet") or "").strip()
|
||||
return message.get("direction") == "outbound" and body.startswith("Sent to customer")
|
||||
Loading…
Add table
Add a link
Reference in a new issue