WA template
This commit is contained in:
parent
7a2e21ba61
commit
d272ae0bd3
12 changed files with 1359 additions and 5 deletions
|
|
@ -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)."""
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue