|
@@ -0,0 +1,72 @@
|
|
|
+import argparse
|
|
|
+import logging
|
|
|
+import signal
|
|
|
+import sys
|
|
|
+
|
|
|
+from flask import Flask, request
|
|
|
+from twilio.twiml.messaging_response import MessagingResponse
|
|
|
+
|
|
|
+from .base import BaseBot
|
|
|
+
|
|
|
+
|
|
|
+class WhatsAppBot(BaseBot):
|
|
|
+ def __init__(self):
|
|
|
+ super().__init__()
|
|
|
+
|
|
|
+ def handle_message(self, message):
|
|
|
+ if message.startswith("add "):
|
|
|
+ response = self.add_data(message)
|
|
|
+ else:
|
|
|
+ response = self.ask_bot(message)
|
|
|
+ return response
|
|
|
+
|
|
|
+ def add_data(self, message):
|
|
|
+ data = message.split(" ")[-1]
|
|
|
+ try:
|
|
|
+ self.add(data)
|
|
|
+ response = f"Added data from: {data}"
|
|
|
+ except Exception:
|
|
|
+ logging.exception(f"Failed to add data {data}.")
|
|
|
+ response = "Some error occurred while adding data."
|
|
|
+ return response
|
|
|
+
|
|
|
+ def ask_bot(self, message):
|
|
|
+ try:
|
|
|
+ response = self.query(message)
|
|
|
+ except Exception:
|
|
|
+ logging.exception(f"Failed to query {message}.")
|
|
|
+ response = "An error occurred. Please try again!"
|
|
|
+ return response
|
|
|
+
|
|
|
+ def start(self, host="0.0.0.0", port=5000, debug=True):
|
|
|
+ app = Flask(__name__)
|
|
|
+
|
|
|
+ def signal_handler(sig, frame):
|
|
|
+ logging.info("\nGracefully shutting down the WhatsAppBot...")
|
|
|
+ sys.exit(0)
|
|
|
+
|
|
|
+ signal.signal(signal.SIGINT, signal_handler)
|
|
|
+
|
|
|
+ @app.route("/chat", methods=["POST"])
|
|
|
+ def chat():
|
|
|
+ incoming_message = request.values.get("Body", "").lower()
|
|
|
+ response = self.handle_message(incoming_message)
|
|
|
+ twilio_response = MessagingResponse()
|
|
|
+ twilio_response.message(response)
|
|
|
+ return str(twilio_response)
|
|
|
+
|
|
|
+ app.run(host=host, port=port, debug=debug)
|
|
|
+
|
|
|
+
|
|
|
+def start_command():
|
|
|
+ parser = argparse.ArgumentParser(description="EmbedChain WhatsAppBot command line interface")
|
|
|
+ parser.add_argument("--host", default="0.0.0.0", help="Host IP to bind")
|
|
|
+ parser.add_argument("--port", default=5000, type=int, help="Port to bind")
|
|
|
+ args = parser.parse_args()
|
|
|
+
|
|
|
+ whatsapp_bot = WhatsAppBot()
|
|
|
+ whatsapp_bot.start(host=args.host, port=args.port)
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ start_command()
|