| """WhatsApp simulator — pipes JSON payloads into the inbound handler. |
| |
| Person C can use this for demos without a real WhatsApp number. |
| |
| Usage: |
| # In Python |
| from tests.wa_sim import simulate, conversation |
| |
| r = simulate("+919876543210", "Book appointment for tomorrow") |
| print(r.body) |
| |
| # Or run interactively |
| python -m tests.wa_sim |
| """ |
|
|
| from __future__ import annotations |
|
|
| import sys |
|
|
| from app.agents.appointment.api import handle_inbound_message |
| from app.contracts import CommunicationDraft |
|
|
|
|
| def simulate( |
| sender_phone: str, |
| message: str, |
| channel: str = "whatsapp", |
| ) -> CommunicationDraft: |
| """Send a single inbound message and return the reply draft.""" |
| payload = {"from": sender_phone, "to": "+14155238886", "body": message, "media": []} |
| return handle_inbound_message(channel=channel, payload=payload) |
|
|
|
|
| def conversation(sender_phone: str, messages: list[str]) -> list[CommunicationDraft]: |
| """Send a list of messages in sequence and return all reply drafts.""" |
| return [simulate(sender_phone, msg) for msg in messages] |
|
|
|
|
| |
| |
| |
|
|
| def _repl() -> None: |
| phone = "+919876543210" |
| print("CliniqAI WhatsApp Simulator") |
| print(f"Simulating sender: {phone}") |
| print("Type your message (Ctrl-C to quit)\n") |
| while True: |
| try: |
| msg = input("You: ").strip() |
| except (KeyboardInterrupt, EOFError): |
| print("\nBye!") |
| break |
| if not msg: |
| continue |
| draft = simulate(phone, msg) |
| print(f"Bot: {draft.body}\n") |
|
|
|
|
| if __name__ == "__main__": |
| if len(sys.argv) > 1: |
| |
| phone = sys.argv[1] if len(sys.argv) > 2 else "+919876543210" |
| message = sys.argv[-1] |
| draft = simulate(phone, message) |
| print(draft.body) |
| else: |
| _repl() |
|
|