diff --git a/CHANGELOG.md b/CHANGELOG.md index 3cd715776..2b078fe80 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Added `--whatsapp` flag to runner to better surface WhatsApp transport logs. + - Added `on_connected` and `on_disconnected` events to TTS and STT websocket-based services. diff --git a/src/pipecat/runner/run.py b/src/pipecat/runner/run.py index 4663b115d..a3e2984e8 100644 --- a/src/pipecat/runner/run.py +++ b/src/pipecat/runner/run.py @@ -166,6 +166,7 @@ def _create_server_app( host: str = "localhost", proxy: str, esp32_mode: bool = False, + whatsapp_enabled: bool = False, folder: Optional[str] = None, ): """Create FastAPI app with transport-specific routes.""" @@ -182,7 +183,8 @@ def _create_server_app( # Set up transport-specific routes if transport_type == "webrtc": _setup_webrtc_routes(app, esp32_mode=esp32_mode, host=host, folder=folder) - _setup_whatsapp_routes(app) + if whatsapp_enabled: + _setup_whatsapp_routes(app) elif transport_type == "daily": _setup_daily_routes(app) elif transport_type in TELEPHONY_TRANSPORTS: @@ -289,32 +291,37 @@ def _add_lifespan_to_app(app: FastAPI, new_lifespan): def _setup_whatsapp_routes(app: FastAPI): """Set up WebRTC-specific routes.""" - WHATSAPP_TOKEN = os.getenv("WHATSAPP_TOKEN") - WHATSAPP_PHONE_NUMBER_ID = os.getenv("WHATSAPP_PHONE_NUMBER_ID") - WHATSAPP_WEBHOOK_VERIFICATION_TOKEN = os.getenv("WHATSAPP_WEBHOOK_VERIFICATION_TOKEN") WHATSAPP_APP_SECRET = os.getenv("WHATSAPP_APP_SECRET") + WHATSAPP_PHONE_NUMBER_ID = os.getenv("WHATSAPP_PHONE_NUMBER_ID") + WHATSAPP_TOKEN = os.getenv("WHATSAPP_TOKEN") + WHATSAPP_WEBHOOK_VERIFICATION_TOKEN = os.getenv("WHATSAPP_WEBHOOK_VERIFICATION_TOKEN") if not all( [ - WHATSAPP_TOKEN, - WHATSAPP_PHONE_NUMBER_ID, - WHATSAPP_WEBHOOK_VERIFICATION_TOKEN, WHATSAPP_APP_SECRET, + WHATSAPP_PHONE_NUMBER_ID, + WHATSAPP_TOKEN, + WHATSAPP_WEBHOOK_VERIFICATION_TOKEN, ] ): - logger.trace( + logger.error( """Missing required environment variables for WhatsApp transport: - WHATSAPP_TOKEN - WHATSAPP_PHONE_NUMBER_ID - WHATSAPP_WEBHOOK_VERIFICATION_TOKEN WHATSAPP_APP_SECRET -Keeping it disabled. + WHATSAPP_PHONE_NUMBER_ID + WHATSAPP_TOKEN + WHATSAPP_WEBHOOK_VERIFICATION_TOKEN """ ) return - # only import WhatsApp dependencies if appropriate env vars are present try: + from pipecat_ai_small_webrtc_prebuilt.frontend import SmallWebRTCPrebuiltUI + + from pipecat.transports.smallwebrtc.connection import SmallWebRTCConnection + from pipecat.transports.smallwebrtc.request_handler import ( + SmallWebRTCRequest, + SmallWebRTCRequestHandler, + ) from pipecat.transports.whatsapp.api import WhatsAppWebhookRequest from pipecat.transports.whatsapp.client import WhatsAppClient except ImportError as e: @@ -690,6 +697,12 @@ def main(): parser.add_argument( "--verbose", "-v", action="count", default=0, help="Increase logging verbosity" ) + parser.add_argument( + "--whatsapp", + action="store_true", + default=False, + help="Ensure requried WhatsApp environment variables are present", + ) args = parser.parse_args() @@ -732,10 +745,11 @@ def main(): print() if args.esp32: print(f"🚀 Bot ready! (ESP32 mode)") - print(f" → Open http://{args.host}:{args.port}/client in your browser") + elif args.whatsapp: + print(f"🚀 Bot ready! (WhatsApp)") else: print(f"🚀 Bot ready!") - print(f" → Open http://{args.host}:{args.port}/client in your browser") + print(f" → Open http://{args.host}:{args.port}/client in your browser") print() elif args.transport == "daily": print() @@ -753,6 +767,7 @@ def main(): host=args.host, proxy=args.proxy, esp32_mode=args.esp32, + whatsapp_enabled=args.whatsapp, folder=args.folder, )