lokesh341 commited on
Commit
01780bf
·
verified ·
1 Parent(s): f06cdc6

Update app.py

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