lokesh341 commited on
Commit
d49d2af
·
verified ·
1 Parent(s): e446243

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +104 -60
app.py CHANGED
@@ -1,32 +1,54 @@
1
- import torch
2
- from flask import Flask, render_template, request, jsonify, redirect, session
3
- import json
4
  import os
 
 
 
5
  from transformers import pipeline
6
  from gtts import gTTS
7
  from pydub import AudioSegment
8
  from pydub.silence import detect_nonsilent
9
- from transformers import AutoConfig
10
- import time
11
  from waitress import serve
12
  from simple_salesforce import Salesforce
13
- import requests
 
 
 
14
 
15
  # Initialize Flask app
16
  app = Flask(__name__)
17
  app.secret_key = os.urandom(24) # For session handling
18
 
19
- # Salesforce connection details
20
  try:
21
  print("Attempting to connect to Salesforce...")
22
- sf = Salesforce(username='[email protected]', password='Sati@1020', security_token='sSSjyhInIsUohKpG8sHzty2q')
 
 
 
 
23
  print("Connected to Salesforce successfully!")
24
  except Exception as e:
25
  print(f"Failed to connect to Salesforce: {str(e)}")
26
 
27
  # Functions for Salesforce operations
28
- def create_salesforce_record(sf, name, email, phone_number):
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  try:
 
 
 
 
30
  customer_login = sf.Customer_Login__c.create({
31
  'Name': name,
32
  'Email__c': email,
@@ -36,58 +58,49 @@ def create_salesforce_record(sf, name, email, phone_number):
36
  except Exception as e:
37
  raise Exception(f"Failed to create record: {str(e)}")
38
 
39
- def create_salesforce_order(sf, cart_items, total_price, customer_id):
 
40
  try:
41
  order = sf.Order__c.create({
42
  'Total_Price__c': total_price,
43
- 'Cart_Items__c': json.dumps(cart_items), # Storing cart items as JSON
44
- 'Customer__c': customer_id # Linking to the customer record
45
  })
46
  return order
47
  except Exception as e:
48
  raise Exception(f"Failed to create order: {str(e)}")
49
 
50
- def get_menu_items(sf):
51
- # Query to get menu items from Salesforce (assuming Menu_Item__c is the Salesforce object)
52
- query = "SELECT Name, Price__c, Ingredients__c, Category__c FROM Menu_Item__c"
53
- result = sf.query(query)
54
- return result['records']
 
 
 
 
55
 
56
- # Voice-related functions
57
  def generate_audio_prompt(text, filename):
 
58
  try:
59
  tts = gTTS(text)
60
  tts.save(os.path.join("static", filename))
61
- except gtts.tts.gTTSError as e:
62
  print(f"Error: {e}")
63
  print("Retrying after 5 seconds...")
64
- time.sleep(5) # Wait for 5 seconds before retrying
65
  generate_audio_prompt(text, filename)
66
 
67
- # Utility functions
68
- def convert_to_wav(input_path, output_path):
69
- try:
70
- audio = AudioSegment.from_file(input_path)
71
- audio = audio.set_frame_rate(16000).set_channels(1) # Convert to 16kHz, mono
72
- audio.export(output_path, format="wav")
73
- except Exception as e:
74
- print(f"Error: {str(e)}")
75
- raise Exception(f"Audio conversion failed: {str(e)}")
76
-
77
- def is_silent_audio(audio_path):
78
- audio = AudioSegment.from_wav(audio_path)
79
- nonsilent_parts = detect_nonsilent(audio, min_silence_len=500, silence_thresh=audio.dBFS-16) # Reduced silence duration
80
- print(f"Detected nonsilent parts: {nonsilent_parts}")
81
- return len(nonsilent_parts) == 0 # If no speech detected
82
-
83
  # Routes and Views
84
  @app.route("/")
85
  def index():
86
  return render_template("index.html")
87
 
88
- @app.route("/login", methods=["POST"])
89
- def login():
90
- data = request.json # Assuming voice bot sends JSON data
 
91
  name = data.get('name')
92
  email = data.get('email')
93
  phone_number = data.get('phone_number')
@@ -96,54 +109,85 @@ def login():
96
  return jsonify({'error': 'Missing required fields'}), 400
97
 
98
  try:
99
- customer_login = create_salesforce_record(sf, name, email, phone_number)
100
- session['customer_id'] = customer_login['id'] # Store customer ID in session
101
- return redirect("/menu") # Redirect to the menu page after successful login
102
  except Exception as e:
103
- return jsonify({'error': f'Failed to create record in Salesforce: {str(e)}'}), 500
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
 
105
  @app.route("/menu", methods=["GET"])
106
  def menu_page():
107
- menu_items = get_menu_items(sf) # Fetch menu items from Salesforce
108
- menu_data = [{"name": item['Name'], "price": item['Price__c'], "ingredients": item['Ingredients__c'], "category": item['Category__c']} for item in menu_items]
 
 
 
 
 
 
 
109
  return render_template("menu_page.html", menu_items=menu_data)
110
 
111
  @app.route("/cart", methods=["GET"])
112
  def cart():
 
113
  cart_items = session.get('cart_items', [])
114
  return render_template("cart_page.html", cart_items=cart_items)
115
 
116
  @app.route("/order-summary", methods=["GET"])
117
  def order_summary():
 
118
  order_details = session.get('cart_items', [])
119
  total_price = sum(item['price'] * item['quantity'] for item in order_details)
120
  return render_template("order_summary.html", order_details=order_details, total_price=total_price)
121
 
122
  @app.route("/final_order", methods=["GET"])
123
  def final_order():
 
 
 
 
124
  cart_items = session.get('cart_items', [])
125
  total_price = sum(item['price'] * item['quantity'] for item in cart_items)
126
- customer_id = session.get('customer_id', None) # Get customer ID from session
127
 
128
- if customer_id:
129
- try:
130
- order = create_salesforce_order(sf, cart_items, total_price, customer_id)
131
- session.pop('cart_items', None) # Clear cart after placing the order
132
- return render_template("final_order.html", order_details=cart_items, total_price=total_price)
133
- except Exception as e:
134
- return jsonify({'error': f'Failed to create order in Salesforce: {str(e)}'}), 500
135
- else:
136
- return jsonify({'error': 'Customer not logged in'}), 400
137
 
138
  @app.route("/add_to_cart", methods=["POST"])
139
  def add_to_cart():
140
- item_name = request.json.get('item_name')
141
- quantity = request.json.get('quantity')
142
-
 
 
 
 
 
143
  cart_items = session.get('cart_items', [])
144
- cart_items.append({"name": item_name, "quantity": quantity, "price": 10}) # Assuming a fixed price for now
145
  session['cart_items'] = cart_items
146
-
147
  return jsonify({"success": True, "message": f"Added {item_name} to cart."})
148
 
149
  # Start Production Server
 
 
 
 
1
  import os
2
+ import json
3
+ import time
4
+ from flask import Flask, render_template, request, jsonify, redirect, session
5
  from transformers import pipeline
6
  from gtts import gTTS
7
  from pydub import AudioSegment
8
  from pydub.silence import detect_nonsilent
 
 
9
  from waitress import serve
10
  from simple_salesforce import Salesforce
11
+ from dotenv import load_dotenv
12
+
13
+ # Load environment variables
14
+ load_dotenv()
15
 
16
  # Initialize Flask app
17
  app = Flask(__name__)
18
  app.secret_key = os.urandom(24) # For session handling
19
 
20
+ # Salesforce Connection
21
  try:
22
  print("Attempting to connect to Salesforce...")
23
+ sf = Salesforce(
24
+ username=os.getenv('[email protected]'),
25
+ password=os.getenv('Sati@1020'),
26
+ security_token=os.getenv('sSSjyhInIsUohKpG8sHzty2q')
27
+ )
28
  print("Connected to Salesforce successfully!")
29
  except Exception as e:
30
  print(f"Failed to connect to Salesforce: {str(e)}")
31
 
32
  # Functions for Salesforce operations
33
+ def get_customer_by_email(email):
34
+ """Check if customer exists in Salesforce."""
35
+ try:
36
+ query = f"SELECT Id FROM Customer_Login__c WHERE Email__c = '{email}'"
37
+ result = sf.query(query)
38
+ if result['records']:
39
+ return result['records'][0]['Id']
40
+ return None
41
+ except Exception as e:
42
+ print(f"Error fetching customer: {str(e)}")
43
+ return None
44
+
45
+ def create_salesforce_record(name, email, phone_number):
46
+ """Create customer login record in Salesforce."""
47
  try:
48
+ existing_customer = get_customer_by_email(email)
49
+ if existing_customer:
50
+ return {"id": existing_customer} # Return existing customer ID
51
+
52
  customer_login = sf.Customer_Login__c.create({
53
  'Name': name,
54
  'Email__c': email,
 
58
  except Exception as e:
59
  raise Exception(f"Failed to create record: {str(e)}")
60
 
61
+ def create_salesforce_order(cart_items, total_price, customer_id):
62
+ """Create order in Salesforce."""
63
  try:
64
  order = sf.Order__c.create({
65
  'Total_Price__c': total_price,
66
+ 'Cart_Items__c': json.dumps(cart_items),
67
+ 'Customer__c': customer_id
68
  })
69
  return order
70
  except Exception as e:
71
  raise Exception(f"Failed to create order: {str(e)}")
72
 
73
+ def get_menu_items():
74
+ """Fetch menu items from Salesforce."""
75
+ try:
76
+ query = "SELECT Name, Price__c, Ingredients__c, Category__c FROM Menu_Item__c"
77
+ result = sf.query(query)
78
+ return result.get('records', [])
79
+ except Exception as e:
80
+ print(f"Error fetching menu items: {str(e)}")
81
+ return []
82
 
83
+ # Voice-Related Functions
84
  def generate_audio_prompt(text, filename):
85
+ """Generate speech from text using gTTS."""
86
  try:
87
  tts = gTTS(text)
88
  tts.save(os.path.join("static", filename))
89
+ except Exception as e:
90
  print(f"Error: {e}")
91
  print("Retrying after 5 seconds...")
92
+ time.sleep(5)
93
  generate_audio_prompt(text, filename)
94
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
  # Routes and Views
96
  @app.route("/")
97
  def index():
98
  return render_template("index.html")
99
 
100
+ @app.route("/register", methods=["POST"])
101
+ def register():
102
+ """Handles new user registration."""
103
+ data = request.json
104
  name = data.get('name')
105
  email = data.get('email')
106
  phone_number = data.get('phone_number')
 
109
  return jsonify({'error': 'Missing required fields'}), 400
110
 
111
  try:
112
+ customer = create_salesforce_record(name, email, phone_number)
113
+ session['customer_id'] = customer['id']
114
+ return jsonify({'message': 'User registered successfully', 'customer_id': customer['id']}), 201
115
  except Exception as e:
116
+ return jsonify({'error': f'Failed to register user: {str(e)}'}), 500
117
+
118
+ @app.route("/login", methods=["POST"])
119
+ def login():
120
+ """Handles customer login."""
121
+ data = request.json
122
+ email = data.get('email')
123
+
124
+ if not email:
125
+ return jsonify({'error': 'Email is required'}), 400
126
+
127
+ customer_id = get_customer_by_email(email)
128
+ if customer_id:
129
+ session['customer_id'] = customer_id
130
+ return jsonify({'message': 'Login successful', 'customer_id': customer_id}), 200
131
+ else:
132
+ return jsonify({'error': 'User not found'}), 404
133
 
134
  @app.route("/menu", methods=["GET"])
135
  def menu_page():
136
+ """Displays the menu from Salesforce."""
137
+ menu_items = get_menu_items()
138
+ if not menu_items:
139
+ return jsonify({'error': 'No menu items found'}), 404
140
+
141
+ menu_data = [
142
+ {"name": item['Name'], "price": item['Price__c'], "ingredients": item.get('Ingredients__c', ''), "category": item.get('Category__c', '')}
143
+ for item in menu_items
144
+ ]
145
  return render_template("menu_page.html", menu_items=menu_data)
146
 
147
  @app.route("/cart", methods=["GET"])
148
  def cart():
149
+ """Displays the cart."""
150
  cart_items = session.get('cart_items', [])
151
  return render_template("cart_page.html", cart_items=cart_items)
152
 
153
  @app.route("/order-summary", methods=["GET"])
154
  def order_summary():
155
+ """Displays the order summary before finalizing."""
156
  order_details = session.get('cart_items', [])
157
  total_price = sum(item['price'] * item['quantity'] for item in order_details)
158
  return render_template("order_summary.html", order_details=order_details, total_price=total_price)
159
 
160
  @app.route("/final_order", methods=["GET"])
161
  def final_order():
162
+ """Handles final order placement."""
163
+ if 'cart_items' not in session or 'customer_id' not in session:
164
+ return jsonify({'error': 'No order details found'}), 400
165
+
166
  cart_items = session.get('cart_items', [])
167
  total_price = sum(item['price'] * item['quantity'] for item in cart_items)
168
+ customer_id = session['customer_id']
169
 
170
+ try:
171
+ order = create_salesforce_order(cart_items, total_price, customer_id)
172
+ session.pop('cart_items', None)
173
+ return render_template("final_order.html", order_details=cart_items, total_price=total_price)
174
+ except Exception as e:
175
+ return jsonify({'error': f'Failed to create order in Salesforce: {str(e)}'}), 500
 
 
 
176
 
177
  @app.route("/add_to_cart", methods=["POST"])
178
  def add_to_cart():
179
+ """Adds an item to the cart."""
180
+ data = request.json
181
+ item_name = data.get('item_name')
182
+ quantity = data.get('quantity')
183
+
184
+ if not item_name or not quantity:
185
+ return jsonify({'error': 'Item name and quantity required'}), 400
186
+
187
  cart_items = session.get('cart_items', [])
188
+ cart_items.append({"name": item_name, "quantity": quantity, "price": 10}) # Assuming a fixed price
189
  session['cart_items'] = cart_items
190
+
191
  return jsonify({"success": True, "message": f"Added {item_name} to cart."})
192
 
193
  # Start Production Server