"""保单智能客服系统 — 独立后端入口 独立部署时使用的 Flask 应用,不依赖 Dify 扩展。 """ import os from flask import Flask from flask_cors import CORS from dotenv import load_dotenv # 加载环境变量 load_dotenv() def create_app() -> Flask: """创建 Flask 应用。""" app = Flask(__name__) # 配置 app.config['SECRET_KEY'] = os.getenv('JWT_SECRET', 'baodan-jwt-secret-2026') app.config['JWT_SECRET'] = os.getenv('JWT_SECRET', 'baodan-jwt-secret-2026') app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.config['REDIS_URL'] = os.getenv('REDIS_URL') # 数据库:优先 DATABASE_URL,其次 DB_* 变量构建 PostgreSQL URL,最后回退到 SQLite db_url = os.getenv('DATABASE_URL', '') if not db_url: # 从 DB_* 环境变量构建 PostgreSQL URL db_host = os.getenv('DB_HOST', '') db_port = os.getenv('DB_PORT', '5432') db_user = os.getenv('DB_USERNAME', '') db_pass = os.getenv('DB_PASSWORD', '') db_name = os.getenv('DB_DATABASE', '') if db_host and db_user and db_name: db_url = f"postgresql://{db_user}:{db_pass}@{db_host}:{db_port}/{db_name}" if db_url and 'postgresql' in db_url: # 检查 psycopg2 是否可用 try: import psycopg2 app.config['SQLALCHEMY_DATABASE_URI'] = db_url except ImportError: print("[warning] psycopg2 未安装,回退到 SQLite") app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///baodan.db' else: app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///baodan.db' app.config['MIGRATION_ENABLED'] = True # Dify 配置 app.config['BAODAN_API_URL'] = os.getenv('DIFY_BASE_URL', 'http://localhost:5001') app.config['BAODAN_CHAT_API_KEY'] = os.getenv('DIFY_CHAT_APP_API_KEY', '') app.config['BAODAN_WORKFLOW_API_KEY'] = os.getenv('DIFY_WORKFLOW_APP_API_KEY', '') # 企业微信配置 app.config['WECOM_CORP_ID'] = os.getenv('WECOM_CORP_ID', '') app.config['WECOM_SECRET'] = os.getenv('WECOM_SECRET', '') app.config['WECOM_TOKEN'] = os.getenv('WECOM_TOKEN', '') app.config['WECOM_AES_KEY'] = os.getenv('WECOM_AES_KEY', '') app.config['WECOM_WEBHOOK_URL'] = os.getenv('WECOM_WEBHOOK_URL', '') # 访客模式 app.config['GUEST_MODE'] = os.getenv('GUEST_MODE', 'true').lower() == 'true' # 域名(分享链接用) app.config['DOMAIN'] = os.getenv('DOMAIN', 'localhost') # CORS CORS(app, resources={r"/*": {"origins": "*"}}) # 初始化数据库 from insurance.db.database import init_db init_db(app) # 初始化 Redis from insurance.db.redis import init_redis init_redis(app) # 注册路由 from insurance.routes import register_insurance_routes register_insurance_routes(app) # 注册错误处理器 from insurance.utils.error_handler import register_error_handlers register_error_handlers(app) # 健康检查 @app.route('/health') def health(): return {'status': 'ok', 'service': 'baodanagent-api'} return app # 创建应用实例 app = create_app() if __name__ == '__main__': port = int(os.getenv('PORT', 5001)) debug = os.getenv('FLASK_DEBUG', 'false').lower() == 'true' app.run(host='0.0.0.0', port=port, debug=debug)