handoff fixes

This commit is contained in:
debu-2 2026-10-06 03:14:53 +05:30
parent 89ddebdb60
commit 8d5e9712a6
20 changed files with 1056 additions and 141 deletions

View file

@ -18,6 +18,7 @@ from app.schemas import (
HandoffTestRequest,
HandoffTestResult,
)
from app.services.handoff_mirror_policy import is_relay_acknowledgment_message
from app.services.human_handoff_service import MESSAGE_SCOPE_HANDOFF
from app.services.handoff_evaluator import EMAIL_TYPE_META, HANDOFF_LABELS, evaluate_handoff
@ -261,8 +262,15 @@ async def get_handoff_conversation(
messages: list[HandoffMessageRead] = []
for row in rows:
message = row["message"]
if is_relay_acknowledgment_message(message):
continue
sender_address = (message.get("sender") or {}).get("address", "").lower()
role = "human" if sender_address == human_email else "agent"
if message.get("mirrored_from_external_message_id"):
role = "customer"
elif sender_address == human_email:
role = "human"
else:
role = "agent"
event_at = row.get("event_at") or message.get("received_at") or message.get("sent_at") or message["created_at"]
raw_body = message.get("raw_body")
new_reply_content = message.get("new_reply_content")
@ -281,6 +289,7 @@ async def get_handoff_conversation(
and new_reply_content
and raw_body.strip() != new_reply_content.strip()
),
relay_status=message.get("relay_status") if role == "human" else None,
event_at=event_at,
)
)

View file

@ -24,7 +24,7 @@ from app.schemas import (
)
from app.services.domain_provisioning import get_domain_by_name
from app.services.mail_sender import deliver_email
from app.services.message_ids import normalize_message_id
from app.services.message_ids import canonical_message_id, message_id_fields
from app.services.mime_parser import parse_mime
from app.services.raw_mime_storage import get_raw_mime_storage
from app.services.reply_recipients import reply_recipients
@ -249,9 +249,8 @@ async def create_email(
references=threading_fields.get("references"),
)
document["status"] = "accepted"
normalized_id = normalize_message_id(internet_message_id)
document["message_id"] = normalized_id
document["internet_message_id"] = normalized_id
normalized_id = canonical_message_id(internet_message_id)
document.update(message_id_fields(normalized_id))
log_smtp_message_sending(
generated_message_id=normalized_id,
in_reply_to=threading_fields.get("in_reply_to"),