pub struct WhatsAppConfig {Show 15 fields
pub access_token: Option<String>,
pub phone_number_id: Option<String>,
pub verify_token: Option<String>,
pub app_secret: Option<String>,
pub session_path: Option<String>,
pub pair_phone: Option<String>,
pub pair_code: Option<String>,
pub allowed_numbers: Vec<String>,
pub mode: WhatsAppWebMode,
pub dm_policy: WhatsAppChatPolicy,
pub group_policy: WhatsAppChatPolicy,
pub self_chat_mode: bool,
pub dm_mention_patterns: Vec<String>,
pub group_mention_patterns: Vec<String>,
pub proxy_url: Option<String>,
}Expand description
WhatsApp channel configuration (Cloud API or Web mode).
Set phone_number_id for Cloud API mode, or session_path for Web mode.
Fields§
§access_token: Option<String>Access token from Meta Business Suite (Cloud API mode)
phone_number_id: Option<String>Phone number ID from Meta Business API (Cloud API mode)
verify_token: Option<String>Webhook verify token (you define this, Meta sends it back for verification) Only used in Cloud API mode
app_secret: Option<String>App secret from Meta Business Suite (for webhook signature verification)
Can also be set via CONSTRUCT_WHATSAPP_APP_SECRET environment variable
Only used in Cloud API mode
session_path: Option<String>Session database path for WhatsApp Web client (Web mode) When set, enables native WhatsApp Web mode with wa-rs
pair_phone: Option<String>Phone number for pair code linking (Web mode, optional) Format: country code + number (e.g., “15551234567”) If not set, QR code pairing will be used
pair_code: Option<String>Custom pair code for linking (Web mode, optional) Leave empty to let WhatsApp generate one
allowed_numbers: Vec<String>Allowed phone numbers (E.164 format: +1234567890) or “*” for all
mode: WhatsAppWebModeUsage mode for WhatsApp Web: “business” (default) or “personal”. In personal mode the bot applies dm_policy, group_policy, and self_chat_mode to decide which chats to respond in.
dm_policy: WhatsAppChatPolicyPolicy for direct messages when mode = “personal”. “allowlist” (default) | “ignore” | “all”.
group_policy: WhatsAppChatPolicyPolicy for group chats when mode = “personal”. “allowlist” (default) | “ignore” | “all”.
self_chat_mode: boolWhen true and mode = “personal”, always respond to messages in the user’s own self-chat (Notes to Self). Defaults to false.
dm_mention_patterns: Vec<String>Regex patterns for DM mention gating (case-insensitive).
When non-empty, only direct messages matching at least one pattern are
processed; matched fragments are stripped from the forwarded content.
Example: ["@?Construct", "\\+?15555550123"]
group_mention_patterns: Vec<String>Regex patterns for group-chat mention gating (case-insensitive).
When non-empty, only group messages matching at least one pattern are
processed; matched fragments are stripped from the forwarded content.
Example: ["@?Construct", "\\+?15555550123"]
proxy_url: Option<String>Per-channel proxy URL (http, https, socks5, socks5h).
Overrides the global [proxy] setting for this channel only.
Implementations§
Source§impl WhatsAppConfig
impl WhatsAppConfig
Sourcepub fn backend_type(&self) -> &'static str
pub fn backend_type(&self) -> &'static str
Detect which backend to use based on config fields. Returns “cloud” if phone_number_id is set, “web” if session_path is set.
Sourcepub fn is_cloud_config(&self) -> bool
pub fn is_cloud_config(&self) -> bool
Check if this is a valid Cloud API config
Sourcepub fn is_web_config(&self) -> bool
pub fn is_web_config(&self) -> bool
Check if this is a valid Web config
Sourcepub fn is_ambiguous_config(&self) -> bool
pub fn is_ambiguous_config(&self) -> bool
Returns true when both Cloud and Web selectors are present.
Runtime currently prefers Cloud mode in this case for backward compatibility.
Trait Implementations§
Source§impl ChannelConfig for WhatsAppConfig
impl ChannelConfig for WhatsAppConfig
Source§impl Clone for WhatsAppConfig
impl Clone for WhatsAppConfig
Source§fn clone(&self) -> WhatsAppConfig
fn clone(&self) -> WhatsAppConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for WhatsAppConfig
impl Debug for WhatsAppConfig
Source§impl<'de> Deserialize<'de> for WhatsAppConfig
impl<'de> Deserialize<'de> for WhatsAppConfig
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl JsonSchema for WhatsAppConfig
impl JsonSchema for WhatsAppConfig
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read moreAuto Trait Implementations§
impl Freeze for WhatsAppConfig
impl RefUnwindSafe for WhatsAppConfig
impl Send for WhatsAppConfig
impl Sync for WhatsAppConfig
impl Unpin for WhatsAppConfig
impl UnsafeUnpin for WhatsAppConfig
impl UnwindSafe for WhatsAppConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more