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

@ -10,6 +10,10 @@ from app.config import get_settings
from app.database import SessionFactory, mongo_db
from app.models import Account
from app.services.domain_provisioning import get_domain_by_name
from app.services.handoff_mirror_policy import (
GENERATED_BY_CUSTOMER,
MESSAGE_ORIGIN_EXTERNAL_CUSTOMER,
)
from app.services.human_handoff_service import (
MESSAGE_SCOPE_EXTERNAL,
MESSAGE_SCOPE_HANDOFF,
@ -17,7 +21,8 @@ from app.services.human_handoff_service import (
resolve_handoff_from_inbound,
maybe_trigger_handoff,
)
from app.services.message_ids import normalize_message_id
from app.services.external_reply_service import log_original_external_message
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 delivery_digest, get_raw_mime_storage
from app.services.thread_resolver import participants_from_parsed, resolve_thread
@ -128,7 +133,8 @@ class InboundHandler:
stored = await get_raw_mime_storage().put(raw, delivery_key)
now = datetime.now(timezone.utc)
sender_address = (parsed.get("sender") or {}).get("address", "").lower()
internet_message_id = normalize_message_id(parsed.get("message_id"))
internet_message_id = canonical_message_id(parsed.get("message_id"))
id_fields = message_id_fields(internet_message_id)
for recipient in recipients:
account_id = envelope.account_ids[recipient]
@ -160,8 +166,7 @@ class InboundHandler:
"delivery_key": delivery_key,
"received_at": now,
"created_at": now,
"message_id": internet_message_id,
"internet_message_id": internet_message_id,
**id_fields,
}
await process_human_reply(
mongo_db,
@ -194,8 +199,7 @@ class InboundHandler:
"envelope_sender": envelope.mail_from.lower(),
"envelope_recipients": recipients,
"delivery_key": delivery_key,
"message_id": internet_message_id,
"internet_message_id": internet_message_id,
**id_fields,
"raw_mime": {
"bucket": stored.bucket,
"name": stored.name,
@ -252,14 +256,15 @@ class InboundHandler:
{
"$set": {
"message_scope": MESSAGE_SCOPE_EXTERNAL,
"message_id": internet_message_id,
"internet_message_id": internet_message_id,
"in_reply_to": normalize_message_id(parsed.get("in_reply_to")),
**id_fields,
"in_reply_to": canonical_message_id(parsed.get("in_reply_to")),
"references": parsed.get("references", []),
"raw_headers": parsed.get("raw_headers", {}),
"parent_message_id": resolution.parent_message_id,
"thread_relation": resolution.thread_relation,
"thread_resolution_method": resolution.thread_resolution_method,
"message_origin": MESSAGE_ORIGIN_EXTERNAL_CUSTOMER,
"generated_by": GENERATED_BY_CUSTOMER,
}
},
)
@ -298,6 +303,14 @@ class InboundHandler:
database_session,
agent_email.split("@", 1)[1],
)
persisted.update(
{
"message_scope": MESSAGE_SCOPE_EXTERNAL,
"direction": "inbound",
"message_origin": MESSAGE_ORIGIN_EXTERNAL_CUSTOMER,
"generated_by": GENERATED_BY_CUSTOMER,
}
)
if domain is not None:
await maybe_trigger_handoff(
mongo_db,
@ -307,6 +320,17 @@ class InboundHandler:
external_thread_id=thread_id,
domain=domain,
)
log_original_external_message(
internal_id=persisted["_id"],
thread_id=thread_id,
internet_message_id=internet_message_id,
sender=sender_address,
recipient=recipient,
subject=parsed.get("subject"),
in_reply_to=canonical_message_id(parsed.get("in_reply_to")),
references=parsed.get("references", []),
raw_message_available=bool(persisted.get("raw_mime")),
)
log_smtp_message_received(
message_id=internet_message_id,
in_reply_to=parsed.get("in_reply_to"),