handoff fixes
This commit is contained in:
parent
89ddebdb60
commit
8d5e9712a6
20 changed files with 1056 additions and 141 deletions
|
|
@ -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"),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue