whatsapp fixes

This commit is contained in:
debu-2 2026-10-03 00:54:52 +05:30
parent ff01efe4bb
commit 248acba741
5 changed files with 425 additions and 38 deletions

View file

@ -24,6 +24,7 @@ class SendAgentMessagePayload(BaseModel):
customer_name: str = Field(min_length=1, max_length=120)
report_group: str = Field(min_length=3, max_length=50)
report_id: str | None = Field(default=None, max_length=120)
report_url: str | None = Field(default=None, max_length=500)
def serialize_agent_template(template: AgentMessageTemplate, *, subscribed: bool = False) -> dict:
@ -97,31 +98,46 @@ def _validate_report_id(report_id: str) -> str:
return cleaned
def _build_report_url(
template: AgentMessageTemplate,
report_group: str,
report_id: str,
override: str | None = None,
) -> str:
if override:
return override.strip()
base = (template.button_url_base or "https://urmiai.com/reports/").rstrip("/")
return f"{base}/{report_group}/{report_id}"
def _build_template_components(
template: AgentMessageTemplate,
customer_name: str,
report_group: str,
report_id: str,
report_url: str,
) -> list[dict]:
"""Build Meta template components using positional variables.
agent_run_completion uses:
body {{1}} -> customer name
button {{1}} -> report URL path suffix OR full URL depending on Meta template config.
We pass the full hosted report URL for the button so the View Report link resolves correctly.
"""
components: list[dict] = [
{
"type": "body",
"parameters": [
{
"type": "text",
"parameter_name": "customer_name",
"text": customer_name.strip(),
}
],
"parameters": [{"type": "text", "text": customer_name.strip()}],
}
]
if template.button_label and template.button_url_base:
# Meta URL button: pass path suffix relative to button_url_base (e.g. desi-clans-test/2026-10-03)
base = template.button_url_base.rstrip("/")
button_param = report_url[len(base) + 1 :] if report_url.startswith(f"{base}/") else report_url
components.append(
{
"type": "button",
"sub_type": "url",
"index": "0",
"parameters": [{"type": "text", "text": f"{report_group}/{report_id}"}],
"parameters": [{"type": "text", "text": button_param}],
}
)
return components
@ -148,7 +164,8 @@ async def send_agent_template_message(
report_group = _validate_report_group(payload.report_group)
report_id = _validate_report_id(payload.report_id or f"run-{secrets.token_hex(3)}")
components = _build_template_components(template, payload.customer_name, report_group, report_id)
report_url = _build_report_url(template, report_group, report_id, payload.report_url)
components = _build_template_components(template, payload.customer_name, report_url)
client = _whatsapp_client(db)
try:
@ -170,6 +187,7 @@ async def send_agent_template_message(
"customer_name": payload.customer_name.strip(),
"report_group": report_group,
"report_id": report_id,
"report_url": report_url,
},
wa_message_id=wa_message_id,
status="sent",
@ -179,11 +197,6 @@ async def send_agent_template_message(
db.commit()
db.refresh(log)
report_url = (
f"{template.button_url_base.rstrip('/')}/{report_group}/{report_id}"
if template.button_url_base
else None
)
return {
"success": True,
"template": template.slug,
@ -279,22 +292,24 @@ def build_agent_message_docs(template: AgentMessageTemplate) -> dict:
"customer_name": "Recipient name inserted into the template body",
"report_group": "Urmiport report group slug used in the hosted report URL",
"report_id": "Optional report postfix; auto-generated when omitted",
"report_url": "Optional full report URL override for the WhatsApp button (auto-built when omitted)",
},
"example": {
"template": template.slug,
"to": "919149154337",
"customer_name": "Suyash",
"report_group": "acme-agent-runs",
"report_id": "run-abc123",
"report_group": "desi-clans-test",
"report_id": "2026-10-03",
"report_url": "https://urmiai.com/reports/desi-clans-test/2026-10-03",
},
"response_example": {
"success": True,
"template": template.slug,
"to": "919149154337",
"customer_name": "Suyash",
"report_group": "acme-agent-runs",
"report_id": "run-abc123",
"report_url": f"{template.button_url_base or ''}acme-agent-runs/run-abc123",
"report_group": "desi-clans-test",
"report_id": "2026-10-03",
"report_url": "https://urmiai.com/reports/desi-clans-test/2026-10-03",
"wa_message_id": "wamid.HBg...",
"dispatch_id": "00000000-0000-0000-0000-000000000001",
},
@ -304,5 +319,6 @@ def build_agent_message_docs(template: AgentMessageTemplate) -> dict:
"Messages are sent from the Urmi AI WhatsApp business number on your behalf.",
"Create the report group in Console → Agent → Urmiport before sending.",
"If report_id is omitted, Urmi generates a unique postfix automatically.",
"The WhatsApp button uses positional template variables: body {{1}} = customer_name, button suffix = report_group/report_id.",
],
}

View file

@ -22,25 +22,18 @@ DEFAULT_AGENT_TEMPLATES = [
"category": "utility",
"parameters": [
{
"name": "customer_name",
"name": "{{1}}",
"type": "string",
"required": True,
"description": "Recipient display name shown in the greeting",
"description": "Positional body variable — recipient display name",
"example": "Suyash",
},
{
"name": "report_group",
"name": "{{2}}",
"type": "string",
"required": True,
"description": "Urmiport report group slug used in the hosted report URL",
"example": "acme-agent-runs",
},
{
"name": "report_id",
"type": "string",
"required": True,
"description": "Report postfix appended after the report group in the View Report button URL",
"example": "run-abc123",
"description": "Positional button variable — report path suffix (report_group/report_id)",
"example": "desi-clans-test/2026-10-03",
},
],
"button_label": "View Report",

View file

@ -55,7 +55,13 @@ def _explorer_doc_for_template(template: AgentMessageTemplate) -> dict:
"type": "string",
"required": False,
"description": "Report postfix; auto-generated when omitted",
"example": "run-abc123",
"example": "2026-10-03",
},
"report_url": {
"type": "string",
"required": False,
"description": "Full hosted report URL for the WhatsApp button; auto-built when omitted",
"example": "https://urmiai.com/reports/desi-clans-test/2026-10-03",
},
},
"responses": {
@ -66,9 +72,9 @@ def _explorer_doc_for_template(template: AgentMessageTemplate) -> dict:
"template": template.slug,
"to": "919149154337",
"customer_name": "Suyash",
"report_group": "acme-agent-runs",
"report_id": "run-abc123",
"report_url": f"{template.button_url_base or ''}acme-agent-runs/run-abc123",
"report_group": "desi-clans-test",
"report_id": "2026-10-03",
"report_url": "https://urmiai.com/reports/desi-clans-test/2026-10-03",
"wa_message_id": "wamid.HBg...",
"dispatch_id": "00000000-0000-0000-0000-000000000001",
},