Back to Agno

Test Log: 19_whatsapp

cookbook/05_agent_os/19_whatsapp/TEST_LOG.md

2.8.24.5 KB
Original Source

Test Log: 19_whatsapp

Date: 2026-07-24

Library source: /Users/ab/code/worktrees/agno-agent-os-rewrite/libs/agno at commit a7ffb023da5f99a1c43fe28a181e379d855831ba.

Each example was imported with sentinel credentials. The checks exercised only the in-process AgentOS app, local routes, and Meta's GET verification challenge. No model inference, signed webhook POST, Meta API call, or message/media delivery was attempted.

Credentials required for a later live run:

FilesRequired environment
basic.py, interactive.py, reasoning_agent.pyWHATSAPP_ACCESS_TOKEN, WHATSAPP_PHONE_NUMBER_ID, WHATSAPP_VERIFY_TOKEN, WHATSAPP_APP_SECRET, OPENAI_API_KEY
media.pyWHATSAPP_ACCESS_TOKEN, WHATSAPP_PHONE_NUMBER_ID, WHATSAPP_VERIFY_TOKEN, WHATSAPP_APP_SECRET, GOOGLE_API_KEY, FAL_API_KEY
multiple_instances.pyBASIC_WHATSAPP_ACCESS_TOKEN, BASIC_WHATSAPP_PHONE_NUMBER_ID, BASIC_WHATSAPP_VERIFY_TOKEN, RESEARCH_WHATSAPP_ACCESS_TOKEN, RESEARCH_WHATSAPP_PHONE_NUMBER_ID, RESEARCH_WHATSAPP_VERIFY_TOKEN, process-wide WHATSAPP_APP_SECRET, OPENAI_API_KEY

basic.py

Status: PASS

Test mode: CONSTRUCTION_SMOKE

Description: Constructs one persistent Agent on the default WhatsApp interface.

Observed result: /health returned status=ok; /config returned OS whatsapp-basic-os, Agent whatsapp-assistant, and interface /whatsapp. OpenAPI contained GET /whatsapp/status and GET, POST /whatsapp/webhook. The status route returned {"status": "available"}, and the GET verification challenge returned basic-challenge.


interactive.py

Status: PASS

Test mode: CONSTRUCTION_SMOKE

Description: Constructs the focused reply-button, list, location, and reaction tool configuration.

Observed result: /health returned status=ok; /config returned OS whatsapp-interactive-os, Agent whatsapp-concierge, and interface /whatsapp. OpenAPI contained the expected status and GET/POST webhook routes. The status route returned {"status": "available"}, and the GET verification challenge returned interactive-challenge.


media.py

Status: PASS

Test mode: CONSTRUCTION_SMOKE

Description: Constructs the Gemini multimodal Agent, Gemini image tool, Fal video tool, and a 60-second WhatsApp media timeout.

Observed result: With sentinel GOOGLE_API_KEY and FAL_API_KEY, /health returned status=ok; /config returned OS whatsapp-media-os, Agent whatsapp-media-agent, and interface /whatsapp. OpenAPI contained the expected status and GET/POST webhook routes. The status route returned {"status": "available"}, and the GET verification challenge returned media-challenge.


reasoning_agent.py

Status: PASS

Test mode: CONSTRUCTION_SMOKE

Description: Constructs a reasoning Agent with the WhatsApp interface's show_reasoning=True behavior enabled.

Observed result: /health returned status=ok; /config returned OS whatsapp-reasoning-os, Agent whatsapp-reasoning-agent, and interface /whatsapp. OpenAPI contained the expected status and GET/POST webhook routes. The status route returned {"status": "available"}, and the GET verification challenge returned reasoning-challenge.


multiple_instances.py

Status: PASS

Test mode: CONSTRUCTION_SMOKE

Description: Constructs two independently credentialed WhatsApp interfaces under /basic and /web-research.

Observed result: With six bot-specific sentinel credentials, /health returned status=ok; /config returned OS whatsapp-multiple-os, Agents whatsapp-basic-bot and whatsapp-research-bot, and both interface prefixes. Both status routes returned {"status": "available"}. OpenAPI contained GET status and GET/POST webhook routes under both prefixes. The GET challenges returned basic-bot-challenge and research-bot-challenge.

Known live limitation: Signed POST validation still reads one global WHATSAPP_APP_SECRET; this construction smoke does not claim secure delivery from two Meta apps with distinct app secrets.


Folder Validation

  • Cookbook pattern checker: 5 files checked, 0 violations.
  • Ruff format check: 5 files already formatted.
  • Ruff lint: all checks passed.
  • In-memory compilation: all 5 Python files compiled.
  • Documentation shape: 5 README file entries and 5 PASS construction-smoke records; every status is PASS.
  • Stale-model, stale-path, emoji, and legacy-log scans: 0 hits.
  • git diff --check passed for the new folder and mapped legacy deletions.