落地转人工:三次补问或明确接管后出入口,真正转人工后冻结本票并允许新开询价。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-20 16:42:13 +08:00
co-authored by Cursor
parent 26dd5d72a1
commit 7eedf28e8d
23 changed files with 1499 additions and 132 deletions
+53 -29
View File
@@ -68,6 +68,7 @@ class LandTextInquiryFlow(SeaTextInquiryFlow):
retry = self.restore_tms_retry_session(sender_id)
if retry:
sess = retry
sess = self._detach_frozen_bookmark(sess, sender_id)
phase = (sess.phase if sess else "") or ""
btn = self.match_button(text, sess)
if btn:
@@ -467,44 +468,67 @@ class LandTextInquiryFlow(SeaTextInquiryFlow):
self._clear_parked_confirm(sender_id)
return "need_land_options"
if state["stage"] == "options_missing":
logger.info(
"land.options_missing missing=%s",
(state.get("opt") or {}).get("missing") or [],
)
self._reply_land_options(reply, facts)
self._save(
FlowSession(
sender_id=sender_id,
thread_id=sender_id,
phase="need_land_options",
business_line="LAND",
facts=facts,
immutable_text=immutable,
wait_version=(sess.wait_version + 1) if sess else 1,
)
)
self._clear_parked_confirm(sender_id)
return "need_land_options"
reply(
copy.ask_land_fields(
facts=facts,
missing_keys=state.get("missing") or [],
land_subtype=state.get("land_type") or "",
)
)
self._save(
FlowSession(
keys = list((state.get("opt") or {}).get("missing") or [])
logger.info("land.options_missing missing=%s", keys)
new_sess = FlowSession(
sender_id=sender_id,
thread_id=sender_id,
phase="clarify",
phase="need_land_options",
business_line="LAND",
facts=facts,
immutable_text=immutable,
wait_version=(sess.wait_version + 1) if sess else 1,
)
from agent.policy.handoff_human import inherit_pre_create_ticket, note_clarify_round
if sess is not None:
new_sess.clarify_missing_sig = sess.clarify_missing_sig
new_sess.clarify_retry = sess.clarify_retry
new_sess.handoff_offer = sess.handoff_offer
new_sess.handoff_committed = sess.handoff_committed
new_sess.virtual_work_order_no = sess.virtual_work_order_no
inherit_pre_create_ticket(sess, new_sess)
decision = note_clarify_round(new_sess, keys)
self._reply_land_options(
reply,
facts,
message=copy.with_clarify_progress(
option_prompt(current=facts), new_sess.clarify_retry
),
)
if decision == "handoff":
self._clear_parked_confirm(sender_id)
return self._offer_handoff_now(
sender_id=sender_id,
reason="clarify",
reply=reply,
sess=new_sess,
)
self._save(new_sess)
self._clear_parked_confirm(sender_id)
return "need_land_options"
new_sess = FlowSession(
sender_id=sender_id,
thread_id=sender_id,
phase="clarify",
business_line="LAND",
facts=facts,
immutable_text=immutable,
wait_version=(sess.wait_version + 1) if sess else 1,
)
phase = self._clarify_or_handoff(
sess=sess,
keys=list(state.get("missing") or []),
new_sess=new_sess,
reply=reply,
clarify_text=copy.ask_land_fields(
facts=facts,
missing_keys=state.get("missing") or [],
land_subtype=state.get("land_type") or "",
),
)
self._clear_parked_confirm(sender_id)
return "clarify"
return phase
def restore_confirm_session(self, sender_id: str) -> Optional[FlowSession]:
"""