Mr-Help commited on
Commit
16ce4cf
·
verified ·
1 Parent(s): b057ee3

Upload 2 files

Browse files
Files changed (2) hide show
  1. knowledge/intents.py +55 -0
  2. knowledge/replies.py +131 -0
knowledge/intents.py ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ def normalize_text(text: str) -> str:
2
+ return (text or "").strip().lower()
3
+
4
+
5
+ def contains_any(text: str, keywords: list) -> bool:
6
+ return any(k in text for k in keywords)
7
+
8
+
9
+ def is_greeting(text: str) -> bool:
10
+ t = normalize_text(text)
11
+ return contains_any(t, [
12
+ "اهلا", "أهلا", "مرحبا", "هاي", "hello", "hi",
13
+ "السلام عليكم", "سلام عليكم", "مساء الخير", "صباح الخير",
14
+ "مساء الفل", "صباح الفل"
15
+ ])
16
+
17
+
18
+ def is_complaint(text: str) -> bool:
19
+ t = normalize_text(text)
20
+ return contains_any(t, [
21
+ "شكوى", "شكاوي", "اشتكي", "مشكلة", "مشكلتي", "تذمر", "زعلان",
22
+ "سيء", "خدمة سيئة", "عايز اشتكي", "عايزة اشتكي", "complaint"
23
+ ])
24
+
25
+
26
+ def is_support_request(text: str) -> bool:
27
+ t = normalize_text(text)
28
+ return contains_any(t, [
29
+ "خدمة العملاء", "تواصل", "اكلم", "أكلم", "support",
30
+ "عايز حد يرد", "عايزة حد يرد", "محتاج مساعدة", "محتاجه مساعدة"
31
+ ])
32
+
33
+
34
+ def is_sales_request(text: str) -> bool:
35
+ t = normalize_text(text)
36
+ return contains_any(t, [
37
+ "اشتراك", "اشترك", "احجز", "عايز احجز", "عايزة احجز",
38
+ "سعر", "الاسعار", "الأسعار", "بكام", "مبيعات"
39
+ ])
40
+
41
+
42
+ def is_new_student(text: str) -> bool:
43
+ t = normalize_text(text)
44
+ return contains_any(t, [
45
+ "طالب جديد", "جديد", "عميل جديد", "اول مرة", "أول مرة",
46
+ "لسه جديد", "مشترك جديد"
47
+ ])
48
+
49
+
50
+ def is_current_student(text: str) -> bool:
51
+ t = normalize_text(text)
52
+ return contains_any(t, [
53
+ "طالب حالي", "حالي", "عميل حالي", "مشترك", "مشترك حالي",
54
+ "انا طالب عندكم", "أنا طالب عندكم", "انا مشترك"
55
+ ])
knowledge/replies.py ADDED
@@ -0,0 +1,131 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ BEGINNER_SCHEDULE_LINK = "https://shorturl.at/8jCSz"
2
+ PLACEMENT_TEST_LINK = "https://shorturl.at/qj3HD"
3
+
4
+
5
+ def greeting_main_menu_reply(flow_data=None):
6
+ return {
7
+ "next_state": "WAITING_MAIN_MENU",
8
+ "flow_data": flow_data or {},
9
+ "reply": (
10
+ "أهلاً بيك في ÄDK 👋\n"
11
+ "أنا مساعد ÄDK.\n"
12
+ "قولّي تحب تبدأ، أو ابعت سؤالك مباشرة."
13
+ )
14
+ }
15
+
16
+
17
+ def ask_new_or_current_reply(flow_data=None):
18
+ return {
19
+ "next_state": "WAITING_USER_TYPE",
20
+ "flow_data": flow_data or {},
21
+ "reply": (
22
+ "محتاج أعرف الأول:\n"
23
+ "إنت طالب جديد ولا طالب حالي؟"
24
+ )
25
+ }
26
+
27
+
28
+ def ask_audience_reply(flow_data=None):
29
+ return {
30
+ "next_state": "WAITING_AUDIENCE",
31
+ "flow_data": flow_data or {},
32
+ "reply": "تمام، الكورس للكبار ولا للأطفال؟"
33
+ }
34
+
35
+
36
+ def ask_prior_study_reply(flow_data=None):
37
+ return {
38
+ "next_state": "WAITING_PRIOR_STUDY",
39
+ "flow_data": flow_data or {},
40
+ "reply": "هل درست اللغة الألمانية قبل كده؟ رد بنعم أو لا."
41
+ }
42
+
43
+
44
+ def beginner_schedule_reply(flow_data=None):
45
+ audience = (flow_data or {}).get("audience")
46
+ audience_label = "الأطفال" if audience == "children" else "الكبار"
47
+
48
+ return {
49
+ "next_state": "WAITING_BEGINNER_SCHEDULE_CHOICE",
50
+ "flow_data": flow_data or {},
51
+ "reply": (
52
+ f"تمام، بما إنك/إنكِ لسه بادئ/بادئة، دي مواعيد كورسات المبتدئين لفئة {audience_label}:\n"
53
+ f"{BEGINNER_SCHEDULE_LINK}\n"
54
+ "بعد ما تراجع المواعيد، ابعتلي تم أو قولّي تحب نكمّل الحجز."
55
+ )
56
+ }
57
+
58
+
59
+ def placement_test_reply(flow_data=None):
60
+ audience = (flow_data or {}).get("audience")
61
+ audience_label = "الأطفال" if audience == "children" else "الكبار"
62
+
63
+ return {
64
+ "next_state": "WAITING_PLACEMENT_TEST_CONFIRMATION",
65
+ "flow_data": flow_data or {},
66
+ "reply": (
67
+ f"تمام، بما إنك درست ألماني قبل كده، تقدر تحجز اختبار تحديد مستوى لفئة {audience_label}.\n"
68
+ "سعر الاختبار 300 جنيه.\n"
69
+ f"المواعيد من هنا:\n{PLACEMENT_TEST_LINK}\n"
70
+ "بعد ما تراجع المواعيد، ابعتلي تم."
71
+ )
72
+ }
73
+
74
+
75
+ def current_student_menu_reply(flow_data=None):
76
+ return {
77
+ "next_state": "WAITING_CURRENT_STUDENT_ACTION",
78
+ "flow_data": flow_data or {},
79
+ "reply": "تمام، تحب تعمل استفسار بخصوص الكورس ولا حجز المستوى التالي؟"
80
+ }
81
+
82
+
83
+ def support_question_reply(flow_data=None):
84
+ return {
85
+ "next_state": "WAITING_SUPPORT_QUESTION",
86
+ "flow_data": flow_data or {},
87
+ "reply": "اكتبلي استفسارك بالتفصيل، وأنا هرفعه لفريق خدمة العملاء."
88
+ }
89
+
90
+
91
+ def ask_level_selection_reply(flow_data=None):
92
+ return {
93
+ "next_state": "WAITING_LEVEL_SELECTION",
94
+ "flow_data": flow_data or {},
95
+ "reply": (
96
+ "تمام، قولّي المستوى اللي تحب تحجزه:\n"
97
+ "1A / 2A / 1B / 1C2/B"
98
+ )
99
+ }
100
+
101
+
102
+ def payment_methods_reply(flow_data=None):
103
+ return {
104
+ "next_state": "WAITING_PAYMENT_METHOD",
105
+ "flow_data": flow_data or {},
106
+ "reply": (
107
+ "طرق الدفع المتاحة:\n"
108
+ "- في الفرع\n"
109
+ "- تحويل بنكي\n"
110
+ "- Vodafone Cash\n"
111
+ "- Visa\n"
112
+ "- تقسيط Value\n"
113
+ "اختار الطريقة المناسبة لك."
114
+ )
115
+ }
116
+
117
+
118
+ def handoff_done_reply(flow_data=None):
119
+ return {
120
+ "next_state": "HANDOFF_DONE",
121
+ "flow_data": flow_data or {},
122
+ "reply": "تمام، تم رفع طلبك للفريق المختص وهيتم التواصل معاك قريب."
123
+ }
124
+
125
+
126
+ def unknown_reply(flow_data=None):
127
+ return {
128
+ "next_state": "WAITING_MAIN_MENU",
129
+ "flow_data": flow_data or {},
130
+ "reply": "ممكن توضّحلي قصدك أكتر؟ أو قولّي إذا كنت طالب جديد أو طالب حالي."
131
+ }