voiceflask / app.py
nagasurendra's picture
Update app.py
fd0208c verified
import speech_recognition as sr
import whisper
from simple_salesforce import Salesforce
from flask import Flask, jsonify
app = Flask(__name__)
# Initialize Whisper Model
model = whisper.load_model("base")
# Salesforce Authentication
sf = Salesforce(
username="diggavalli98@gmail.com",
password="Sati@1020",
security_token="sSSjyhInIsUohKpG8sHzty2q"
)
def print_text(text):
"""Debugging function to replace TTS output"""
print(text)
def listen():
"""Capture live voice and return text"""
recognizer = sr.Recognizer()
with sr.Microphone() as source:
print_text("Listening...")
recognizer.adjust_for_ambient_noise(source) # Adjust for background noise
audio = recognizer.listen(source)
try:
# Convert speech to text using Whisper
file_path = "temp.wav"
with open(file_path, "wb") as f:
f.write(audio.get_wav_data())
result = model.transcribe(file_path)
return result["text"].strip()
except Exception as e:
return f"Error: {str(e)}"
def extract_name(text):
"""Extract name dynamically from sentence (e.g., 'My name is John' -> 'John')"""
words = text.split()
if "name" in words:
idx = words.index("name")
if idx + 1 < len(words):
return words[idx + 1] # Assume name follows "name is"
return words[-1] # If format is unknown, use last word
def extract_phone(text):
"""Extract phone number dynamically from sentence"""
words = text.split()
for word in words:
if word.isdigit() and len(word) >= 7: # Phone numbers are usually >=7 digits
return word
return None
def check_salesforce(name, phone):
"""Check if the given name and phone exist in Salesforce"""
query = f"SELECT Id FROM Traveller__c WHERE Name = '{name}' AND Phone__c = '{phone}'"
result = sf.query(query)
return result["totalSize"] > 0 # True if record exists
@app.route('/voice-login', methods=['GET'])
def voice_login():
"""Main voice authentication process"""
# Step 1: Ask Name
print_text("What is your name?")
name_response = listen()
print_text(f"User said: {name_response}")
name = extract_name(name_response)
if not name:
return jsonify({"error": "Name not recognized"}), 400
print_text(f"Hello {name}, please say your phone number.")
# Step 2: Ask Phone Number
phone_response = listen()
print_text(f"User said: {phone_response}")
phone = extract_phone(phone_response)
if not phone:
return jsonify({"error": "Phone number not recognized"}), 400
# Step 3: Authenticate in Salesforce
if check_salesforce(name, phone):
print_text("Login successful! Welcome.")
return jsonify({"message": "Login Successful"})
print_text("Login failed. Invalid credentials.")
return jsonify({"error": "Invalid Credentials"}), 401
if __name__ == "__main__":
app.run(debug=True)