from flask import Flask, request, jsonify from dotenv import load_dotenv import os from helper.openai_api import chat_completion from helper.messenger_api import send_message, set_typing_on, set_typing_off # Load environment variables load_dotenv() app = Flask(__name__) # Retrieve environment variables VERIFY_TOKEN = os.getenv('VERIFY_TOKEN') PAGE_ACCESS_TOKEN = os.getenv('PAGE_ACCESS_TOKEN') OPENAI_API_KEY = os.getenv('OPENAI_API_KEY') # Debugging: Print the loaded environment variables print(f"VERIFY_TOKEN: {VERIFY_TOKEN}") print(f"PAGE_ACCESS_TOKEN: {PAGE_ACCESS_TOKEN}") print(f"OPENAI_API_KEY: {OPENAI_API_KEY}") @app.route('/', methods=['GET']) def home(): return 'FACEBOOK CHATBOT', 200 @app.route('/facebook', methods=['GET']) def verify_webhook(): mode = request.args.get('hub.mode') token = request.args.get('hub.verify_token') challenge = request.args.get('hub.challenge') if mode == 'subscribe' and token == VERIFY_TOKEN: return challenge, 200 else: return 'Forbidden', 403 @app.route('/webhook', methods=['POST']) def handle_messages(): body = request.get_json() print('Incoming request body:', body) # Log the entire request body if not body.get('entry') or not body['entry'][0].get('messaging'): return 'Invalid payload', 400 messaging_event = body['entry'][0]['messaging'][0] sender_id = messaging_event['sender']['id'] message_text = messaging_event['message'].get('text') if not sender_id or not message_text: return 'Invalid message', 400 set_typing_on(sender_id) result = chat_completion(message_text) response_text = result.get('response', '') try: parsed_response = response_text # Caution: using eval() is dangerous, ensure the content is trusted if not isinstance(parsed_response, dict): raise ValueError("Response is not a valid dictionary") except: parsed_response = {'msg': response_text, 'image_url': None} msg = parsed_response.get('msg') image_url = parsed_response.get('image_url') send_message(sender_id, msg, image_url) set_typing_off(sender_id) return 'OK', 200 if __name__ == '__main__': app.run(host="0.0.0.0", port=7860, debug=True)