Files changed (1) hide show
  1. app.py +47 -82
app.py CHANGED
@@ -58,95 +58,60 @@ app = Flask(__name__)
58
 
59
  @app.route("/bot", methods=["POST"])
60
  def bot():
61
- """
62
- Receives a message from the Node.js server.
63
- The bot implements a conversation flow:
64
- 1. Ask for the 'From' email address.
65
- 2. Ask for the recipient ('To') email address.
66
- 3. Ask for the email subject.
67
- 4. Ask for the email body.
68
- When all details are collected, the email is sent.
69
- """
70
- logger.debug("Received a request at /bot")
71
-
72
- # Ensure the request contains valid JSON
73
- if not request.is_json:
74
- logger.error("Invalid request format: Not JSON")
75
- return jsonify({"status": "error", "message": "Request must be JSON"}), 400
76
-
77
- data = request.json
78
- logger.debug(f"Request payload: {data}")
79
-
80
- # Extract sender number and message
81
- sender_number = data.get("from")
82
- message_body = data.get("message", {}).get("text", {}).get("body", "").strip()
83
-
84
- if not sender_number or not message_body:
85
- logger.error("Missing required fields in request")
86
- return jsonify({"status": "error", "message": "Missing 'from' or 'message.text.body'"}), 400
87
-
88
- logger.info(f"Processing message from {sender_number}: '{message_body}'")
89
 
90
- # Retrieve or initialize conversation state
91
  state = conversations.get(sender_number, {})
92
 
93
  if not state:
94
- logger.info(f"New conversation started for {sender_number}")
95
  conversations[sender_number] = {"step": "from"}
96
- return jsonify({"status": "success", "message": "Welcome! Please provide your 'From' email address."})
97
-
98
- step = state.get("step")
99
- logger.debug(f"Current step for {sender_number}: {step}")
100
-
101
- response_msg = "Something went wrong."
102
-
103
- if step == "from":
104
- if validate_email(message_body):
105
- state["from"] = message_body
106
- state["step"] = "to"
107
- response_msg = "Thanks! Now, please provide the recipient's email address."
108
- else:
109
- response_msg = "Invalid email format. Please provide a valid 'From' email address."
110
-
111
- elif step == "to":
112
- if validate_email(message_body):
113
- state["to"] = message_body
114
- state["step"] = "subject"
115
- response_msg = "Great! Please provide the email subject."
116
- else:
117
- response_msg = "Invalid email format. Please provide a valid recipient email address."
118
-
119
- elif step == "subject":
120
- state["subject"] = message_body
121
- state["step"] = "body"
122
- response_msg = "Almost done! Please provide the email body."
123
-
124
- elif step == "body":
125
- state["body"] = message_body
126
-
127
- from_addr = state.get("from")
128
- to_addr = state.get("to")
129
- subject = state.get("subject")
130
- body = state.get("body")
131
-
132
- logger.info(f"Attempting to send email from {from_addr} to {to_addr} with subject '{subject}'")
133
-
134
- if send_email(from_addr, to_addr, subject, body):
135
- response_msg = f"Email sent successfully from {from_addr} to {to_addr}."
136
- else:
137
- response_msg = "Failed to send email. Please try again later."
138
-
139
- # Clear the conversation state after sending
140
- del conversations[sender_number]
141
- logger.info(f"Conversation with {sender_number} cleared.")
142
-
143
  else:
144
- response_msg = "Unrecognized step. Restarting. Please provide your 'From' email address."
145
- conversations[sender_number] = {"step": "from"}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
146
 
147
- logger.debug(f"Response message to {sender_number}: {response_msg}")
148
  return jsonify({"status": "success", "message": response_msg})
149
-
150
-
151
  if __name__ == "__main__":
152
  app.run(host="0.0.0.0", port=5000, debug=True)
 
58
 
59
  @app.route("/bot", methods=["POST"])
60
  def bot():
61
+ try:
62
+ data = request.json
63
+ logger.info("Received request from Node.js server: %s", data)
64
+ sender_number = data.get("from", "unknown")
65
+ message_body = data.get("message", {}).get("text", {}).get("body", "").strip()
66
+ logger.info("Processing message from %s: %s", sender_number, message_body)
67
+ except Exception as e:
68
+ logger.error("Invalid JSON payload: %s", e)
69
+ return jsonify({"status": "error", "message": "Invalid payload"}), 400
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
 
 
71
  state = conversations.get(sender_number, {})
72
 
73
  if not state:
74
+ # Start a new conversation
75
  conversations[sender_number] = {"step": "from"}
76
+ response_msg = "Welcome to SMTP Assistant! Please provide your 'From' email address."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  else:
78
+ step = state.get("step")
79
+ if step == "from":
80
+ if validate_email(message_body):
81
+ state["from"] = message_body
82
+ state["step"] = "to"
83
+ response_msg = "Thanks! Now, please provide the recipient's email address."
84
+ else:
85
+ response_msg = "Invalid email format. Please provide a valid 'From' email address."
86
+ elif step == "to":
87
+ if validate_email(message_body):
88
+ state["to"] = message_body
89
+ state["step"] = "subject"
90
+ response_msg = "Great! Please provide the email subject."
91
+ else:
92
+ response_msg = "Invalid email format. Please provide a valid recipient email address."
93
+ elif step == "subject":
94
+ state["subject"] = message_body
95
+ state["step"] = "body"
96
+ response_msg = "Almost done! Please provide the email body."
97
+ elif step == "body":
98
+ state["body"] = message_body
99
+ from_addr = state.get("from")
100
+ to_addr = state.get("to")
101
+ subject = state.get("subject")
102
+ body = state.get("body")
103
+ if send_email(from_addr, to_addr, subject, body):
104
+ response_msg = f"Email sent successfully from {from_addr} to {to_addr}."
105
+ else:
106
+ response_msg = "Failed to send email. Please try again later."
107
+ # Clear the conversation state after sending
108
+ del conversations[sender_number]
109
+ else:
110
+ response_msg = "Unrecognized step. Let's start over. Please provide your 'From' email address."
111
+ conversations[sender_number] = {"step": "from"}
112
 
113
+ logger.info("Sending response to Node.js server: %s", response_msg)
114
  return jsonify({"status": "success", "message": response_msg})
115
+
 
116
  if __name__ == "__main__":
117
  app.run(host="0.0.0.0", port=5000, debug=True)