WA template

This commit is contained in:
debu-2 2026-10-02 21:59:13 +05:30
parent 7a2e21ba61
commit d272ae0bd3
12 changed files with 1359 additions and 5 deletions

View file

@ -103,6 +103,12 @@ class UserAccount(Base):
sms_delivery_webhooks: Mapped[list["SmsDeliveryWebhook"]] = relationship(
back_populates="user", cascade="all, delete-orphan"
)
agent_template_subscriptions: Mapped[list["AgentTemplateSubscription"]] = relationship(
back_populates="user", cascade="all, delete-orphan"
)
agent_message_dispatches: Mapped[list["AgentMessageDispatchLog"]] = relationship(
back_populates="user", cascade="all, delete-orphan"
)
class PasswordCredential(Base):
@ -527,6 +533,82 @@ class WhatsAppMessage(Base):
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now(), index=True)
class AgentMessageTemplate(Base):
"""Platform WhatsApp agent message templates available for user subscription."""
__tablename__ = "agent_message_templates"
id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
slug: Mapped[str] = mapped_column(String(64), unique=True, index=True)
name: Mapped[str] = mapped_column(String(120))
description: Mapped[str] = mapped_column(String(1000))
header_text: Mapped[str | None] = mapped_column(String(120), nullable=True)
body_preview: Mapped[str] = mapped_column(String(2000))
footer_text: Mapped[str | None] = mapped_column(String(120), nullable=True)
meta_template_name: Mapped[str] = mapped_column(String(80), index=True)
language: Mapped[str] = mapped_column(String(12), default="en")
category: Mapped[str] = mapped_column(String(32), default="utility")
parameters: Mapped[list] = mapped_column(JSON, default=list)
button_label: Mapped[str | None] = mapped_column(String(40), nullable=True)
button_url_base: Mapped[str | None] = mapped_column(String(500), nullable=True)
is_active: Mapped[bool] = mapped_column(Boolean, default=True, index=True)
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
subscriptions: Mapped[list["AgentTemplateSubscription"]] = relationship(
back_populates="template", cascade="all, delete-orphan"
)
class AgentTemplateSubscription(Base):
__tablename__ = "agent_template_subscriptions"
__table_args__ = (UniqueConstraint("user_id", "template_id", name="uq_agent_template_subscription"),)
id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
user_id: Mapped[uuid.UUID] = mapped_column(
ForeignKey("user_accounts.id", ondelete="CASCADE"), index=True
)
template_id: Mapped[uuid.UUID] = mapped_column(
ForeignKey("agent_message_templates.id", ondelete="CASCADE"), index=True
)
subscribed_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
user: Mapped[UserAccount] = relationship(back_populates="agent_template_subscriptions")
template: Mapped[AgentMessageTemplate] = relationship(back_populates="subscriptions")
class AgentTemplateTestLog(Base):
__tablename__ = "agent_template_test_logs"
id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
user_id: Mapped[uuid.UUID] = mapped_column(
ForeignKey("user_accounts.id", ondelete="CASCADE"), index=True
)
template_id: Mapped[uuid.UUID] = mapped_column(
ForeignKey("agent_message_templates.id", ondelete="CASCADE"), index=True
)
recipient: Mapped[str] = mapped_column(String(20))
success: Mapped[bool] = mapped_column(Boolean, default=True)
tested_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now(), index=True)
class AgentMessageDispatchLog(Base):
__tablename__ = "agent_message_dispatch_logs"
id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
user_id: Mapped[uuid.UUID] = mapped_column(
ForeignKey("user_accounts.id", ondelete="CASCADE"), index=True
)
template_id: Mapped[uuid.UUID] = mapped_column(
ForeignKey("agent_message_templates.id", ondelete="CASCADE"), index=True
)
recipient: Mapped[str] = mapped_column(String(20), index=True)
parameters: Mapped[dict] = mapped_column(JSON, default=dict)
wa_message_id: Mapped[str | None] = mapped_column(String(128), nullable=True)
status: Mapped[str] = mapped_column(String(24), default="sent", index=True)
source: Mapped[str] = mapped_column(String(16), default="api", index=True)
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now(), index=True)
user: Mapped[UserAccount] = relationship(back_populates="agent_message_dispatches")
template: Mapped[AgentMessageTemplate] = relationship()
class PlatformSetting(Base):
"""Runtime overrides for platform credentials (admin-editable)."""