handoff fixes
This commit is contained in:
parent
83f0eba64d
commit
8653f319f7
9 changed files with 30 additions and 1309 deletions
|
|
@ -9,19 +9,8 @@ from sqlalchemy import func, select
|
|||
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,
|
||||
process_human_reply,
|
||||
resolve_handoff_from_inbound,
|
||||
maybe_trigger_handoff,
|
||||
)
|
||||
from app.services.external_reply_service import log_original_external_message
|
||||
from app.services.human_handoff_service import MESSAGE_SCOPE_EXTERNAL
|
||||
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
|
||||
|
|
@ -136,62 +125,6 @@ class InboundHandler:
|
|||
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]
|
||||
agent_email = recipient
|
||||
|
||||
handoff = await resolve_handoff_from_inbound(
|
||||
mongo_db,
|
||||
account_id=account_id,
|
||||
agent_email=agent_email,
|
||||
sender_address=sender_address,
|
||||
in_reply_to=parsed.get("in_reply_to"),
|
||||
references=parsed.get("references", []),
|
||||
)
|
||||
if handoff:
|
||||
async with SessionFactory() as database_session:
|
||||
domain = await get_domain_by_name(
|
||||
database_session,
|
||||
agent_email.split("@", 1)[1],
|
||||
)
|
||||
if domain is None:
|
||||
logger.warning("handoff_reply_no_domain account=%s", account_id)
|
||||
continue
|
||||
message = {
|
||||
**parsed,
|
||||
"body_text": body_text,
|
||||
"body_html": body_html,
|
||||
"direction": "inbound",
|
||||
"message_scope": MESSAGE_SCOPE_HANDOFF,
|
||||
"delivery_key": delivery_key,
|
||||
"received_at": now,
|
||||
"created_at": now,
|
||||
**id_fields,
|
||||
}
|
||||
await process_human_reply(
|
||||
mongo_db,
|
||||
account_id=account_id,
|
||||
agent_email=agent_email,
|
||||
handoff=handoff,
|
||||
inbound_parsed=message,
|
||||
inbound_body=body_text,
|
||||
domain=domain,
|
||||
)
|
||||
log_smtp_message_received(
|
||||
message_id=internet_message_id,
|
||||
in_reply_to=parsed.get("in_reply_to"),
|
||||
references=parsed.get("references", []),
|
||||
sender=sender_address,
|
||||
recipient=recipient,
|
||||
subject=parsed.get("subject", ""),
|
||||
resolved_scope=MESSAGE_SCOPE_HANDOFF,
|
||||
resolved_thread_id=handoff.get("handoff_thread_id"),
|
||||
resolution_method="handoff_in_reply_to",
|
||||
stored_message_id=None,
|
||||
mailbox_id="handoff",
|
||||
)
|
||||
return f"250 2.0.0 Handoff reply accepted as {delivery_key}"
|
||||
|
||||
message = {
|
||||
**parsed,
|
||||
"direction": "inbound",
|
||||
|
|
@ -232,7 +165,6 @@ class InboundHandler:
|
|||
participants = participants_from_parsed(parsed)
|
||||
for recipient in recipients:
|
||||
account_id = envelope.account_ids[recipient]
|
||||
agent_email = recipient
|
||||
resolution = await resolve_thread(
|
||||
mongo_db,
|
||||
account_id=account_id,
|
||||
|
|
@ -263,8 +195,6 @@ class InboundHandler:
|
|||
"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,28 +228,6 @@ class InboundHandler:
|
|||
},
|
||||
upsert=True,
|
||||
)
|
||||
async with SessionFactory() as database_session:
|
||||
domain = await get_domain_by_name(
|
||||
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,
|
||||
account_id=account_id,
|
||||
agent_email=agent_email,
|
||||
external_message=persisted,
|
||||
external_thread_id=thread_id,
|
||||
domain=domain,
|
||||
)
|
||||
log_original_external_message(
|
||||
internal_id=persisted["_id"],
|
||||
thread_id=thread_id,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue