| from datetime import datetime |
| from pydantic import BaseModel, Field |
| from .models import PageContext, Channel, RiskLevel, PublishMode |
|
|
| class MediaAttachment(BaseModel): |
| media_path: str |
| media_type: str = "image" |
| mime_type: str | None = None |
| alt_text: str | None = None |
| label: str | None = None |
|
|
| class NormalizedInboundEvent(BaseModel): |
| page_context: PageContext |
| platform_page_id: str |
| channel: Channel |
| event_type: str |
| sender_id_hash: str | None = None |
| object_id: str | None = None |
| parent_id: str | None = None |
| permalink_url: str | None = None |
| message_text: str | None = None |
| normalized_payload: dict = Field(default_factory=dict) |
|
|
| class CreateDraftRequest(BaseModel): |
| page_context: PageContext |
| channel: Channel |
| source_event_id: int | None = None |
| target_object_id: str | None = None |
| recipient_psid: str | None = None |
| draft_text: str |
| sources: list[str] = Field(default_factory=list) |
| media_attachments: list[MediaAttachment] = Field(default_factory=list) |
| media_required: bool = False |
| publish_mode: PublishMode = PublishMode.now |
| scheduled_publish_time: datetime | None = None |
| risk_level: RiskLevel = RiskLevel.medium |
| created_by: str = "openclaw" |
|
|
| class ApproveDraftRequest(BaseModel): |
| approved_by: str |
| edited_text: str | None = None |
| publish_mode: PublishMode | None = None |
| scheduled_publish_time: datetime | None = None |
|
|
| class EditDraftRequest(BaseModel): |
| edited_by: str |
| draft_text: str | None = None |
| sources: list[str] | None = None |
| media_attachments: list[MediaAttachment] | None = None |
| media_required: bool | None = None |
| publish_mode: PublishMode | None = None |
| scheduled_publish_time: datetime | None = None |
|
|
| class RejectDraftRequest(BaseModel): |
| rejected_by: str |
| reason: str |
|
|
| class PublishPagePostRequest(BaseModel): |
| page_context: PageContext |
| message: str |
| approved_by: str |
| sources: list[str] = Field(default_factory=list) |
| media_attachments: list[MediaAttachment] = Field(default_factory=list) |
| media_required: bool = False |
| publish_mode: PublishMode = PublishMode.now |
| scheduled_publish_time: datetime | None = None |
|
|
| class PublishReelRequest(BaseModel): |
| page_context: PageContext |
| video_path: str |
| description: str |
| approved_by: str |
| title: str | None = None |
| validation_only: bool = False |
| sources: list[str] = Field(default_factory=list) |
|
|
| class SendMessengerRequest(BaseModel): |
| page_context: PageContext |
| recipient_psid: str |
| message: str |
| approved_by: str |
| messaging_type: str = "RESPONSE" |
|
|
| class ReplyToCommentRequest(BaseModel): |
| page_context: PageContext |
| comment_id: str |
| message: str |
| approved_by: str |
|
|
| class ModerateCommentRequest(BaseModel): |
| page_context: PageContext |
| comment_id: str |
| action: str = Field(pattern="^(hide|unhide|delete)$") |
| approved_by: str |
| reason: str |
|
|