Skip to main content

plexus_comms/activations/whatsapp/
types.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4// Request types
5#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
6pub struct SendMessageParams {
7    pub to: String, // Phone number in E.164 format
8    pub message: MessageContent,
9}
10
11#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
12#[serde(tag = "type", rename_all = "snake_case")]
13pub enum MessageContent {
14    Text { body: String },
15    Template { name: String, language: String },
16    Media { url: String, caption: Option<String> },
17}
18
19// Response/Event types
20#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
21#[serde(tag = "type", rename_all = "snake_case")]
22pub enum SendMessageEvent {
23    Sent {
24        message_id: String,
25        to: String,
26    },
27    Error {
28        message: String,
29        code: Option<String>,
30    },
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
34#[serde(tag = "type", rename_all = "snake_case")]
35pub enum WebhookEvent {
36    Message {
37        message_id: String,
38        from: String,
39        timestamp: i64,
40        content: MessageContent,
41    },
42    Status {
43        message_id: String,
44        status: DeliveryStatus,
45    },
46    Error {
47        message: String,
48    },
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
52#[serde(rename_all = "lowercase")]
53pub enum DeliveryStatus {
54    Sent,
55    Delivered,
56    Read,
57    Failed,
58}