Upload app.py
Browse files
app.py
CHANGED
@@ -58,6 +58,51 @@ else:
|
|
58 |
logger.error(f"❌ Twilio client hatası: {e}")
|
59 |
twilio_client = None
|
60 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
# Trek bisiklet ürünlerini çekme - DÜZELTİLMİŞ VERSİYON
|
62 |
try:
|
63 |
print("🔍 XML DEBUG TEST BAŞLADI")
|
@@ -707,13 +752,36 @@ def process_whatsapp_message_with_memory(user_message, phone_number):
|
|
707 |
try:
|
708 |
product_result = improved_whatsapp_bot.process_message(user_message)
|
709 |
if product_result['is_product_query'] and product_result['response']:
|
710 |
-
#
|
711 |
-
|
712 |
-
|
713 |
-
|
714 |
-
|
715 |
-
|
716 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
717 |
except Exception as e:
|
718 |
logger.error(f"❌ BF Space: Improved search error: {e}")
|
719 |
|
@@ -896,11 +964,33 @@ def process_whatsapp_message(user_message):
|
|
896 |
try:
|
897 |
product_result = improved_whatsapp_bot.process_message(user_message)
|
898 |
if product_result['is_product_query'] and product_result['response']:
|
899 |
-
|
900 |
-
|
901 |
-
|
902 |
-
|
903 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
904 |
except Exception as e:
|
905 |
print(f"BF Space backup: Improved search error: {e}")
|
906 |
|
|
|
58 |
logger.error(f"❌ Twilio client hatası: {e}")
|
59 |
twilio_client = None
|
60 |
|
61 |
+
# Mağaza stok bilgilerini çekme fonksiyonu
|
62 |
+
def get_warehouse_stock(product_name):
|
63 |
+
"""B2B API'den mağaza stok bilgilerini çek"""
|
64 |
+
try:
|
65 |
+
warehouse_url = 'https://video.trek-turkey.com/bizimhesap-warehouse-xml.php'
|
66 |
+
response = requests.get(warehouse_url, verify=False, timeout=15)
|
67 |
+
|
68 |
+
if response.status_code != 200:
|
69 |
+
return None
|
70 |
+
|
71 |
+
root = ET.fromstring(response.content)
|
72 |
+
|
73 |
+
# Ürünü ara
|
74 |
+
for product in root.findall('Product'):
|
75 |
+
product_name_elem = product.find('ProductName')
|
76 |
+
if product_name_elem is not None and product_name_elem.text:
|
77 |
+
xml_product_name = product_name_elem.text.lower().strip()
|
78 |
+
search_name = product_name.lower().strip()
|
79 |
+
|
80 |
+
# Fuzzy matching
|
81 |
+
if search_name in xml_product_name or xml_product_name in search_name:
|
82 |
+
warehouses = product.find('Warehouses')
|
83 |
+
if warehouses is not None:
|
84 |
+
warehouse_info = []
|
85 |
+
for warehouse in warehouses.findall('Warehouse'):
|
86 |
+
name_elem = warehouse.find('Name')
|
87 |
+
stock_elem = warehouse.find('Stock')
|
88 |
+
|
89 |
+
if name_elem is not None and stock_elem is not None:
|
90 |
+
warehouse_name = name_elem.text if name_elem.text else "Bilinmeyen"
|
91 |
+
try:
|
92 |
+
stock_count = int(stock_elem.text) if stock_elem.text else 0
|
93 |
+
if stock_count > 0:
|
94 |
+
warehouse_info.append(f"{warehouse_name}: {stock_count} adet")
|
95 |
+
except (ValueError, TypeError):
|
96 |
+
pass
|
97 |
+
|
98 |
+
return warehouse_info if warehouse_info else ["Hiçbir mağazada stokta bulunmuyor"]
|
99 |
+
|
100 |
+
return ["Ürün bulunamadı"]
|
101 |
+
|
102 |
+
except Exception as e:
|
103 |
+
print(f"Mağaza stok bilgisi çekme hatası: {e}")
|
104 |
+
return None
|
105 |
+
|
106 |
# Trek bisiklet ürünlerini çekme - DÜZELTİLMİŞ VERSİYON
|
107 |
try:
|
108 |
print("🔍 XML DEBUG TEST BAŞLADI")
|
|
|
752 |
try:
|
753 |
product_result = improved_whatsapp_bot.process_message(user_message)
|
754 |
if product_result['is_product_query'] and product_result['response']:
|
755 |
+
# Check if user is asking about specific warehouse/store location
|
756 |
+
if any(keyword in user_message.lower() for keyword in ['mağaza', 'mağazada', 'nerede', 'hangi mağaza', 'şube']):
|
757 |
+
# Get warehouse stock info for the found products
|
758 |
+
if product_result['products_found']:
|
759 |
+
warehouse_info_parts = []
|
760 |
+
for product in product_result['products_found'][:2]: # Max 2 products
|
761 |
+
product_name = product[2] # Full product name
|
762 |
+
warehouse_stock = get_warehouse_stock(product_name)
|
763 |
+
if warehouse_stock:
|
764 |
+
warehouse_info_parts.append(f"{product_name} mağaza stogu:")
|
765 |
+
warehouse_info_parts.extend(warehouse_stock)
|
766 |
+
warehouse_info_parts.append("")
|
767 |
+
|
768 |
+
if warehouse_info_parts:
|
769 |
+
warehouse_response = "\n".join(warehouse_info_parts)
|
770 |
+
messages.append({
|
771 |
+
"role": "system",
|
772 |
+
"content": f"MAĞAZA STOK BİLGİSİ (BF Space):\n{warehouse_response}\n\nSADECE bu bilgileri kullanarak kullanıcıya yardımcı ol."
|
773 |
+
})
|
774 |
+
product_found_improved = True
|
775 |
+
logger.info("✅ BF Space: Warehouse stock info used")
|
776 |
+
|
777 |
+
if not product_found_improved:
|
778 |
+
# Use improved search response directly
|
779 |
+
messages.append({
|
780 |
+
"role": "system",
|
781 |
+
"content": f"ÜRÜN BİLGİSİ (BF Space):\n{product_result['response']}\n\nSADECE bu bilgileri kullanarak kullanıcıya yardımcı ol. Bu bilgiler dışında ek bilgi ekleme."
|
782 |
+
})
|
783 |
+
product_found_improved = True
|
784 |
+
logger.info("✅ BF Space: Improved product search used")
|
785 |
except Exception as e:
|
786 |
logger.error(f"❌ BF Space: Improved search error: {e}")
|
787 |
|
|
|
964 |
try:
|
965 |
product_result = improved_whatsapp_bot.process_message(user_message)
|
966 |
if product_result['is_product_query'] and product_result['response']:
|
967 |
+
# Check if user is asking about specific warehouse/store location
|
968 |
+
if any(keyword in user_message.lower() for keyword in ['mağaza', 'mağazada', 'nerede', 'hangi mağaza', 'şube']):
|
969 |
+
# Get warehouse stock info for the found products
|
970 |
+
if product_result['products_found']:
|
971 |
+
warehouse_info_parts = []
|
972 |
+
for product in product_result['products_found'][:2]: # Max 2 products
|
973 |
+
product_name = product[2] # Full product name
|
974 |
+
warehouse_stock = get_warehouse_stock(product_name)
|
975 |
+
if warehouse_stock:
|
976 |
+
warehouse_info_parts.append(f"{product_name} mağaza stogu:")
|
977 |
+
warehouse_info_parts.extend(warehouse_stock)
|
978 |
+
warehouse_info_parts.append("")
|
979 |
+
|
980 |
+
if warehouse_info_parts:
|
981 |
+
warehouse_response = "\n".join(warehouse_info_parts)
|
982 |
+
system_messages.append({
|
983 |
+
"role": "system",
|
984 |
+
"content": f"MAĞAZA STOK BİLGİSİ (BF Space Backup):\n{warehouse_response}\n\nSADECE bu bilgileri kullanarak kullanıcıya yardımcı ol."
|
985 |
+
})
|
986 |
+
product_found_improved = True
|
987 |
+
|
988 |
+
if not product_found_improved:
|
989 |
+
system_messages.append({
|
990 |
+
"role": "system",
|
991 |
+
"content": f"ÜRÜN BİLGİSİ (BF Space Backup):\n{product_result['response']}\n\nSADECE bu bilgileri kullanarak kullanıcıya yardımcı ol. Bu bilgiler dışında ek bilgi ekleme."
|
992 |
+
})
|
993 |
+
product_found_improved = True
|
994 |
except Exception as e:
|
995 |
print(f"BF Space backup: Improved search error: {e}")
|
996 |
|