integrations/messaging/whatsapp/dist¶
Interfaces¶
ParseWhatsAppWebhookOptions¶
Properties¶
appSecret?¶
requireSignature?¶
ValidateWhatsAppWebhookSignatureInput¶
Properties¶
appSecret¶
rawBody¶
signature¶
VerifyWhatsAppWebhookChallengeInput¶
Properties¶
challenge¶
expectedVerifyToken¶
mode¶
verifyToken¶
WhatsAppApiResponse¶
Indexable¶
Properties¶
contacts?¶
optional contacts?: {
[key: string]: WhatsAppMessagingJsonValue;
input?: string;
wa_id?: string;
}[];
Index Signature¶
input?¶
wa_id?¶
messages?¶
optional messages?: {
[key: string]: WhatsAppMessagingJsonValue;
id?: string;
message_status?: string;
}[];
Index Signature¶
id?¶
message_status?¶
messaging_product?¶
WhatsAppBusinessProfileResource¶
Indexable¶
Properties¶
about?¶
address?¶
description?¶
email?¶
messaging_product?¶
profile_picture_url?¶
vertical?¶
websites?¶
WhatsAppBusinessProfileResponse¶
Indexable¶
Properties¶
data?¶
WhatsAppCredentialStatusInput¶
Properties¶
accessToken?¶
appSecret?¶
expiresAt?¶
phoneNumberId?¶
scopes?¶
verifyToken?¶
wabaWebhookSubscribed?¶
WhatsAppLiveCheckOptions¶
Extends¶
Properties¶
accessToken?¶
Inherited from¶
WhatsAppMessagingClientOptions.accessToken
baseUrl?¶
Inherited from¶
WhatsAppMessagingClientOptions.baseUrl
client?¶
fetch?¶
Call Signature¶
Parameters¶
| Parameter | Type |
|---|---|
input |
URL | RequestInfo |
init? |
RequestInit |
Returns¶
Promise\<Response>
Call Signature¶
Parameters¶
| Parameter | Type |
|---|---|
input |
string | Request | URL |
init? |
RequestInit |
Returns¶
Promise\<Response>
Inherited from¶
WhatsAppMessagingClientOptions.fetch
graphApiBaseUrl?¶
Inherited from¶
WhatsAppMessagingClientOptions.graphApiBaseUrl
graphApiVersion?¶
Inherited from¶
WhatsAppMessagingClientOptions.graphApiVersion
phoneNumberId?¶
Inherited from¶
WhatsAppMessagingClientOptions.phoneNumberId
providerClient?¶
Inherited from¶
WhatsAppMessagingClientOptions.providerClient
retry?¶
Inherited from¶
WhatsAppMessagingClientOptions.retry
signal?¶
Inherited from¶
WhatsAppMessagingClientOptions.signal
timeoutMs?¶
Inherited from¶
WhatsAppMessagingClientOptions.timeoutMs
WhatsAppMediaResource¶
Indexable¶
Properties¶
file_size?¶
id?¶
messaging_product?¶
mime_type?¶
sha256?¶
url?¶
WhatsAppMessageInput¶
Properties¶
additionalFields?¶
audio?¶
contacts?¶
context?¶
message_id¶
document?¶
image?¶
interactive?¶
location?¶
recipientType?¶
sticker?¶
template?¶
text?¶
body¶
preview_url?¶
to¶
type¶
video?¶
WhatsAppMessagingClient¶
Extends¶
Properties¶
providerClient¶
Methods¶
downloadMedia()¶
Parameters¶
| Parameter | Type |
|---|---|
input |
string | WhatsAppMediaResource |
Returns¶
Promise\<Response>
Inherited from¶
WhatsAppMessagingProviderClient.downloadMedia
getBusinessProfile()¶
Parameters¶
| Parameter | Type |
|---|---|
fields? |
string[] |
Returns¶
Promise\<WhatsAppBusinessProfileResponse>
Inherited from¶
WhatsAppMessagingProviderClient.getBusinessProfile
getMedia()¶
Parameters¶
| Parameter | Type |
|---|---|
mediaId |
string |
Returns¶
Promise\<WhatsAppMediaResource>
Inherited from¶
WhatsAppMessagingProviderClient.getMedia
getPhoneNumber()¶
Parameters¶
| Parameter | Type |
|---|---|
fields? |
string[] |
Returns¶
Promise\<WhatsAppPhoneNumberResource>
Inherited from¶
WhatsAppMessagingProviderClient.getPhoneNumber
sendMessage()¶
Parameters¶
| Parameter | Type |
|---|---|
input |
WhatsAppMessageInput |
Returns¶
Promise\<WhatsAppApiResponse>
Inherited from¶
WhatsAppMessagingProviderClient.sendMessage
updateBusinessProfile()¶
updateBusinessProfile(input): Promise<{
[key: string]: WhatsAppMessagingJsonValue;
success?: boolean;
}>;
Parameters¶
| Parameter | Type |
|---|---|
input |
WhatsAppUpdateBusinessProfileInput |
Returns¶
Promise\<{
[key: string]: WhatsAppMessagingJsonValue;
success?: boolean;
}>
Inherited from¶
WhatsAppMessagingProviderClient.updateBusinessProfile
uploadMedia()¶
Parameters¶
| Parameter | Type |
|---|---|
input |
WhatsAppUploadMediaInput |
Returns¶
Promise\<WhatsAppMediaResource>
Inherited from¶
WhatsAppMessagingProviderClient.uploadMedia
WhatsAppMessagingClientOptions¶
Extended by¶
Properties¶
accessToken?¶
baseUrl?¶
fetch?¶
Call Signature¶
Parameters¶
| Parameter | Type |
|---|---|
input |
URL | RequestInfo |
init? |
RequestInit |
Returns¶
Promise\<Response>
Call Signature¶
Parameters¶
| Parameter | Type |
|---|---|
input |
string | Request | URL |
init? |
RequestInit |
Returns¶
Promise\<Response>
graphApiBaseUrl?¶
graphApiVersion?¶
phoneNumberId?¶
providerClient?¶
retry?¶
signal?¶
timeoutMs?¶
WhatsAppMessagingIntegrationOptions¶
Extends¶
Properties¶
accessToken?¶
Inherited from¶
WhatsAppMessagingClientOptions.accessToken
appSecret¶
baseUrl?¶
Inherited from¶
WhatsAppMessagingClientOptions.baseUrl
client?¶
fetch?¶
Call Signature¶
Parameters¶
| Parameter | Type |
|---|---|
input |
URL | RequestInfo |
init? |
RequestInit |
Returns¶
Promise\<Response>
Call Signature¶
Parameters¶
| Parameter | Type |
|---|---|
input |
string | Request | URL |
init? |
RequestInit |
Returns¶
Promise\<Response>
Inherited from¶
WhatsAppMessagingClientOptions.fetch
graphApiBaseUrl?¶
Inherited from¶
WhatsAppMessagingClientOptions.graphApiBaseUrl
graphApiVersion?¶
Inherited from¶
WhatsAppMessagingClientOptions.graphApiVersion
phoneNumberId?¶
Inherited from¶
WhatsAppMessagingClientOptions.phoneNumberId
providerClient?¶
Inherited from¶
WhatsAppMessagingClientOptions.providerClient
retry?¶
Inherited from¶
WhatsAppMessagingClientOptions.retry
signal?¶
Inherited from¶
WhatsAppMessagingClientOptions.signal
timeoutMs?¶
Inherited from¶
WhatsAppMessagingClientOptions.timeoutMs
WhatsAppMessagingJsonObject¶
Extended by¶
Indexable¶
WhatsAppMessagingProviderClient¶
Extended by¶
Methods¶
downloadMedia()¶
Parameters¶
| Parameter | Type |
|---|---|
input |
string | WhatsAppMediaResource |
Returns¶
Promise\<Response>
getBusinessProfile()¶
Parameters¶
| Parameter | Type |
|---|---|
fields? |
string[] |
Returns¶
Promise\<WhatsAppBusinessProfileResponse>
getMedia()¶
Parameters¶
| Parameter | Type |
|---|---|
mediaId |
string |
Returns¶
Promise\<WhatsAppMediaResource>
getPhoneNumber()¶
Parameters¶
| Parameter | Type |
|---|---|
fields? |
string[] |
Returns¶
Promise\<WhatsAppPhoneNumberResource>
sendMessage()¶
Parameters¶
| Parameter | Type |
|---|---|
input |
WhatsAppMessageInput |
Returns¶
Promise\<WhatsAppApiResponse>
updateBusinessProfile()¶
updateBusinessProfile(input): Promise<{
[key: string]: WhatsAppMessagingJsonValue;
success?: boolean;
}>;
Parameters¶
| Parameter | Type |
|---|---|
input |
WhatsAppUpdateBusinessProfileInput |
Returns¶
Promise\<{
[key: string]: WhatsAppMessagingJsonValue;
success?: boolean;
}>
uploadMedia()¶
Parameters¶
| Parameter | Type |
|---|---|
input |
WhatsAppUploadMediaInput |
Returns¶
Promise\<WhatsAppMediaResource>
WhatsAppMessagingProviderExtensionFields¶
Extends¶
Indexable¶
WhatsAppMessagingProviderResponse¶
Extends¶
Indexable¶
WhatsAppPhoneNumberResource¶
Indexable¶
Properties¶
code_verification_status?¶
display_phone_number?¶
id?¶
name_status?¶
platform_type?¶
quality_rating?¶
throughput?¶
verified_name?¶
WhatsAppSignedWebhook¶
Properties¶
contentType?¶
payload¶
rawBody¶
WhatsAppUpdateBusinessProfileInput¶
Properties¶
about?¶
address?¶
description?¶
email?¶
messagingProduct?¶
profilePictureHandle?¶
vertical?¶
websites?¶
WhatsAppUploadMediaInput¶
Properties¶
file¶
filename?¶
messagingProduct?¶
type¶
WhatsAppWebhookChange¶
Indexable¶
Properties¶
field?¶
value?¶
optional value?: {
[key: string]: WhatsAppMessagingProviderExtensionValue;
contacts?: WhatsAppMessagingJsonValue[];
errors?: WhatsAppMessagingJsonValue[];
messages?: WhatsAppMessagingJsonValue[];
messaging_product?: string;
metadata?: WhatsAppMessagingProviderExtensionFields;
statuses?: WhatsAppMessagingJsonValue[];
};
Index Signature¶
contacts?¶
errors?¶
messages?¶
messaging_product?¶
metadata?¶
statuses?¶
WhatsAppWebhookEntry¶
Indexable¶
Properties¶
changes?¶
id?¶
WhatsAppWebhookPayload¶
Indexable¶
Properties¶
entry?¶
object?¶
WhatsAppWebJsonObject¶
Indexable¶
WhatsAppWebMessagingClient¶
Methods¶
checkReadiness()¶
Returns¶
Promise\<WhatsAppWebReadinessResult>
sendText()¶
Parameters¶
| Parameter | Type |
|---|---|
input |
WhatsAppWebSendTextInput |
Returns¶
Promise\<WhatsAppWebSendTextResult>
WhatsAppWebMessagingClientOptions¶
Extended by¶
Properties¶
authStateDir?¶
browser?¶
connectTimeoutMs?¶
onPairingCode?¶
Parameters¶
| Parameter | Type |
|---|---|
code |
string |
Returns¶
void
onQr?¶
Parameters¶
| Parameter | Type |
|---|---|
qr |
string |
Returns¶
void
pairingPhoneNumber?¶
printPairingCodeInTerminal?¶
printQrInTerminal?¶
sendTimeoutMs?¶
sessionProvider?¶
WhatsAppWebMessagingIntegrationOptions¶
Extends¶
Properties¶
authStateDir?¶
Inherited from¶
WhatsAppWebMessagingClientOptions.authStateDir
browser?¶
Inherited from¶
WhatsAppWebMessagingClientOptions.browser
client?¶
connectTimeoutMs?¶
Inherited from¶
WhatsAppWebMessagingClientOptions.connectTimeoutMs
onPairingCode?¶
Parameters¶
| Parameter | Type |
|---|---|
code |
string |
Returns¶
void
Inherited from¶
WhatsAppWebMessagingClientOptions.onPairingCode
onQr?¶
Parameters¶
| Parameter | Type |
|---|---|
qr |
string |
Returns¶
void
Inherited from¶
WhatsAppWebMessagingClientOptions.onQr
pairingPhoneNumber?¶
Inherited from¶
WhatsAppWebMessagingClientOptions.pairingPhoneNumber
printPairingCodeInTerminal?¶
Inherited from¶
WhatsAppWebMessagingClientOptions.printPairingCodeInTerminal
printQrInTerminal?¶
Inherited from¶
WhatsAppWebMessagingClientOptions.printQrInTerminal
sendTimeoutMs?¶
Inherited from¶
WhatsAppWebMessagingClientOptions.sendTimeoutMs
sessionProvider?¶
Inherited from¶
WhatsAppWebMessagingClientOptions.sessionProvider
WhatsAppWebReadinessResult¶
Properties¶
authenticated¶
authStateDir¶
ok¶
provider¶
reason?¶
user?¶
WhatsAppWebSendTextInput¶
Extended by¶
Properties¶
message¶
previewUrl?¶
to¶
WhatsAppWebSendTextResult¶
Properties¶
jid¶
messageId?¶
provider¶
raw?¶
sent¶
to¶
WhatsAppWebSession¶
Properties¶
user?¶
Methods¶
close()¶
Returns¶
Promise\<void>
sendText()¶
Parameters¶
| Parameter | Type |
|---|---|
input |
WhatsAppWebSessionSendTextInput |
Returns¶
Promise\<WhatsAppWebSessionSendTextResult>
WhatsAppWebSessionConnectOptions¶
Properties¶
authStateDir¶
browser?¶
connectTimeoutMs¶
onPairingCode?¶
Parameters¶
| Parameter | Type |
|---|---|
code |
string |
Returns¶
void
onQr?¶
Parameters¶
| Parameter | Type |
|---|---|
qr |
string |
Returns¶
void
pairingPhoneNumber?¶
printPairingCodeInTerminal¶
printQrInTerminal¶
sendTimeoutMs¶
WhatsAppWebSessionProvider¶
Methods¶
connect()¶
Parameters¶
| Parameter | Type |
|---|---|
options |
WhatsAppWebSessionConnectOptions |
Returns¶
Promise\<WhatsAppWebSession>
WhatsAppWebSessionSendTextInput¶
Extends¶
Properties¶
jid¶
message¶
Inherited from¶
WhatsAppWebSendTextInput.message
previewUrl?¶
Inherited from¶
WhatsAppWebSendTextInput.previewUrl
to¶
Inherited from¶
WhatsAppWebSessionSendTextResult¶
Properties¶
jid¶
messageId?¶
raw?¶
sent¶
Type Aliases¶
WhatsAppMessageType¶
type WhatsAppMessageType =
| "text"
| "template"
| "image"
| "document"
| "audio"
| "video"
| "sticker"
| "interactive"
| "location"
| "contacts";
WhatsAppMessagingJsonPrimitive¶
WhatsAppMessagingJsonValue¶
type WhatsAppMessagingJsonValue =
| WhatsAppMessagingJsonPrimitive
| WhatsAppMessagingJsonObject
| readonly WhatsAppMessagingJsonValue[];
WhatsAppMessagingProviderExtensionValue¶
WhatsAppMessagingProviderPayload¶
WhatsAppMessagingProviderQuery¶
WhatsAppNormalizedEvent¶
type WhatsAppNormalizedEvent =
| {
contact?: unknown;
message: unknown;
provider: "whatsapp";
raw: unknown;
type: "messaging.message.received";
}
| {
provider: "whatsapp";
raw: unknown;
status: unknown;
type: "messaging.delivery.updated";
};
WhatsAppWebBrowserDescription¶
WhatsAppWebJsonPrimitive¶
WhatsAppWebJsonValue¶
type WhatsAppWebJsonValue =
| WhatsAppWebJsonPrimitive
| WhatsAppWebJsonObject
| WhatsAppWebJsonValue[];
Variables¶
createWhatsAppIntegrationOperationHandlers¶
whatsappWebLinkedDeviceRuntimeException¶
const whatsappWebLinkedDeviceRuntimeException: {
evidence: readonly [{
label: "Baileys introduction";
url: "https://baileys.wiki/docs/intro/";
}, {
label: "WhiskeySockets/Baileys";
url: "https://github.com/WhiskeySockets/Baileys";
}];
officialProviderSdk: false;
officialWhatsAppBusinessApi: false;
provider: "whatsapp-web";
reason: "Baileys is deliberately scoped to the community WhatsApp Web linked-device adapter; it is not an official Meta WhatsApp Business Platform SDK and does not use the WhatsApp Business API.";
runtimePackage: "baileys";
runtimePackageSource: "WhiskeySockets/Baileys";
scope: "send-only WhatsApp Web linked-device adapter";
strategy: "community-linked-device-runtime";
verifiedAt: "2026-06-25";
};
Type Declaration¶
whatsappWebMessagingProviderManifest¶
const whatsappWebMessagingProviderManifest: {
capabilities: {
audiences?: ("customer-facing" | "mixed" | "internal-support")[];
capability: string;
changesWorkflow?: boolean;
description?: string;
exposesSensitiveData?: boolean;
extension?: boolean;
label?: string;
metadata?: Record<string, unknown>;
providerObjects?: {
description?: string;
kind: string;
label?: string;
metadata?: Record<string, unknown>;
schemaName?: string;
}[];
requiresCredential?: boolean;
sideEffect?: boolean;
}[];
category: string;
channelAudiences: ("customer-facing" | "mixed" | "internal-support")[];
coverage: {
evidence: {
label: string;
url?: string;
}[];
notes: string[];
scope: | "support-workflow-subset"
| "provider-api-subset"
| "connector-required"
| "local-protocol"
| "full-provider-api";
};
credentialRequirements: {
description?: string;
id: string;
label?: string;
metadata?: Record<string, unknown>;
required: boolean;
scopes: string[];
}[];
directions: (
| "receive-only"
| "send-only"
| "bidirectional"
| "inbound-only"
| "outbound-only")[];
id: string;
limitations: string[];
maintainers: {
name: string;
type: "official" | "community" | "unknown" | "partner";
url?: string;
}[];
metadata?: Record<string, unknown>;
name: string;
operations: {
alias: string;
audience?: "customer-facing" | "mixed" | "internal-support";
audiences?: ("customer-facing" | "mixed" | "internal-support")[];
capability: string;
changesWorkflow?: boolean;
description?: string;
exposesSensitiveData?: boolean;
extension: boolean;
externallyVisible?: boolean;
inputSchema?: unknown;
inputSchemaName?: string;
inputSchemaRef?: string;
label?: string;
metadata?: Record<string, unknown>;
outputSchema?: unknown;
outputSchemaName?: string;
outputSchemaRef?: string;
providerObject?: string;
providerObjects?: {
description?: string;
kind: string;
label?: string;
metadata?: Record<string, unknown>;
schemaName?: string;
}[];
providerOperation?: string;
requiredPolicyIds?: string[];
requiresApproval?: boolean;
requiresCredential?: boolean;
sideEffect?: boolean;
}[];
packageName: string;
privacyNotes: string[];
provider: string;
trustLevel: "official" | "community" | "verified" | "experimental";
} & {
capabilities: readonly [{
audiences: readonly ["customer-facing", "mixed"];
capability: "send";
description: "Sends WhatsApp text messages through a locally authenticated WhatsApp Web linked-device session.";
exposesSensitiveData: true;
label: "Send WhatsApp text messages via linked device";
providerObjects: readonly [{
kind: "whatsappWebMessage";
label: "WhatsApp Web Message";
}];
requiresCredential: true;
sideEffect: true;
}, {
audiences: readonly ["internal-support"];
capability: "provider-readiness";
description: "Attempts to open the configured WhatsApp Web linked-device session.";
extension: true;
label: "Check WhatsApp Web session readiness";
providerObjects: readonly [{
kind: "whatsappWebReadiness";
label: "WhatsApp Web Readiness";
}];
requiresCredential: true;
}];
category: "messaging";
channelAudiences: readonly ["customer-facing", "mixed"];
coverage: {
evidence: readonly [{
label: "wacli GitHub";
url: "https://github.com/openclaw/wacli";
}, {
label: "Baileys introduction";
url: "https://baileys.wiki/docs/intro/";
}, {
label: "Baileys connecting";
url: "https://baileys.wiki/docs/socket/connecting/";
}];
notes: readonly ["Sends WhatsApp text messages through a locally paired WhatsApp Web linked-device session.", "This adapter follows the same non-Business-API linked-device approach used by WhatsApp Web clients such as openclaw/wacli, but it does not shell out to the wacli binary.", "This adapter does not require a WhatsApp Business Account, Meta app, Cloud API token, or phone_number_id.", "This is not an official WhatsApp Business Platform integration; delivery, account limits, session health, and terms/compliance are owned by the SDK user.", "Inbound sync and local search are outside this initial send-only adapter scope."];
scope: "local-protocol";
};
credentialRequirements: readonly [{
description: "Local linked-device auth state directory used to reconnect to WhatsApp Web.";
id: "whatsapp-web-auth-state";
label: "WhatsApp Web auth state";
required: true;
}, {
description: "Pair the session from WhatsApp Linked Devices before sending messages.";
id: "whatsapp-web-linked-device-session";
label: "WhatsApp linked-device session";
required: true;
}, {
description: "Optional phone number used to request a WhatsApp Web pairing code instead of scanning a QR code.";
id: "whatsapp-web-pairing-phone";
label: "WhatsApp pairing phone";
required: false;
}];
dataHandling: readonly ["Outbound message text and recipient identifiers are sent through the local WhatsApp Web session.", "WhatsApp Web auth/session state is stored in the configured local auth state directory."];
directions: readonly ["send-only"];
id: "messaging.whatsapp-web";
limits: readonly ["Requires a previously paired WhatsApp linked-device session or an interactive first pairing.", "Only text sends are wrapped in this adapter; media, groups, sync, and search are outside the initial scope.", "Use with an account dedicated to automation or demos; do not link a personal inbox unless the operator understands the privacy and automation risk."];
metadata: {
implementationStrategy: "linked-device-websocket";
protocol: "whatsapp-web-linked-device";
runtimeException: {
evidence: readonly [{
label: "Baileys introduction";
url: "https://baileys.wiki/docs/intro/";
}, {
label: "WhiskeySockets/Baileys";
url: "https://github.com/WhiskeySockets/Baileys";
}];
officialProviderSdk: false;
officialWhatsAppBusinessApi: false;
provider: "whatsapp-web";
reason: "Baileys is deliberately scoped to the community WhatsApp Web linked-device adapter; it is not an official Meta WhatsApp Business Platform SDK and does not use the WhatsApp Business API.";
runtimePackage: "baileys";
runtimePackageSource: "WhiskeySockets/Baileys";
scope: "send-only WhatsApp Web linked-device adapter";
strategy: "community-linked-device-runtime";
verifiedAt: "2026-06-25";
};
runtimeLibrary: {
declaredProviderSdkDependency: true;
name: "baileys";
packageName: "baileys";
source: "WhiskeySockets/Baileys";
};
};
name: "WhatsApp Web Linked Device";
operations: readonly [{
alias: "whatsapp-web.message.send";
capability: "send";
exposesSensitiveData: true;
extension: true;
externallyVisible: true;
inputSchemaName: "WhatsAppWebSendTextInput";
outputSchemaName: "WhatsAppWebSendTextResult";
providerObject: "whatsappWebMessage";
providerOperation: "sendMessage";
requiresCredential: true;
sideEffect: true;
}, {
alias: "whatsapp-web.readiness.check";
capability: "provider-readiness";
extension: true;
outputSchemaName: "WhatsAppWebReadinessResult";
providerObject: "whatsappWebReadiness";
providerOperation: "connect";
requiresCredential: true;
}];
packageName: "@cognidesk/integration-messaging-whatsapp";
provider: "whatsapp-web";
trustLevel: "community";
};
Type Declaration¶
| Name | Type |
|---|---|
capabilities |
{ audiences?: ("customer-facing" | "mixed" | "internal-support")[]; capability: string; changesWorkflow?: boolean; description?: string; exposesSensitiveData?: boolean; extension?: boolean; label?: string; metadata?: Record\<string, unknown>; providerObjects?: { description?: string; kind: string; label?: string; metadata?: Record\<string, unknown>; schemaName?: string; }[]; requiresCredential?: boolean; sideEffect?: boolean; }[] |
category |
string |
channelAudiences |
("customer-facing" | "mixed" | "internal-support")[] |
coverage |
{ evidence: { label: string; url?: string; }[]; notes: string[]; scope: | "support-workflow-subset" | "provider-api-subset" | "connector-required" | "local-protocol" | "full-provider-api"; } |
coverage.evidence |
{ label: string; url?: string; }[] |
coverage.notes |
string[] |
coverage.scope |
| "support-workflow-subset" | "provider-api-subset" | "connector-required" | "local-protocol" | "full-provider-api" |
credentialRequirements |
{ description?: string; id: string; label?: string; metadata?: Record\<string, unknown>; required: boolean; scopes: string[]; }[] |
directions |
( | "receive-only" | "send-only" | "bidirectional" | "inbound-only" | "outbound-only")[] |
id |
string |
limitations |
string[] |
maintainers |
{ name: string; type: "official" | "community" | "unknown" | "partner"; url?: string; }[] |
metadata? |
Record\<string, unknown> |
name |
string |
operations |
{ alias: string; audience?: "customer-facing" | "mixed" | "internal-support"; audiences?: ("customer-facing" | "mixed" | "internal-support")[]; capability: string; changesWorkflow?: boolean; description?: string; exposesSensitiveData?: boolean; extension: boolean; externallyVisible?: boolean; inputSchema?: unknown; inputSchemaName?: string; inputSchemaRef?: string; label?: string; metadata?: Record\<string, unknown>; outputSchema?: unknown; outputSchemaName?: string; outputSchemaRef?: string; providerObject?: string; providerObjects?: { description?: string; kind: string; label?: string; metadata?: Record\<string, unknown>; schemaName?: string; }[]; providerOperation?: string; requiredPolicyIds?: string[]; requiresApproval?: boolean; requiresCredential?: boolean; sideEffect?: boolean; }[] |
packageName |
string |
privacyNotes |
string[] |
provider |
string |
trustLevel |
"official" | "community" | "verified" | "experimental" |
Type Declaration¶
| Name | Type |
|---|---|
capabilities |
readonly [{ audiences: readonly ["customer-facing", "mixed"]; capability: "send"; description: "Sends WhatsApp text messages through a locally authenticated WhatsApp Web linked-device session."; exposesSensitiveData: true; label: "Send WhatsApp text messages via linked device"; providerObjects: readonly [{ kind: "whatsappWebMessage"; label: "WhatsApp Web Message"; }]; requiresCredential: true; sideEffect: true; }, { audiences: readonly ["internal-support"]; capability: "provider-readiness"; description: "Attempts to open the configured WhatsApp Web linked-device session."; extension: true; label: "Check WhatsApp Web session readiness"; providerObjects: readonly [{ kind: "whatsappWebReadiness"; label: "WhatsApp Web Readiness"; }]; requiresCredential: true; }] |
category |
"messaging" |
channelAudiences |
readonly ["customer-facing", "mixed"] |
coverage |
{ evidence: readonly [{ label: "wacli GitHub"; url: "https://github.com/openclaw/wacli"; }, { label: "Baileys introduction"; url: "https://baileys.wiki/docs/intro/"; }, { label: "Baileys connecting"; url: "https://baileys.wiki/docs/socket/connecting/"; }]; notes: readonly ["Sends WhatsApp text messages through a locally paired WhatsApp Web linked-device session.", "This adapter follows the same non-Business-API linked-device approach used by WhatsApp Web clients such as openclaw/wacli, but it does not shell out to the wacli binary.", "This adapter does not require a WhatsApp Business Account, Meta app, Cloud API token, or phone_number_id.", "This is not an official WhatsApp Business Platform integration; delivery, account limits, session health, and terms/compliance are owned by the SDK user.", "Inbound sync and local search are outside this initial send-only adapter scope."]; scope: "local-protocol"; } |
coverage.evidence |
readonly [{ label: "wacli GitHub"; url: "https://github.com/openclaw/wacli"; }, { label: "Baileys introduction"; url: "https://baileys.wiki/docs/intro/"; }, { label: "Baileys connecting"; url: "https://baileys.wiki/docs/socket/connecting/"; }] |
coverage.notes |
readonly ["Sends WhatsApp text messages through a locally paired WhatsApp Web linked-device session.", "This adapter follows the same non-Business-API linked-device approach used by WhatsApp Web clients such as openclaw/wacli, but it does not shell out to the wacli binary.", "This adapter does not require a WhatsApp Business Account, Meta app, Cloud API token, or phone_number_id.", "This is not an official WhatsApp Business Platform integration; delivery, account limits, session health, and terms/compliance are owned by the SDK user.", "Inbound sync and local search are outside this initial send-only adapter scope."] |
coverage.scope |
"local-protocol" |
credentialRequirements |
readonly [{ description: "Local linked-device auth state directory used to reconnect to WhatsApp Web."; id: "whatsapp-web-auth-state"; label: "WhatsApp Web auth state"; required: true; }, { description: "Pair the session from WhatsApp Linked Devices before sending messages."; id: "whatsapp-web-linked-device-session"; label: "WhatsApp linked-device session"; required: true; }, { description: "Optional phone number used to request a WhatsApp Web pairing code instead of scanning a QR code."; id: "whatsapp-web-pairing-phone"; label: "WhatsApp pairing phone"; required: false; }] |
dataHandling |
readonly ["Outbound message text and recipient identifiers are sent through the local WhatsApp Web session.", "WhatsApp Web auth/session state is stored in the configured local auth state directory."] |
directions |
readonly ["send-only"] |
id |
"messaging.whatsapp-web" |
limits |
readonly ["Requires a previously paired WhatsApp linked-device session or an interactive first pairing.", "Only text sends are wrapped in this adapter; media, groups, sync, and search are outside the initial scope.", "Use with an account dedicated to automation or demos; do not link a personal inbox unless the operator understands the privacy and automation risk."] |
metadata |
{ implementationStrategy: "linked-device-websocket"; protocol: "whatsapp-web-linked-device"; runtimeException: { evidence: readonly [{ label: "Baileys introduction"; url: "https://baileys.wiki/docs/intro/"; }, { label: "WhiskeySockets/Baileys"; url: "https://github.com/WhiskeySockets/Baileys"; }]; officialProviderSdk: false; officialWhatsAppBusinessApi: false; provider: "whatsapp-web"; reason: "Baileys is deliberately scoped to the community WhatsApp Web linked-device adapter; it is not an official Meta WhatsApp Business Platform SDK and does not use the WhatsApp Business API."; runtimePackage: "baileys"; runtimePackageSource: "WhiskeySockets/Baileys"; scope: "send-only WhatsApp Web linked-device adapter"; strategy: "community-linked-device-runtime"; verifiedAt: "2026-06-25"; }; runtimeLibrary: { declaredProviderSdkDependency: true; name: "baileys"; packageName: "baileys"; source: "WhiskeySockets/Baileys"; }; } |
metadata.implementationStrategy |
"linked-device-websocket" |
metadata.protocol |
"whatsapp-web-linked-device" |
metadata.runtimeException |
{ evidence: readonly [{ label: "Baileys introduction"; url: "https://baileys.wiki/docs/intro/"; }, { label: "WhiskeySockets/Baileys"; url: "https://github.com/WhiskeySockets/Baileys"; }]; officialProviderSdk: false; officialWhatsAppBusinessApi: false; provider: "whatsapp-web"; reason: "Baileys is deliberately scoped to the community WhatsApp Web linked-device adapter; it is not an official Meta WhatsApp Business Platform SDK and does not use the WhatsApp Business API."; runtimePackage: "baileys"; runtimePackageSource: "WhiskeySockets/Baileys"; scope: "send-only WhatsApp Web linked-device adapter"; strategy: "community-linked-device-runtime"; verifiedAt: "2026-06-25"; } |
metadata.runtimeException.evidence |
readonly [{ label: "Baileys introduction"; url: "https://baileys.wiki/docs/intro/"; }, { label: "WhiskeySockets/Baileys"; url: "https://github.com/WhiskeySockets/Baileys"; }] |
metadata.runtimeException.officialProviderSdk |
false |
metadata.runtimeException.officialWhatsAppBusinessApi |
false |
metadata.runtimeException.provider |
"whatsapp-web" |
metadata.runtimeException.reason |
"Baileys is deliberately scoped to the community WhatsApp Web linked-device adapter; it is not an official Meta WhatsApp Business Platform SDK and does not use the WhatsApp Business API." |
metadata.runtimeException.runtimePackage |
"baileys" |
metadata.runtimeException.runtimePackageSource |
"WhiskeySockets/Baileys" |
metadata.runtimeException.scope |
"send-only WhatsApp Web linked-device adapter" |
metadata.runtimeException.strategy |
"community-linked-device-runtime" |
metadata.runtimeException.verifiedAt |
"2026-06-25" |
metadata.runtimeLibrary |
{ declaredProviderSdkDependency: true; name: "baileys"; packageName: "baileys"; source: "WhiskeySockets/Baileys"; } |
metadata.runtimeLibrary.declaredProviderSdkDependency |
true |
metadata.runtimeLibrary.name |
"baileys" |
metadata.runtimeLibrary.packageName |
"baileys" |
metadata.runtimeLibrary.source |
"WhiskeySockets/Baileys" |
name |
"WhatsApp Web Linked Device" |
operations |
readonly [{ alias: "whatsapp-web.message.send"; capability: "send"; exposesSensitiveData: true; extension: true; externallyVisible: true; inputSchemaName: "WhatsAppWebSendTextInput"; outputSchemaName: "WhatsAppWebSendTextResult"; providerObject: "whatsappWebMessage"; providerOperation: "sendMessage"; requiresCredential: true; sideEffect: true; }, { alias: "whatsapp-web.readiness.check"; capability: "provider-readiness"; extension: true; outputSchemaName: "WhatsAppWebReadinessResult"; providerObject: "whatsappWebReadiness"; providerOperation: "connect"; requiresCredential: true; }] |
packageName |
"@cognidesk/integration-messaging-whatsapp" |
provider |
"whatsapp-web" |
trustLevel |
"community" |
Functions¶
createBaileysWhatsAppWebSessionProvider()¶
Returns¶
createWhatsAppGraphProviderClient()¶
Parameters¶
| Parameter | Type |
|---|---|
options |
WhatsAppMessagingClientOptions |
Returns¶
WhatsAppMessagingProviderClient
createWhatsAppMessagingClient()¶
Parameters¶
| Parameter | Type |
|---|---|
options? |
WhatsAppMessagingClientOptions |
Returns¶
createWhatsAppMessagingLiveChecks()¶
function createWhatsAppMessagingLiveChecks(options): {
description: string;
id: string;
requiredCredentialIds: string[];
run: Promise<{
details: {
displayPhoneNumber: string;
id: string;
platformType: string;
qualityRating: string;
verifiedName: string;
};
}>;
}[];
Parameters¶
| Parameter | Type |
|---|---|
options |
WhatsAppLiveCheckOptions |
Returns¶
{
description: string;
id: string;
requiredCredentialIds: string[];
run: Promise\<{
details: {
displayPhoneNumber: string;
id: string;
platformType: string;
qualityRating: string;
verifiedName: string;
};
}>;
}[]
createWhatsAppMessagingOperationHandlers()¶
function createWhatsAppMessagingOperationHandlers(options): {
messaging.draft.create: (input) => Promise<WhatsAppMessagingJsonObject>;
messaging.media.send: (input) => Promise<WhatsAppMediaResource>;
messaging.message.receive: (input) => Promise<WhatsAppSignedWebhook>;
messaging.message.send: (input) => Promise<WhatsAppApiResponse>;
messaging.template.send: (input) => Promise<WhatsAppApiResponse>;
whatsapp.businessProfile.read: (input) => Promise<WhatsAppBusinessProfileResponse>;
whatsapp.businessProfile.update: (input) => Promise<{
[key: string]: WhatsAppMessagingJsonValue;
success?: boolean;
}>;
whatsapp.phoneNumber.read: (input) => Promise<WhatsAppPhoneNumberResource>;
whatsapp.webhook-signature: (input) => Promise<boolean>;
};
Parameters¶
| Parameter | Type |
|---|---|
options |
WhatsAppMessagingIntegrationOptions |
Returns¶
{
messaging.draft.create: (input) => Promise<WhatsAppMessagingJsonObject>;
messaging.media.send: (input) => Promise<WhatsAppMediaResource>;
messaging.message.receive: (input) => Promise<WhatsAppSignedWebhook>;
messaging.message.send: (input) => Promise<WhatsAppApiResponse>;
messaging.template.send: (input) => Promise<WhatsAppApiResponse>;
whatsapp.businessProfile.read: (input) => Promise<WhatsAppBusinessProfileResponse>;
whatsapp.businessProfile.update: (input) => Promise<{
[key: string]: WhatsAppMessagingJsonValue;
success?: boolean;
}>;
whatsapp.phoneNumber.read: (input) => Promise<WhatsAppPhoneNumberResource>;
whatsapp.webhook-signature: (input) => Promise<boolean>;
}
| Name | Type |
|---|---|
messaging.draft.create() |
(input) => Promise\<WhatsAppMessagingJsonObject> |
messaging.media.send() |
(input) => Promise\<WhatsAppMediaResource> |
messaging.message.receive() |
(input) => Promise\<WhatsAppSignedWebhook> |
messaging.message.send() |
(input) => Promise\<WhatsAppApiResponse> |
messaging.template.send() |
(input) => Promise\<WhatsAppApiResponse> |
whatsapp.businessProfile.read() |
(input) => Promise\<WhatsAppBusinessProfileResponse> |
whatsapp.businessProfile.update() |
(input) => Promise\<{ [key: string]: WhatsAppMessagingJsonValue; success?: boolean; }> |
whatsapp.phoneNumber.read() |
(input) => Promise\<WhatsAppPhoneNumberResource> |
whatsapp.webhook-signature() |
(input) => Promise\<boolean> |
createWhatsAppTemplateMessage()¶
Parameters¶
| Parameter | Type |
|---|---|
input |
{ components?: WhatsAppMessagingJsonValue[]; contextMessageId?: string; languageCode: string; name: string; to: string; } |
input.components? |
WhatsAppMessagingJsonValue[] |
input.contextMessageId? |
string |
input.languageCode |
string |
input.name |
string |
input.to |
string |
Returns¶
createWhatsAppTextMessage()¶
Parameters¶
| Parameter | Type |
|---|---|
input |
{ body: string; contextMessageId?: string; previewUrl?: boolean; to: string; } |
input.body |
string |
input.contextMessageId? |
string |
input.previewUrl? |
boolean |
input.to |
string |
Returns¶
createWhatsAppWebMessagingClient()¶
Parameters¶
| Parameter | Type |
|---|---|
options? |
WhatsAppWebMessagingClientOptions |
Returns¶
createWhatsAppWebMessagingOperationHandlers()¶
function createWhatsAppWebMessagingOperationHandlers(options?): {
whatsapp-web.message.send: (input) => Promise<WhatsAppWebSendTextResult>;
whatsapp-web.readiness.check: () => Promise<WhatsAppWebReadinessResult>;
};
Parameters¶
| Parameter | Type |
|---|---|
options? |
WhatsAppWebMessagingIntegrationOptions |
Returns¶
{
whatsapp-web.message.send: (input) => Promise<WhatsAppWebSendTextResult>;
whatsapp-web.readiness.check: () => Promise<WhatsAppWebReadinessResult>;
}
| Name | Type |
|---|---|
whatsapp-web.message.send() |
(input) => Promise\<WhatsAppWebSendTextResult> |
whatsapp-web.readiness.check() |
() => Promise\<WhatsAppWebReadinessResult> |
defineWhatsAppMessagingIntegration()¶
function defineWhatsAppMessagingIntegration(options): DefinedIntegration<{
capabilities: {
audiences?: ("customer-facing" | "internal-support" | "mixed")[];
capability: string;
changesWorkflow?: boolean;
description?: string;
exposesSensitiveData?: boolean;
extension?: boolean;
label?: string;
metadata?: Record<string, unknown>;
providerObjects?: {
description?: string;
kind: string;
label?: string;
metadata?: Record<string, unknown>;
schemaName?: string;
}[];
requiresCredential?: boolean;
sideEffect?: boolean;
}[];
category: string;
channelAudiences: ("customer-facing" | "internal-support" | "mixed")[];
coverage: {
evidence: {
label: string;
url?: string;
}[];
notes: string[];
scope: | "support-workflow-subset"
| "provider-api-subset"
| "connector-required"
| "local-protocol"
| "full-provider-api";
};
credentialRequirements: {
description?: string;
id: string;
label?: string;
metadata?: Record<string, unknown>;
required: boolean;
scopes: string[];
}[];
directions: (
| "receive-only"
| "send-only"
| "inbound-only"
| "outbound-only"
| "bidirectional")[];
id: string;
limitations: string[];
maintainers: {
name: string;
type: "community" | "official" | "unknown" | "partner";
url?: string;
}[];
metadata?: Record<string, unknown>;
name: string;
operations: {
alias: string;
audience?: "customer-facing" | "internal-support" | "mixed";
audiences?: ("customer-facing" | "internal-support" | "mixed")[];
capability: string;
changesWorkflow?: boolean;
description?: string;
exposesSensitiveData?: boolean;
extension: boolean;
externallyVisible?: boolean;
inputSchema?: unknown;
inputSchemaName?: string;
inputSchemaRef?: string;
label?: string;
metadata?: Record<string, unknown>;
outputSchema?: unknown;
outputSchemaName?: string;
outputSchemaRef?: string;
providerObject?: string;
providerObjects?: {
description?: string;
kind: string;
label?: string;
metadata?: Record<string, unknown>;
schemaName?: string;
}[];
providerOperation?: string;
requiredPolicyIds?: string[];
requiresApproval?: boolean;
requiresCredential?: boolean;
sideEffect?: boolean;
}[];
packageName: string;
privacyNotes: string[];
provider: string;
trustLevel: "community" | "official" | "verified" | "experimental";
} & {
capabilities: readonly [{
audiences: readonly ["customer-facing", "mixed"];
capability: "receive";
description: "Validates and parses WhatsApp Business Platform webhook payloads after the SDK user's Meta app is subscribed to the WABA messages webhook.";
exposesSensitiveData: true;
label: "Receive WhatsApp webhooks";
providerObjects: readonly [{
kind: "whatsappWebhook";
label: "WhatsApp Webhook";
}, {
kind: "whatsappMessage";
label: "WhatsApp Message";
}, {
kind: "whatsappStatus";
label: "WhatsApp Message Status";
}];
requiresCredential: true;
}, {
audiences: readonly ["customer-facing"];
capability: "send";
description: "Sends WhatsApp messages through the configured Graph API adapter or provider client when SDK-user policy permits outbound contact: free-form service messages inside the customer service window or approved templates outside it.";
exposesSensitiveData: true;
label: "Send WhatsApp messages";
providerObjects: readonly [{
kind: "whatsappMessage";
label: "WhatsApp Message";
}];
requiresCredential: true;
sideEffect: true;
}, {
audiences: readonly ["customer-facing", "mixed"];
capability: "draft";
description: "Builds Cloud API message request payloads for SDK-user-configured approval workflows.";
exposesSensitiveData: true;
label: "Build WhatsApp message payloads";
providerObjects: readonly [{
kind: "whatsappMessageDraft";
label: "WhatsApp Message Draft";
}];
requiresCredential: false;
}, {
audiences: readonly ["customer-facing", "mixed"];
capability: "media";
description: "Uploads media, reads media metadata, and downloads media bytes through the configured Graph API adapter or provider client.";
exposesSensitiveData: true;
label: "Use WhatsApp media";
providerObjects: readonly [{
kind: "whatsappMedia";
label: "WhatsApp Media";
}];
requiresCredential: true;
sideEffect: true;
}, {
audiences: readonly ["customer-facing", "mixed"];
capability: "attach";
description: "References uploaded WhatsApp media IDs in outbound messages selected by SDK configuration.";
exposesSensitiveData: true;
label: "Attach WhatsApp media";
providerObjects: readonly [{
kind: "whatsappMedia";
label: "WhatsApp Media";
}, {
kind: "whatsappMessage";
label: "WhatsApp Message";
}];
requiresCredential: true;
sideEffect: true;
}, {
audiences: readonly ["internal-support", "mixed"];
capability: "read-provider-object";
description: "Reads WhatsApp Business phone-number readiness and business profile resources through the configured Graph API adapter or provider client for Studio-visible configuration and support diagnostics.";
exposesSensitiveData: true;
label: "Read WhatsApp phone number and profile";
providerObjects: readonly [{
kind: "whatsappPhoneNumber";
label: "WhatsApp Business Phone Number";
}, {
kind: "whatsappBusinessProfile";
label: "WhatsApp Business Profile";
}];
requiresCredential: true;
}, {
audiences: readonly ["internal-support"];
capability: "update-provider-object";
changesWorkflow: true;
description: "Updates WhatsApp Business profile fields through the configured Graph API adapter or provider client when SDK-user configuration permits profile changes.";
exposesSensitiveData: true;
label: "Update WhatsApp business profile";
providerObjects: readonly [{
kind: "whatsappBusinessProfile";
label: "WhatsApp Business Profile";
}];
requiresCredential: true;
sideEffect: true;
}, {
audiences: readonly ["internal-support"];
capability: "whatsapp.webhook-signature";
description: "Validates Meta X-Hub-Signature-256 webhook signatures with the SDK user's app secret.";
exposesSensitiveData: true;
extension: true;
label: "Validate WhatsApp webhook signatures";
providerObjects: readonly [{
kind: "whatsappSignedWebhook";
label: "WhatsApp Signed Webhook";
}];
requiresCredential: true;
}];
category: "messaging";
channelAudiences: readonly ["customer-facing", "mixed"];
coverage: {
evidence: readonly [{
label: "WhatsApp Cloud API get started";
url: "https://developers.facebook.com/documentation/business-messaging/whatsapp/get-started";
}, {
label: "WhatsApp template fundamentals";
url: "https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/overview";
}, {
label: "WhatsApp media";
url: "https://developers.facebook.com/documentation/business-messaging/whatsapp/business-phone-numbers/media/";
}, {
label: "WhatsApp business profiles";
url: "https://developers.facebook.com/documentation/business-messaging/whatsapp/business-phone-numbers/business-profiles";
}, {
label: "WhatsApp business phone numbers";
url: "https://developers.facebook.com/documentation/business-messaging/whatsapp/business-phone-numbers/phone-numbers";
}, {
label: "WhatsApp webhooks";
url: "https://developers.facebook.com/documentation/business-messaging/whatsapp/webhooks/overview/";
}, {
label: "WhatsApp permissions";
url: "https://developers.facebook.com/documentation/business-messaging/whatsapp/permissions/";
}];
notes: readonly ["Coverage is typed for selected WhatsApp Business Platform support workflows: provider REST adapter message sends, template payload construction, media upload/get/download, phone-number readiness, business profile get/update, webhook challenge handling, and X-Hub-Signature-256 validation.", "This is not full WhatsApp Business Platform coverage; template CRUD/listing, Flows, commerce, Calling API, groups, phone-number registration and management, WABA account management, analytics, and broader Business Management APIs remain outside this adapter."];
scope: "support-workflow-subset";
};
credentialRequirements: readonly [{
description: "Server-side Meta access token used by the built-in Graph API adapter or an injected WhatsApp/Meta provider client.";
id: "whatsapp-access-token";
label: "WhatsApp Business access token";
metadata: {
scopeKind: "provider-permission-labels";
};
required: true;
scopes: readonly ["whatsapp_business_messaging", "whatsapp_business_management"];
}, {
description: "Meta phone_number_id used by the built-in Graph API adapter or an injected WhatsApp/Meta provider client.";
id: "whatsapp-phone-number-id";
label: "WhatsApp Business phone number ID";
required: true;
}, {
description: "Server-side app secret used to validate X-Hub-Signature-256 webhook deliveries.";
id: "whatsapp-app-secret";
label: "Meta app secret";
required: true;
}, {
description: "SDK-user-owned token checked during Meta webhook endpoint verification.";
id: "whatsapp-webhook-verify-token";
label: "Webhook verify token";
required: false;
}, {
description: "SDK-user-confirmed Meta app subscription to the WhatsApp Business Account messages webhook field.";
id: "whatsapp-waba-webhook-subscription";
label: "WhatsApp WABA messages webhook subscription";
required: false;
}];
directions: readonly ["receive-only", "send-only", "bidirectional"];
id: "messaging.whatsapp";
limitations: readonly ["Available operations depend on the SDK user's Meta app, WhatsApp Business Account, phone number registration, WABA messages webhook subscription, access token scopes, business verification, templates, quality limits, and messaging windows.", "Free-form WhatsApp service messages are for the customer service window; SDK users must select approved templates for outbound contact outside that window.", "Opt-in, outbound-contact policy, template selection, human escalation, media retention, redaction, and deletion behavior are SDK-user configuration.", "This package provides a built-in Graph API REST adapter when accessToken and phoneNumberId are configured; hosts may still inject an approved WhatsApp/Meta provider client and own automation, promotional messaging, consent, retry, and rate-limit policies."];
maintainers: readonly [{
name: "Cognidesk";
type: "official";
}];
metadata: {
apiCoverage: {
checkedAt: "2026-06-18";
fullMetaGraphCoverage: false;
fullProviderApi: false;
generatedFromOfficialSpec: true;
implementedOperationCount: 7;
operationCatalog: "docs/provider-coverage/whatsapp-business-messaging-openapi-v23-selected-api-2026-06-18.operations.json";
selectedOperationCount: 7;
sourceOperationCount: 113;
sourcePathCount: 78;
sourceSpec: "https://raw.githubusercontent.com/facebook/openapi/main/business-messaging-api_v23.0.yaml";
};
channelCoverage: {
businessProfile: "provider-rest-adapter-read-update";
cloudApiMessages: "provider-rest-adapter-send";
flowsCommerceCallingGroups: "provider-supported-not-typed";
media: "provider-rest-adapter-upload-get-download";
phoneNumberReadiness: "provider-rest-adapter-read";
templateCrud: "provider-supported-not-typed";
templatePayloads: "typed-build-only";
webhooks: "typed-challenge-verify-parse";
};
implementation: {
defaultClientPolicy: "provider-rest-adapter-when-configured";
officialMaintainedServerSdkAvailable: false;
packageOwnedRestClient: true;
providerClient: "WhatsAppMessagingProviderClient";
runtimePackage: "@cognidesk/integration-messaging-whatsapp/runtime";
sdkDecision: {
checkedAt: "2026-06-25";
rejectedSdkPackages: readonly [{
packageName: "whatsapp";
reason: "Official Meta WhatsApp Business Platform Node.js SDK for Cloud API, but the upstream repository and documentation mark the project archived/read-only.";
}, {
packageName: "facebook-nodejs-business-sdk";
reason: "Official Meta Business SDK for broader Graph/Marketing API surfaces, not a maintained WhatsApp Cloud API messaging client.";
}];
result: "no-maintained-official-sdk-rest-adapter-selected";
};
strategy: "no-official-maintained-server-sdk-rest-adapter";
verifiedAt: "2026-06-25";
};
providerClient: {
defaultClientPolicy: "provider-rest-adapter-when-configured";
importPolicy: "provider-client-override-supported";
interface: "WhatsAppMessagingProviderClient";
package: "built-in-or-host-provided";
sdkDecision: {
checkedAt: "2026-06-25";
rejectedSdkPackages: readonly [{
packageName: "whatsapp";
reason: "Official Meta WhatsApp Business Platform Node.js SDK for Cloud API, but the upstream repository and documentation mark the project archived/read-only.";
}, {
packageName: "facebook-nodejs-business-sdk";
reason: "Official Meta Business SDK for broader Graph/Marketing API surfaces, not a maintained WhatsApp Cloud API messaging client.";
}];
result: "no-maintained-official-sdk-rest-adapter-selected";
};
};
};
name: "WhatsApp Business Platform";
operations: readonly [{
alias: "messaging.message.receive";
audiences: readonly ["customer-facing", "mixed"];
capability: "receive";
description: "Validate and parse an inbound WhatsApp Business Platform webhook request.";
exposesSensitiveData: true;
label: "Normalize inbound WhatsApp webhook";
providerObject: "messagingMessage";
providerOperation: "parseWhatsAppWebhook";
requiresCredential: true;
}, {
alias: "messaging.message.send";
audiences: readonly ["customer-facing"];
capability: "send";
description: "Send a WhatsApp message through the configured Graph API adapter or provider client.";
exposesSensitiveData: true;
externallyVisible: true;
label: "Send WhatsApp message";
providerObject: "messagingMessage";
providerOperation: "sendMessage";
requiresApproval: true;
requiresCredential: true;
sideEffect: true;
}, {
alias: "messaging.template.send";
audiences: readonly ["customer-facing"];
capability: "send";
description: "Send an SDK-user-selected approved WhatsApp message template.";
exposesSensitiveData: true;
externallyVisible: true;
label: "Send WhatsApp template";
providerObject: "messagingTemplate";
providerOperation: "sendMessage";
requiresApproval: true;
requiresCredential: true;
sideEffect: true;
}, {
alias: "messaging.draft.create";
audiences: readonly ["customer-facing", "mixed"];
capability: "draft";
description: "Build a WhatsApp Cloud API message payload for review or later send.";
exposesSensitiveData: true;
label: "Build WhatsApp message payload";
providerObject: "messagingMessage";
providerOperation: "buildMessagePayload";
}, {
alias: "messaging.media.send";
audiences: readonly ["customer-facing", "mixed"];
capability: "attach";
description: "Upload media for use in WhatsApp messages through the configured Graph API adapter or provider client.";
exposesSensitiveData: true;
externallyVisible: true;
label: "Upload WhatsApp media";
providerObject: "mediaAttachment";
providerOperation: "uploadMedia";
requiresApproval: true;
requiresCredential: true;
sideEffect: true;
}, {
alias: "whatsapp.phoneNumber.read";
audiences: readonly ["internal-support", "mixed"];
capability: "read-provider-object";
description: "Read WhatsApp Business phone-number readiness metadata through the configured Graph API adapter or provider client.";
exposesSensitiveData: true;
extension: true;
label: "Read WhatsApp phone number";
providerObject: "whatsappPhoneNumber";
providerOperation: "getPhoneNumber";
requiresCredential: true;
}, {
alias: "whatsapp.businessProfile.read";
audiences: readonly ["internal-support", "mixed"];
capability: "read-provider-object";
description: "Read WhatsApp Business profile fields for support diagnostics through the configured Graph API adapter or provider client.";
exposesSensitiveData: true;
extension: true;
label: "Read WhatsApp business profile";
providerObject: "whatsappBusinessProfile";
providerOperation: "getBusinessProfile";
requiresCredential: true;
}, {
alias: "whatsapp.businessProfile.update";
audiences: readonly ["internal-support"];
capability: "update-provider-object";
changesWorkflow: true;
description: "Update WhatsApp Business profile fields through the configured Graph API adapter or provider client when SDK-user policy permits.";
exposesSensitiveData: true;
extension: true;
label: "Update WhatsApp business profile";
providerObject: "whatsappBusinessProfile";
providerOperation: "updateBusinessProfile";
requiresApproval: true;
requiresCredential: true;
sideEffect: true;
}, {
alias: "whatsapp.webhook-signature";
audiences: readonly ["internal-support"];
capability: "whatsapp.webhook-signature";
description: "Validate Meta X-Hub-Signature-256 for WhatsApp webhook delivery.";
exposesSensitiveData: true;
extension: true;
label: "Validate WhatsApp webhook signature";
providerObject: "whatsappSignedWebhook";
providerOperation: "validateWhatsAppWebhookSignature";
requiresCredential: true;
}];
packageName: "@cognidesk/integration-messaging-whatsapp";
privacyNotes: readonly ["WhatsApp messages, contact identifiers, phone numbers, profile names, media metadata, message statuses, and webhook payloads can contain customer data.", "Meta access tokens, app secrets, and webhook verify tokens stay server-side and are represented in Studio only as credential readiness."];
provider: "whatsapp";
trustLevel: "official";
}, {
appSecret: string;
}, {
messaging.draft.create: (input) => Promise<WhatsAppMessagingJsonObject>;
messaging.media.send: (input) => Promise<WhatsAppMediaResource>;
messaging.message.receive: (input) => Promise<WhatsAppSignedWebhook>;
messaging.message.send: (input) => Promise<WhatsAppApiResponse>;
messaging.template.send: (input) => Promise<WhatsAppApiResponse>;
whatsapp.businessProfile.read: (input) => Promise<WhatsAppBusinessProfileResponse>;
whatsapp.businessProfile.update: (input) => Promise<{
[key: string]: WhatsAppMessagingJsonValue;
success?: boolean;
}>;
whatsapp.phoneNumber.read: (input) => Promise<WhatsAppPhoneNumberResource>;
whatsapp.webhook-signature: (input) => Promise<boolean>;
}>;
Parameters¶
| Parameter | Type |
|---|---|
options |
WhatsAppMessagingIntegrationOptions |
Returns¶
DefinedIntegration\<{
capabilities: {
audiences?: ("customer-facing" | "internal-support" | "mixed")[];
capability: string;
changesWorkflow?: boolean;
description?: string;
exposesSensitiveData?: boolean;
extension?: boolean;
label?: string;
metadata?: Record\<string, unknown>;
providerObjects?: {
description?: string;
kind: string;
label?: string;
metadata?: Record\<string, unknown>;
schemaName?: string;
}[];
requiresCredential?: boolean;
sideEffect?: boolean;
}[];
category: string;
channelAudiences: ("customer-facing" | "internal-support" | "mixed")[];
coverage: {
evidence: {
label: string;
url?: string;
}[];
notes: string[];
scope: | "support-workflow-subset"
| "provider-api-subset"
| "connector-required"
| "local-protocol"
| "full-provider-api";
};
credentialRequirements: {
description?: string;
id: string;
label?: string;
metadata?: Record\<string, unknown>;
required: boolean;
scopes: string[];
}[];
directions: (
| "receive-only"
| "send-only"
| "inbound-only"
| "outbound-only"
| "bidirectional")[];
id: string;
limitations: string[];
maintainers: {
name: string;
type: "community" | "official" | "unknown" | "partner";
url?: string;
}[];
metadata?: Record\<string, unknown>;
name: string;
operations: {
alias: string;
audience?: "customer-facing" | "internal-support" | "mixed";
audiences?: ("customer-facing" | "internal-support" | "mixed")[];
capability: string;
changesWorkflow?: boolean;
description?: string;
exposesSensitiveData?: boolean;
extension: boolean;
externallyVisible?: boolean;
inputSchema?: unknown;
inputSchemaName?: string;
inputSchemaRef?: string;
label?: string;
metadata?: Record\<string, unknown>;
outputSchema?: unknown;
outputSchemaName?: string;
outputSchemaRef?: string;
providerObject?: string;
providerObjects?: {
description?: string;
kind: string;
label?: string;
metadata?: Record\<string, unknown>;
schemaName?: string;
}[];
providerOperation?: string;
requiredPolicyIds?: string[];
requiresApproval?: boolean;
requiresCredential?: boolean;
sideEffect?: boolean;
}[];
packageName: string;
privacyNotes: string[];
provider: string;
trustLevel: "community" | "official" | "verified" | "experimental";
} & {
capabilities: readonly [{
audiences: readonly ["customer-facing", "mixed"];
capability: "receive";
description: "Validates and parses WhatsApp Business Platform webhook payloads after the SDK user's Meta app is subscribed to the WABA messages webhook.";
exposesSensitiveData: true;
label: "Receive WhatsApp webhooks";
providerObjects: readonly [{
kind: "whatsappWebhook";
label: "WhatsApp Webhook";
}, {
kind: "whatsappMessage";
label: "WhatsApp Message";
}, {
kind: "whatsappStatus";
label: "WhatsApp Message Status";
}];
requiresCredential: true;
}, {
audiences: readonly ["customer-facing"];
capability: "send";
description: "Sends WhatsApp messages through the configured Graph API adapter or provider client when SDK-user policy permits outbound contact: free-form service messages inside the customer service window or approved templates outside it.";
exposesSensitiveData: true;
label: "Send WhatsApp messages";
providerObjects: readonly [{
kind: "whatsappMessage";
label: "WhatsApp Message";
}];
requiresCredential: true;
sideEffect: true;
}, {
audiences: readonly ["customer-facing", "mixed"];
capability: "draft";
description: "Builds Cloud API message request payloads for SDK-user-configured approval workflows.";
exposesSensitiveData: true;
label: "Build WhatsApp message payloads";
providerObjects: readonly [{
kind: "whatsappMessageDraft";
label: "WhatsApp Message Draft";
}];
requiresCredential: false;
}, {
audiences: readonly ["customer-facing", "mixed"];
capability: "media";
description: "Uploads media, reads media metadata, and downloads media bytes through the configured Graph API adapter or provider client.";
exposesSensitiveData: true;
label: "Use WhatsApp media";
providerObjects: readonly [{
kind: "whatsappMedia";
label: "WhatsApp Media";
}];
requiresCredential: true;
sideEffect: true;
}, {
audiences: readonly ["customer-facing", "mixed"];
capability: "attach";
description: "References uploaded WhatsApp media IDs in outbound messages selected by SDK configuration.";
exposesSensitiveData: true;
label: "Attach WhatsApp media";
providerObjects: readonly [{
kind: "whatsappMedia";
label: "WhatsApp Media";
}, {
kind: "whatsappMessage";
label: "WhatsApp Message";
}];
requiresCredential: true;
sideEffect: true;
}, {
audiences: readonly ["internal-support", "mixed"];
capability: "read-provider-object";
description: "Reads WhatsApp Business phone-number readiness and business profile resources through the configured Graph API adapter or provider client for Studio-visible configuration and support diagnostics.";
exposesSensitiveData: true;
label: "Read WhatsApp phone number and profile";
providerObjects: readonly [{
kind: "whatsappPhoneNumber";
label: "WhatsApp Business Phone Number";
}, {
kind: "whatsappBusinessProfile";
label: "WhatsApp Business Profile";
}];
requiresCredential: true;
}, {
audiences: readonly ["internal-support"];
capability: "update-provider-object";
changesWorkflow: true;
description: "Updates WhatsApp Business profile fields through the configured Graph API adapter or provider client when SDK-user configuration permits profile changes.";
exposesSensitiveData: true;
label: "Update WhatsApp business profile";
providerObjects: readonly [{
kind: "whatsappBusinessProfile";
label: "WhatsApp Business Profile";
}];
requiresCredential: true;
sideEffect: true;
}, {
audiences: readonly ["internal-support"];
capability: "whatsapp.webhook-signature";
description: "Validates Meta X-Hub-Signature-256 webhook signatures with the SDK user's app secret.";
exposesSensitiveData: true;
extension: true;
label: "Validate WhatsApp webhook signatures";
providerObjects: readonly [{
kind: "whatsappSignedWebhook";
label: "WhatsApp Signed Webhook";
}];
requiresCredential: true;
}];
category: "messaging";
channelAudiences: readonly ["customer-facing", "mixed"];
coverage: {
evidence: readonly [{
label: "WhatsApp Cloud API get started";
url: "https://developers.facebook.com/documentation/business-messaging/whatsapp/get-started";
}, {
label: "WhatsApp template fundamentals";
url: "https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/overview";
}, {
label: "WhatsApp media";
url: "https://developers.facebook.com/documentation/business-messaging/whatsapp/business-phone-numbers/media/";
}, {
label: "WhatsApp business profiles";
url: "https://developers.facebook.com/documentation/business-messaging/whatsapp/business-phone-numbers/business-profiles";
}, {
label: "WhatsApp business phone numbers";
url: "https://developers.facebook.com/documentation/business-messaging/whatsapp/business-phone-numbers/phone-numbers";
}, {
label: "WhatsApp webhooks";
url: "https://developers.facebook.com/documentation/business-messaging/whatsapp/webhooks/overview/";
}, {
label: "WhatsApp permissions";
url: "https://developers.facebook.com/documentation/business-messaging/whatsapp/permissions/";
}];
notes: readonly ["Coverage is typed for selected WhatsApp Business Platform support workflows: provider REST adapter message sends, template payload construction, media upload/get/download, phone-number readiness, business profile get/update, webhook challenge handling, and X-Hub-Signature-256 validation.", "This is not full WhatsApp Business Platform coverage; template CRUD/listing, Flows, commerce, Calling API, groups, phone-number registration and management, WABA account management, analytics, and broader Business Management APIs remain outside this adapter."];
scope: "support-workflow-subset";
};
credentialRequirements: readonly [{
description: "Server-side Meta access token used by the built-in Graph API adapter or an injected WhatsApp/Meta provider client.";
id: "whatsapp-access-token";
label: "WhatsApp Business access token";
metadata: {
scopeKind: "provider-permission-labels";
};
required: true;
scopes: readonly ["whatsapp_business_messaging", "whatsapp_business_management"];
}, {
description: "Meta phone_number_id used by the built-in Graph API adapter or an injected WhatsApp/Meta provider client.";
id: "whatsapp-phone-number-id";
label: "WhatsApp Business phone number ID";
required: true;
}, {
description: "Server-side app secret used to validate X-Hub-Signature-256 webhook deliveries.";
id: "whatsapp-app-secret";
label: "Meta app secret";
required: true;
}, {
description: "SDK-user-owned token checked during Meta webhook endpoint verification.";
id: "whatsapp-webhook-verify-token";
label: "Webhook verify token";
required: false;
}, {
description: "SDK-user-confirmed Meta app subscription to the WhatsApp Business Account messages webhook field.";
id: "whatsapp-waba-webhook-subscription";
label: "WhatsApp WABA messages webhook subscription";
required: false;
}];
directions: readonly ["receive-only", "send-only", "bidirectional"];
id: "messaging.whatsapp";
limitations: readonly ["Available operations depend on the SDK user's Meta app, WhatsApp Business Account, phone number registration, WABA messages webhook subscription, access token scopes, business verification, templates, quality limits, and messaging windows.", "Free-form WhatsApp service messages are for the customer service window; SDK users must select approved templates for outbound contact outside that window.", "Opt-in, outbound-contact policy, template selection, human escalation, media retention, redaction, and deletion behavior are SDK-user configuration.", "This package provides a built-in Graph API REST adapter when accessToken and phoneNumberId are configured; hosts may still inject an approved WhatsApp/Meta provider client and own automation, promotional messaging, consent, retry, and rate-limit policies."];
maintainers: readonly [{
name: "Cognidesk";
type: "official";
}];
metadata: {
apiCoverage: {
checkedAt: "2026-06-18";
fullMetaGraphCoverage: false;
fullProviderApi: false;
generatedFromOfficialSpec: true;
implementedOperationCount: 7;
operationCatalog: "docs/provider-coverage/whatsapp-business-messaging-openapi-v23-selected-api-2026-06-18.operations.json";
selectedOperationCount: 7;
sourceOperationCount: 113;
sourcePathCount: 78;
sourceSpec: "https://raw.githubusercontent.com/facebook/openapi/main/business-messaging-api_v23.0.yaml";
};
channelCoverage: {
businessProfile: "provider-rest-adapter-read-update";
cloudApiMessages: "provider-rest-adapter-send";
flowsCommerceCallingGroups: "provider-supported-not-typed";
media: "provider-rest-adapter-upload-get-download";
phoneNumberReadiness: "provider-rest-adapter-read";
templateCrud: "provider-supported-not-typed";
templatePayloads: "typed-build-only";
webhooks: "typed-challenge-verify-parse";
};
implementation: {
defaultClientPolicy: "provider-rest-adapter-when-configured";
officialMaintainedServerSdkAvailable: false;
packageOwnedRestClient: true;
providerClient: "WhatsAppMessagingProviderClient";
runtimePackage: "@cognidesk/integration-messaging-whatsapp/runtime";
sdkDecision: {
checkedAt: "2026-06-25";
rejectedSdkPackages: readonly [{
packageName: "whatsapp";
reason: "Official Meta WhatsApp Business Platform Node.js SDK for Cloud API, but the upstream repository and documentation mark the project archived/read-only.";
}, {
packageName: "facebook-nodejs-business-sdk";
reason: "Official Meta Business SDK for broader Graph/Marketing API surfaces, not a maintained WhatsApp Cloud API messaging client.";
}];
result: "no-maintained-official-sdk-rest-adapter-selected";
};
strategy: "no-official-maintained-server-sdk-rest-adapter";
verifiedAt: "2026-06-25";
};
providerClient: {
defaultClientPolicy: "provider-rest-adapter-when-configured";
importPolicy: "provider-client-override-supported";
interface: "WhatsAppMessagingProviderClient";
package: "built-in-or-host-provided";
sdkDecision: {
checkedAt: "2026-06-25";
rejectedSdkPackages: readonly [{
packageName: "whatsapp";
reason: "Official Meta WhatsApp Business Platform Node.js SDK for Cloud API, but the upstream repository and documentation mark the project archived/read-only.";
}, {
packageName: "facebook-nodejs-business-sdk";
reason: "Official Meta Business SDK for broader Graph/Marketing API surfaces, not a maintained WhatsApp Cloud API messaging client.";
}];
result: "no-maintained-official-sdk-rest-adapter-selected";
};
};
};
name: "WhatsApp Business Platform";
operations: readonly [{
alias: "messaging.message.receive";
audiences: readonly ["customer-facing", "mixed"];
capability: "receive";
description: "Validate and parse an inbound WhatsApp Business Platform webhook request.";
exposesSensitiveData: true;
label: "Normalize inbound WhatsApp webhook";
providerObject: "messagingMessage";
providerOperation: "parseWhatsAppWebhook";
requiresCredential: true;
}, {
alias: "messaging.message.send";
audiences: readonly ["customer-facing"];
capability: "send";
description: "Send a WhatsApp message through the configured Graph API adapter or provider client.";
exposesSensitiveData: true;
externallyVisible: true;
label: "Send WhatsApp message";
providerObject: "messagingMessage";
providerOperation: "sendMessage";
requiresApproval: true;
requiresCredential: true;
sideEffect: true;
}, {
alias: "messaging.template.send";
audiences: readonly ["customer-facing"];
capability: "send";
description: "Send an SDK-user-selected approved WhatsApp message template.";
exposesSensitiveData: true;
externallyVisible: true;
label: "Send WhatsApp template";
providerObject: "messagingTemplate";
providerOperation: "sendMessage";
requiresApproval: true;
requiresCredential: true;
sideEffect: true;
}, {
alias: "messaging.draft.create";
audiences: readonly ["customer-facing", "mixed"];
capability: "draft";
description: "Build a WhatsApp Cloud API message payload for review or later send.";
exposesSensitiveData: true;
label: "Build WhatsApp message payload";
providerObject: "messagingMessage";
providerOperation: "buildMessagePayload";
}, {
alias: "messaging.media.send";
audiences: readonly ["customer-facing", "mixed"];
capability: "attach";
description: "Upload media for use in WhatsApp messages through the configured Graph API adapter or provider client.";
exposesSensitiveData: true;
externallyVisible: true;
label: "Upload WhatsApp media";
providerObject: "mediaAttachment";
providerOperation: "uploadMedia";
requiresApproval: true;
requiresCredential: true;
sideEffect: true;
}, {
alias: "whatsapp.phoneNumber.read";
audiences: readonly ["internal-support", "mixed"];
capability: "read-provider-object";
description: "Read WhatsApp Business phone-number readiness metadata through the configured Graph API adapter or provider client.";
exposesSensitiveData: true;
extension: true;
label: "Read WhatsApp phone number";
providerObject: "whatsappPhoneNumber";
providerOperation: "getPhoneNumber";
requiresCredential: true;
}, {
alias: "whatsapp.businessProfile.read";
audiences: readonly ["internal-support", "mixed"];
capability: "read-provider-object";
description: "Read WhatsApp Business profile fields for support diagnostics through the configured Graph API adapter or provider client.";
exposesSensitiveData: true;
extension: true;
label: "Read WhatsApp business profile";
providerObject: "whatsappBusinessProfile";
providerOperation: "getBusinessProfile";
requiresCredential: true;
}, {
alias: "whatsapp.businessProfile.update";
audiences: readonly ["internal-support"];
capability: "update-provider-object";
changesWorkflow: true;
description: "Update WhatsApp Business profile fields through the configured Graph API adapter or provider client when SDK-user policy permits.";
exposesSensitiveData: true;
extension: true;
label: "Update WhatsApp business profile";
providerObject: "whatsappBusinessProfile";
providerOperation: "updateBusinessProfile";
requiresApproval: true;
requiresCredential: true;
sideEffect: true;
}, {
alias: "whatsapp.webhook-signature";
audiences: readonly ["internal-support"];
capability: "whatsapp.webhook-signature";
description: "Validate Meta X-Hub-Signature-256 for WhatsApp webhook delivery.";
exposesSensitiveData: true;
extension: true;
label: "Validate WhatsApp webhook signature";
providerObject: "whatsappSignedWebhook";
providerOperation: "validateWhatsAppWebhookSignature";
requiresCredential: true;
}];
packageName: "@cognidesk/integration-messaging-whatsapp";
privacyNotes: readonly ["WhatsApp messages, contact identifiers, phone numbers, profile names, media metadata, message statuses, and webhook payloads can contain customer data.", "Meta access tokens, app secrets, and webhook verify tokens stay server-side and are represented in Studio only as credential readiness."];
provider: "whatsapp";
trustLevel: "official";
}, {
appSecret: string;
}, {
messaging.draft.create: (input) => Promise\<WhatsAppMessagingJsonObject>;
messaging.media.send: (input) => Promise\<WhatsAppMediaResource>;
messaging.message.receive: (input) => Promise\<WhatsAppSignedWebhook>;
messaging.message.send: (input) => Promise\<WhatsAppApiResponse>;
messaging.template.send: (input) => Promise\<WhatsAppApiResponse>;
whatsapp.businessProfile.read: (input) => Promise\<WhatsAppBusinessProfileResponse>;
whatsapp.businessProfile.update: (input) => Promise\<{
[key: string]: WhatsAppMessagingJsonValue;
success?: boolean;
}>;
whatsapp.phoneNumber.read: (input) => Promise\<WhatsAppPhoneNumberResource>;
whatsapp.webhook-signature: (input) => Promise\<boolean>;
}>
defineWhatsAppWebMessagingIntegration()¶
function defineWhatsAppWebMessagingIntegration(options?): DefinedIntegration<{
capabilities: {
audiences?: ("customer-facing" | "internal-support" | "mixed")[];
capability: string;
changesWorkflow?: boolean;
description?: string;
exposesSensitiveData?: boolean;
extension?: boolean;
label?: string;
metadata?: Record<string, unknown>;
providerObjects?: {
description?: string;
kind: string;
label?: string;
metadata?: Record<string, unknown>;
schemaName?: string;
}[];
requiresCredential?: boolean;
sideEffect?: boolean;
}[];
category: string;
channelAudiences: ("customer-facing" | "internal-support" | "mixed")[];
coverage: {
evidence: {
label: string;
url?: string;
}[];
notes: string[];
scope: | "support-workflow-subset"
| "provider-api-subset"
| "connector-required"
| "local-protocol"
| "full-provider-api";
};
credentialRequirements: {
description?: string;
id: string;
label?: string;
metadata?: Record<string, unknown>;
required: boolean;
scopes: string[];
}[];
directions: (
| "receive-only"
| "send-only"
| "inbound-only"
| "outbound-only"
| "bidirectional")[];
id: string;
limitations: string[];
maintainers: {
name: string;
type: "community" | "official" | "unknown" | "partner";
url?: string;
}[];
metadata?: Record<string, unknown>;
name: string;
operations: {
alias: string;
audience?: "customer-facing" | "internal-support" | "mixed";
audiences?: ("customer-facing" | "internal-support" | "mixed")[];
capability: string;
changesWorkflow?: boolean;
description?: string;
exposesSensitiveData?: boolean;
extension: boolean;
externallyVisible?: boolean;
inputSchema?: unknown;
inputSchemaName?: string;
inputSchemaRef?: string;
label?: string;
metadata?: Record<string, unknown>;
outputSchema?: unknown;
outputSchemaName?: string;
outputSchemaRef?: string;
providerObject?: string;
providerObjects?: {
description?: string;
kind: string;
label?: string;
metadata?: Record<string, unknown>;
schemaName?: string;
}[];
providerOperation?: string;
requiredPolicyIds?: string[];
requiresApproval?: boolean;
requiresCredential?: boolean;
sideEffect?: boolean;
}[];
packageName: string;
privacyNotes: string[];
provider: string;
trustLevel: "community" | "official" | "verified" | "experimental";
} & {
capabilities: readonly [{
audiences: readonly ["customer-facing", "mixed"];
capability: "send";
description: "Sends WhatsApp text messages through a locally authenticated WhatsApp Web linked-device session.";
exposesSensitiveData: true;
label: "Send WhatsApp text messages via linked device";
providerObjects: readonly [{
kind: "whatsappWebMessage";
label: "WhatsApp Web Message";
}];
requiresCredential: true;
sideEffect: true;
}, {
audiences: readonly ["internal-support"];
capability: "provider-readiness";
description: "Attempts to open the configured WhatsApp Web linked-device session.";
extension: true;
label: "Check WhatsApp Web session readiness";
providerObjects: readonly [{
kind: "whatsappWebReadiness";
label: "WhatsApp Web Readiness";
}];
requiresCredential: true;
}];
category: "messaging";
channelAudiences: readonly ["customer-facing", "mixed"];
coverage: {
evidence: readonly [{
label: "wacli GitHub";
url: "https://github.com/openclaw/wacli";
}, {
label: "Baileys introduction";
url: "https://baileys.wiki/docs/intro/";
}, {
label: "Baileys connecting";
url: "https://baileys.wiki/docs/socket/connecting/";
}];
notes: readonly ["Sends WhatsApp text messages through a locally paired WhatsApp Web linked-device session.", "This adapter follows the same non-Business-API linked-device approach used by WhatsApp Web clients such as openclaw/wacli, but it does not shell out to the wacli binary.", "This adapter does not require a WhatsApp Business Account, Meta app, Cloud API token, or phone_number_id.", "This is not an official WhatsApp Business Platform integration; delivery, account limits, session health, and terms/compliance are owned by the SDK user.", "Inbound sync and local search are outside this initial send-only adapter scope."];
scope: "local-protocol";
};
credentialRequirements: readonly [{
description: "Local linked-device auth state directory used to reconnect to WhatsApp Web.";
id: "whatsapp-web-auth-state";
label: "WhatsApp Web auth state";
required: true;
}, {
description: "Pair the session from WhatsApp Linked Devices before sending messages.";
id: "whatsapp-web-linked-device-session";
label: "WhatsApp linked-device session";
required: true;
}, {
description: "Optional phone number used to request a WhatsApp Web pairing code instead of scanning a QR code.";
id: "whatsapp-web-pairing-phone";
label: "WhatsApp pairing phone";
required: false;
}];
dataHandling: readonly ["Outbound message text and recipient identifiers are sent through the local WhatsApp Web session.", "WhatsApp Web auth/session state is stored in the configured local auth state directory."];
directions: readonly ["send-only"];
id: "messaging.whatsapp-web";
limits: readonly ["Requires a previously paired WhatsApp linked-device session or an interactive first pairing.", "Only text sends are wrapped in this adapter; media, groups, sync, and search are outside the initial scope.", "Use with an account dedicated to automation or demos; do not link a personal inbox unless the operator understands the privacy and automation risk."];
metadata: {
implementationStrategy: "linked-device-websocket";
protocol: "whatsapp-web-linked-device";
runtimeException: {
evidence: readonly [{
label: "Baileys introduction";
url: "https://baileys.wiki/docs/intro/";
}, {
label: "WhiskeySockets/Baileys";
url: "https://github.com/WhiskeySockets/Baileys";
}];
officialProviderSdk: false;
officialWhatsAppBusinessApi: false;
provider: "whatsapp-web";
reason: "Baileys is deliberately scoped to the community WhatsApp Web linked-device adapter; it is not an official Meta WhatsApp Business Platform SDK and does not use the WhatsApp Business API.";
runtimePackage: "baileys";
runtimePackageSource: "WhiskeySockets/Baileys";
scope: "send-only WhatsApp Web linked-device adapter";
strategy: "community-linked-device-runtime";
verifiedAt: "2026-06-25";
};
runtimeLibrary: {
declaredProviderSdkDependency: true;
name: "baileys";
packageName: "baileys";
source: "WhiskeySockets/Baileys";
};
};
name: "WhatsApp Web Linked Device";
operations: readonly [{
alias: "whatsapp-web.message.send";
capability: "send";
exposesSensitiveData: true;
extension: true;
externallyVisible: true;
inputSchemaName: "WhatsAppWebSendTextInput";
outputSchemaName: "WhatsAppWebSendTextResult";
providerObject: "whatsappWebMessage";
providerOperation: "sendMessage";
requiresCredential: true;
sideEffect: true;
}, {
alias: "whatsapp-web.readiness.check";
capability: "provider-readiness";
extension: true;
outputSchemaName: "WhatsAppWebReadinessResult";
providerObject: "whatsappWebReadiness";
providerOperation: "connect";
requiresCredential: true;
}];
packageName: "@cognidesk/integration-messaging-whatsapp";
provider: "whatsapp-web";
trustLevel: "community";
}, unknown, {
whatsapp-web.message.send: (input) => Promise<WhatsAppWebSendTextResult>;
whatsapp-web.readiness.check: () => Promise<WhatsAppWebReadinessResult>;
}>;
Parameters¶
| Parameter | Type |
|---|---|
options? |
WhatsAppWebMessagingIntegrationOptions |
Returns¶
DefinedIntegration\<{
capabilities: {
audiences?: ("customer-facing" | "internal-support" | "mixed")[];
capability: string;
changesWorkflow?: boolean;
description?: string;
exposesSensitiveData?: boolean;
extension?: boolean;
label?: string;
metadata?: Record\<string, unknown>;
providerObjects?: {
description?: string;
kind: string;
label?: string;
metadata?: Record\<string, unknown>;
schemaName?: string;
}[];
requiresCredential?: boolean;
sideEffect?: boolean;
}[];
category: string;
channelAudiences: ("customer-facing" | "internal-support" | "mixed")[];
coverage: {
evidence: {
label: string;
url?: string;
}[];
notes: string[];
scope: | "support-workflow-subset"
| "provider-api-subset"
| "connector-required"
| "local-protocol"
| "full-provider-api";
};
credentialRequirements: {
description?: string;
id: string;
label?: string;
metadata?: Record\<string, unknown>;
required: boolean;
scopes: string[];
}[];
directions: (
| "receive-only"
| "send-only"
| "inbound-only"
| "outbound-only"
| "bidirectional")[];
id: string;
limitations: string[];
maintainers: {
name: string;
type: "community" | "official" | "unknown" | "partner";
url?: string;
}[];
metadata?: Record\<string, unknown>;
name: string;
operations: {
alias: string;
audience?: "customer-facing" | "internal-support" | "mixed";
audiences?: ("customer-facing" | "internal-support" | "mixed")[];
capability: string;
changesWorkflow?: boolean;
description?: string;
exposesSensitiveData?: boolean;
extension: boolean;
externallyVisible?: boolean;
inputSchema?: unknown;
inputSchemaName?: string;
inputSchemaRef?: string;
label?: string;
metadata?: Record\<string, unknown>;
outputSchema?: unknown;
outputSchemaName?: string;
outputSchemaRef?: string;
providerObject?: string;
providerObjects?: {
description?: string;
kind: string;
label?: string;
metadata?: Record\<string, unknown>;
schemaName?: string;
}[];
providerOperation?: string;
requiredPolicyIds?: string[];
requiresApproval?: boolean;
requiresCredential?: boolean;
sideEffect?: boolean;
}[];
packageName: string;
privacyNotes: string[];
provider: string;
trustLevel: "community" | "official" | "verified" | "experimental";
} & {
capabilities: readonly [{
audiences: readonly ["customer-facing", "mixed"];
capability: "send";
description: "Sends WhatsApp text messages through a locally authenticated WhatsApp Web linked-device session.";
exposesSensitiveData: true;
label: "Send WhatsApp text messages via linked device";
providerObjects: readonly [{
kind: "whatsappWebMessage";
label: "WhatsApp Web Message";
}];
requiresCredential: true;
sideEffect: true;
}, {
audiences: readonly ["internal-support"];
capability: "provider-readiness";
description: "Attempts to open the configured WhatsApp Web linked-device session.";
extension: true;
label: "Check WhatsApp Web session readiness";
providerObjects: readonly [{
kind: "whatsappWebReadiness";
label: "WhatsApp Web Readiness";
}];
requiresCredential: true;
}];
category: "messaging";
channelAudiences: readonly ["customer-facing", "mixed"];
coverage: {
evidence: readonly [{
label: "wacli GitHub";
url: "https://github.com/openclaw/wacli";
}, {
label: "Baileys introduction";
url: "https://baileys.wiki/docs/intro/";
}, {
label: "Baileys connecting";
url: "https://baileys.wiki/docs/socket/connecting/";
}];
notes: readonly ["Sends WhatsApp text messages through a locally paired WhatsApp Web linked-device session.", "This adapter follows the same non-Business-API linked-device approach used by WhatsApp Web clients such as openclaw/wacli, but it does not shell out to the wacli binary.", "This adapter does not require a WhatsApp Business Account, Meta app, Cloud API token, or phone_number_id.", "This is not an official WhatsApp Business Platform integration; delivery, account limits, session health, and terms/compliance are owned by the SDK user.", "Inbound sync and local search are outside this initial send-only adapter scope."];
scope: "local-protocol";
};
credentialRequirements: readonly [{
description: "Local linked-device auth state directory used to reconnect to WhatsApp Web.";
id: "whatsapp-web-auth-state";
label: "WhatsApp Web auth state";
required: true;
}, {
description: "Pair the session from WhatsApp Linked Devices before sending messages.";
id: "whatsapp-web-linked-device-session";
label: "WhatsApp linked-device session";
required: true;
}, {
description: "Optional phone number used to request a WhatsApp Web pairing code instead of scanning a QR code.";
id: "whatsapp-web-pairing-phone";
label: "WhatsApp pairing phone";
required: false;
}];
dataHandling: readonly ["Outbound message text and recipient identifiers are sent through the local WhatsApp Web session.", "WhatsApp Web auth/session state is stored in the configured local auth state directory."];
directions: readonly ["send-only"];
id: "messaging.whatsapp-web";
limits: readonly ["Requires a previously paired WhatsApp linked-device session or an interactive first pairing.", "Only text sends are wrapped in this adapter; media, groups, sync, and search are outside the initial scope.", "Use with an account dedicated to automation or demos; do not link a personal inbox unless the operator understands the privacy and automation risk."];
metadata: {
implementationStrategy: "linked-device-websocket";
protocol: "whatsapp-web-linked-device";
runtimeException: {
evidence: readonly [{
label: "Baileys introduction";
url: "https://baileys.wiki/docs/intro/";
}, {
label: "WhiskeySockets/Baileys";
url: "https://github.com/WhiskeySockets/Baileys";
}];
officialProviderSdk: false;
officialWhatsAppBusinessApi: false;
provider: "whatsapp-web";
reason: "Baileys is deliberately scoped to the community WhatsApp Web linked-device adapter; it is not an official Meta WhatsApp Business Platform SDK and does not use the WhatsApp Business API.";
runtimePackage: "baileys";
runtimePackageSource: "WhiskeySockets/Baileys";
scope: "send-only WhatsApp Web linked-device adapter";
strategy: "community-linked-device-runtime";
verifiedAt: "2026-06-25";
};
runtimeLibrary: {
declaredProviderSdkDependency: true;
name: "baileys";
packageName: "baileys";
source: "WhiskeySockets/Baileys";
};
};
name: "WhatsApp Web Linked Device";
operations: readonly [{
alias: "whatsapp-web.message.send";
capability: "send";
exposesSensitiveData: true;
extension: true;
externallyVisible: true;
inputSchemaName: "WhatsAppWebSendTextInput";
outputSchemaName: "WhatsAppWebSendTextResult";
providerObject: "whatsappWebMessage";
providerOperation: "sendMessage";
requiresCredential: true;
sideEffect: true;
}, {
alias: "whatsapp-web.readiness.check";
capability: "provider-readiness";
extension: true;
outputSchemaName: "WhatsAppWebReadinessResult";
providerObject: "whatsappWebReadiness";
providerOperation: "connect";
requiresCredential: true;
}];
packageName: "@cognidesk/integration-messaging-whatsapp";
provider: "whatsapp-web";
trustLevel: "community";
}, unknown, {
whatsapp-web.message.send: (input) => Promise\<WhatsAppWebSendTextResult>;
whatsapp-web.readiness.check: () => Promise\<WhatsAppWebReadinessResult>;
}>
normalizeWhatsAppWebhookEvents()¶
Parameters¶
| Parameter | Type |
|---|---|
payload |
WhatsAppWebhookPayload |
Returns¶
parseWhatsAppWebhook()¶
Parameters¶
| Parameter | Type |
|---|---|
request |
Request |
options? |
ParseWhatsAppWebhookOptions |
Returns¶
Promise\<WhatsAppSignedWebhook>
toWhatsAppWebJid()¶
Parameters¶
| Parameter | Type |
|---|---|
recipient |
string |
Returns¶
string
validateWhatsAppWebhookSignature()¶
Parameters¶
| Parameter | Type |
|---|---|
input |
ValidateWhatsAppWebhookSignatureInput |
Returns¶
boolean
verifyWhatsAppWebhookChallenge()¶
Parameters¶
| Parameter | Type |
|---|---|
input |
VerifyWhatsAppWebhookChallengeInput |
Returns¶
string
whatsappMessagingCredentialStatuses()¶
function whatsappMessagingCredentialStatuses(input): {
expiresAt?: string;
message?: string;
providerPackageId?: string;
requirementId: string;
scopes?: string[];
state: | "required"
| "configured"
| "permission-blocked"
| "not-required"
| "missing"
| "expired"
| "insufficient-scope"
| "unavailable";
}[];
Parameters¶
| Parameter | Type |
|---|---|
input |
WhatsAppCredentialStatusInput |
Returns¶
{
expiresAt?: string;
message?: string;
providerPackageId?: string;
requirementId: string;
scopes?: string[];
state: | "required"
| "configured"
| "permission-blocked"
| "not-required"
| "missing"
| "expired"
| "insufficient-scope"
| "unavailable";
}[]
References¶
whatsappMessagingProviderManifest¶
Re-exports whatsappMessagingProviderManifest