落地转人工:三次补问或明确接管后出入口,真正转人工后冻结本票并允许新开询价。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -21,7 +21,9 @@ from agent.policy.sea_group_ops import (
|
||||
emit_group_deal,
|
||||
filename_is_excel_pdf,
|
||||
group_client_of,
|
||||
halt_closed_group,
|
||||
hydrate_ticket,
|
||||
is_handoff_ticket,
|
||||
is_sales,
|
||||
is_terminal,
|
||||
merge_quote_fees,
|
||||
@@ -35,7 +37,7 @@ from agent.policy.sea_group_ops import (
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
TERMINAL = {"已成交", "未成交", "已关闭"}
|
||||
TERMINAL = {"已成交", "未成交", "已关闭", "转人工"}
|
||||
OPEN_ACTIVATE = {"询价中", "已报价", "协商中"}
|
||||
AIRLINE_ROLE = "air"
|
||||
|
||||
@@ -114,9 +116,12 @@ def activate_ticket(
|
||||
send_group_text(client, chat_id, copy.air_ticket_not_air(no))
|
||||
return None, "not_air"
|
||||
if err == "terminal":
|
||||
st = str(out.get("status") or "")
|
||||
if st == "转人工":
|
||||
return None, "handoff_ignore"
|
||||
if speak:
|
||||
send_group_text(
|
||||
client, chat_id, copy.air_ticket_closed(no, str(out.get("status") or ""))
|
||||
client, chat_id, copy.air_ticket_closed(no, st)
|
||||
)
|
||||
return None, "ticket_closed"
|
||||
if err == "occupied":
|
||||
@@ -128,6 +133,8 @@ def activate_ticket(
|
||||
send_group_text(client, chat_id, copy.air_ticket_not_found(no))
|
||||
return None, "ticket_missing"
|
||||
ticket = hydrate_ticket(flow, _ticket_from_activate(book, no, out))
|
||||
if is_handoff_ticket(ticket):
|
||||
return None, "handoff_ignore"
|
||||
if speak:
|
||||
send_air_brief_and_sheet(flow=flow, ticket=ticket, chat_id=chat_id)
|
||||
_watch_archive_room(chat_id, no)
|
||||
@@ -320,6 +327,8 @@ def resolve_cabin_ticket(
|
||||
if is_terminal(ticket):
|
||||
if allow_terminal:
|
||||
return ticket, "terminal_loaded"
|
||||
if ticket_status(ticket) == "转人工":
|
||||
return None, "handoff_ignore"
|
||||
send_group_text(
|
||||
client, chat_id, copy.air_ticket_closed(no, ticket_status(ticket))
|
||||
)
|
||||
@@ -334,9 +343,9 @@ def apply_air_fields(*, flow: Any, ticket: object, text: str, sender_id: str, ch
|
||||
ticket = hydrate_ticket(flow, ticket)
|
||||
no = ticket_no(ticket)
|
||||
client = group_client_of(flow)
|
||||
if is_terminal(ticket):
|
||||
send_group_text(client, chat_id, copy.ticket_locked(work_order_no=no, status=ticket_status(ticket)))
|
||||
return "ticket_locked"
|
||||
stopped = halt_closed_group(flow=flow, ticket=ticket, chat_id=chat_id)
|
||||
if stopped:
|
||||
return stopped
|
||||
if not can_fill_fields(flow, ticket, sender_id):
|
||||
send_group_text(client, chat_id, copy.air_fields_denied())
|
||||
return "fields_denied"
|
||||
@@ -371,9 +380,9 @@ def apply_air_quote(
|
||||
ticket = hydrate_ticket(flow, ticket)
|
||||
no = ticket_no(ticket)
|
||||
client = group_client_of(flow)
|
||||
if is_terminal(ticket):
|
||||
send_group_text(client, chat_id, copy.ticket_locked(work_order_no=no, status=ticket_status(ticket)))
|
||||
return "ticket_locked"
|
||||
stopped = halt_closed_group(flow=flow, ticket=ticket, chat_id=chat_id)
|
||||
if stopped:
|
||||
return stopped
|
||||
if not is_airline(flow, sender_id):
|
||||
send_group_text(client, chat_id, copy.air_airline_only_quote())
|
||||
return "not_airline"
|
||||
@@ -414,9 +423,11 @@ def apply_air_file(
|
||||
ticket = hydrate_ticket(flow, ticket)
|
||||
no = ticket_no(ticket)
|
||||
client = group_client_of(flow)
|
||||
if is_terminal(ticket):
|
||||
send_group_text(client, chat_id, copy.ticket_locked_file(work_order_no=no, status=ticket_status(ticket)))
|
||||
return "ticket_locked_file"
|
||||
stopped = halt_closed_group(
|
||||
flow=flow, ticket=ticket, chat_id=chat_id, file=True
|
||||
)
|
||||
if stopped:
|
||||
return stopped
|
||||
if not filename_is_excel_pdf(filename):
|
||||
send_group_text(client, chat_id, copy.group_only_excel_pdf())
|
||||
return "file_type_rejected"
|
||||
@@ -463,9 +474,9 @@ def apply_air_tms_choice(
|
||||
ticket = hydrate_ticket(flow, ticket)
|
||||
client = group_client_of(flow)
|
||||
no = ticket_no(ticket)
|
||||
if is_terminal(ticket):
|
||||
send_group_text(client, chat_id, copy.ticket_locked(work_order_no=no, status=ticket_status(ticket)))
|
||||
return "ticket_locked"
|
||||
stopped = halt_closed_group(flow=flow, ticket=ticket, chat_id=chat_id)
|
||||
if stopped:
|
||||
return stopped
|
||||
if not is_airline(flow, sender_id):
|
||||
send_group_text(client, chat_id, copy.air_airline_only_quote())
|
||||
return "not_airline"
|
||||
@@ -536,14 +547,9 @@ def apply_air_deal(
|
||||
if not is_sales(ticket, sender_id):
|
||||
send_group_text(group_client_of(flow), chat_id, copy.air_sales_only_deal())
|
||||
return "not_sales"
|
||||
if is_terminal(ticket) and ticket_status(ticket) != "协商中":
|
||||
if ticket_status(ticket) in {"已成交", "未成交", "已关闭"}:
|
||||
send_group_text(
|
||||
group_client_of(flow),
|
||||
chat_id,
|
||||
copy.ticket_locked(work_order_no=ticket_no(ticket), status=ticket_status(ticket)),
|
||||
)
|
||||
return "ticket_locked"
|
||||
stopped = halt_closed_group(flow=flow, ticket=ticket, chat_id=chat_id)
|
||||
if stopped:
|
||||
return stopped
|
||||
from agent.policy.deal_outcome import finish_deal_outcome
|
||||
from agent.policy.sea_group_ops import facts_of_group
|
||||
|
||||
|
||||
Reference in New Issue
Block a user