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