| from typing import Dict, Optional, Any | |
| from bot_definitions import BotType, call_transfer, simple_dialin, simple_dialout, voicemail_detection | |
| class BotRegistry: | |
| def __init__(self): | |
| self.bots: Dict[str, BotType] = { | |
| "call_transfer": call_transfer, | |
| "simple_dialin": simple_dialin, | |
| "simple_dialout": simple_dialout, | |
| "voicemail_detection": voicemail_detection, | |
| } | |
| def get_bot(self, name: str) -> Optional[BotType]: | |
| return self.bots.get(name) | |
| def detect_bot_type(self, body: Dict[str, Any]) -> Optional[str]: | |
| for bot in self.bots.values(): | |
| if bot.config_key in body: | |
| return bot.name | |
| if all(key in body for key in ["From", "To", "callId", "callDomain"]): | |
| return "call_transfer" | |
| return None | |
| def setup_configuration(self, config: Dict[str, Any]) -> Dict[str, Any]: | |
| body = {} | |
| bot_name = config.get("bot_type") | |
| bot = self.get_bot(bot_name) | |
| if bot: | |
| body[bot.config_key] = config.get("settings", {}) | |
| return body |