whatsapp.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import argparse
  2. import logging
  3. import signal
  4. import sys
  5. from flask import Flask, request
  6. from twilio.twiml.messaging_response import MessagingResponse
  7. from .base import BaseBot
  8. class WhatsAppBot(BaseBot):
  9. def __init__(self):
  10. super().__init__()
  11. def handle_message(self, message):
  12. if message.startswith("add "):
  13. response = self.add_data(message)
  14. else:
  15. response = self.ask_bot(message)
  16. return response
  17. def add_data(self, message):
  18. data = message.split(" ")[-1]
  19. try:
  20. self.add(data)
  21. response = f"Added data from: {data}"
  22. except Exception:
  23. logging.exception(f"Failed to add data {data}.")
  24. response = "Some error occurred while adding data."
  25. return response
  26. def ask_bot(self, message):
  27. try:
  28. response = self.query(message)
  29. except Exception:
  30. logging.exception(f"Failed to query {message}.")
  31. response = "An error occurred. Please try again!"
  32. return response
  33. def start(self, host="0.0.0.0", port=5000, debug=True):
  34. app = Flask(__name__)
  35. def signal_handler(sig, frame):
  36. logging.info("\nGracefully shutting down the WhatsAppBot...")
  37. sys.exit(0)
  38. signal.signal(signal.SIGINT, signal_handler)
  39. @app.route("/chat", methods=["POST"])
  40. def chat():
  41. incoming_message = request.values.get("Body", "").lower()
  42. response = self.handle_message(incoming_message)
  43. twilio_response = MessagingResponse()
  44. twilio_response.message(response)
  45. return str(twilio_response)
  46. app.run(host=host, port=port, debug=debug)
  47. def start_command():
  48. parser = argparse.ArgumentParser(description="EmbedChain WhatsAppBot command line interface")
  49. parser.add_argument("--host", default="0.0.0.0", help="Host IP to bind")
  50. parser.add_argument("--port", default=5000, type=int, help="Port to bind")
  51. args = parser.parse_args()
  52. whatsapp_bot = WhatsAppBot()
  53. whatsapp_bot.start(host=args.host, port=args.port)
  54. if __name__ == "__main__":
  55. start_command()