File size: 3,134 Bytes
f6200a9 36c76d3 f6200a9 36c76d3 f6200a9 36c76d3 f6200a9 36c76d3 f6200a9 36c76d3 f6200a9 36c76d3 02fbdc7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | from engine.flow_router import route_message
from sessions import get_session, upsert_session
def normalize_text(text: str) -> str:
return (text or "").strip().lower()
def detect_gender(text: str):
"""
تخمين خفيف وآمن:
- female
- male
- None
"""
t = normalize_text(text)
female_markers = [
"انا مهتمه",
"مهتمه",
"عايزه",
"عاوزه",
"عاوزة",
"عايزة",
"حابه",
"حابة",
"محتاجه",
"محتاجة",
"انا ام",
"انا ماما",
"انا والده",
]
male_markers = [
"انا مهتم",
"مهتم",
"عايز",
"حابب",
"محتاج",
"انا اب",
"انا بابا",
"انا والد",
]
for marker in female_markers:
if marker in t:
return "female"
for marker in male_markers:
if marker in t:
return "male"
return None
def merge_flow_data(old_data: dict, new_data: dict):
merged = dict(old_data or {})
merged.update(new_data or {})
return merged
def process_message(bot_number: str, customer_phone: str, text: str):
session = get_session(customer_phone, bot_number)
if not session:
session = {
"current_state": "START",
"flow_type": None,
"flow_data": {
"uid": f"{bot_number}__{customer_phone}",
"customer_phone": customer_phone,
"bot_number": bot_number,
}
}
state = session.get("current_state", "START")
old_flow_data = session.get("flow_data", {}) or {}
# تأكد إن البيانات الأساسية موجودة دائمًا
base_flow_data = merge_flow_data(old_flow_data, {
"uid": old_flow_data.get("uid") or f"{bot_number}__{customer_phone}",
"customer_phone": customer_phone,
"bot_number": bot_number,
})
# خزّن gender لو واضح، لكن ما تمسحهوش لو كان موجود قبل كده
detected_gender = detect_gender(text)
if detected_gender and not base_flow_data.get("gender"):
base_flow_data["gender"] = detected_gender
# ابني session محدثة قبل التوجيه
working_session = dict(session)
working_session["flow_data"] = base_flow_data
result = route_message(state, text, working_session)
next_state = result["next_state"]
result_flow_data = result.get("flow_data", base_flow_data) or {}
# ندمج بدل ما نستبدل عشان ما نفقدش uid / gender / customer info
final_flow_data = merge_flow_data(base_flow_data, result_flow_data)
flow_type = final_flow_data.get("customer_type") or session.get("flow_type")
upsert_session(
customer_phone=customer_phone,
bot_number=bot_number,
current_state=next_state,
flow_type=flow_type,
flow_data=final_flow_data,
last_message=text,
)
result["flow_data"] = final_flow_data
return result |