This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new baf74aac22a4 CAMEL-24961: camel-whatsapp - describe the body of the
webhook consumer, and do not mark the component producer only (#28422)
baf74aac22a4 is described below
commit baf74aac22a401e62ce0622abf56f5899b13fc74
Author: Claus Ibsen <[email protected]>
AuthorDate: Sun Oct 25 12:44:07 2026 +0100
CAMEL-24961: camel-whatsapp - describe the body of the webhook consumer,
and do not mark the component producer only (#28422)
camel-whatsapp receives events in webhook mode, but was marked producer
only, so the catalog could not describe the body of the webhook route.
WhatsAppEndpoint is no longer producerOnly and extends DefaultEndpoint instead
of ScheduledPollEndpoint, as it never polls; createConsumer points to the
webhook component, as camel-clickup does. Add consumerOut and consumerReply
body types, an upgrade guide entry, and regenerate the catalog and the Endpoint
and Component DSL.
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
---
.../apache/camel/catalog/components/whatsapp.json | 46 +-
.../camel/catalog/docs/whatsapp-component.adoc | 4 +-
.../whatsapp/WhatsAppComponentConfigurer.java | 6 +
.../whatsapp/WhatsAppEndpointConfigurer.java | 18 +
.../whatsapp/WhatsAppEndpointUriFactory.java | 5 +-
.../apache/camel/component/whatsapp/whatsapp.json | 46 +-
.../src/main/docs/whatsapp-component.adoc | 4 +-
.../camel/component/whatsapp/WhatsAppEndpoint.java | 21 +-
.../ROOT/pages/camel-4x-upgrade-guide-4_24.adoc | 8 +
.../component/ComponentsBuilderFactory.java | 2 +-
.../dsl/WhatsappComponentBuilderFactory.java | 65 ++-
.../builder/endpoint/EndpointHeaderBuilders.java | 2 +-
.../builder/endpoint/StaticEndpointBuilders.java | 4 +-
.../dsl/WhatsAppEndpointBuilderFactory.java | 507 ++++++++++++++++++++-
14 files changed, 646 insertions(+), 92 deletions(-)
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/whatsapp.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/whatsapp.json
index ed03ad118418..5bd925642ec9 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/whatsapp.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/whatsapp.json
@@ -3,7 +3,7 @@
"kind": "component",
"name": "whatsapp",
"title": "WhatsApp",
- "description": "Send messages to WhatsApp.",
+ "description": "Send messages to WhatsApp, and receive its events in
webhook mode.",
"deprecated": false,
"firstVersion": "3.19.0",
"label": "cloud,api,chat",
@@ -18,39 +18,45 @@
"async": false,
"api": false,
"consumerOnly": false,
- "producerOnly": true,
+ "producerOnly": false,
"lenientProperties": false,
"browsable": false,
"remote": true
},
"componentProperties": {
- "lazyStartProducer": { "index": 0, "kind": "property", "displayName":
"Lazy Start Producer", "group": "producer", "label": "producer", "required":
false, "type": "boolean", "javaType": "boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": false, "description":
"Whether the producer should be started lazy (on the first message). By
starting lazy you can use this to allow CamelContext and routes to startup in
situations where a producer may otherwise fail [...]
- "phoneNumberId": { "index": 1, "kind": "property", "displayName": "Phone
Number Id", "group": "producer", "label": "", "required": true, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "Phone Number ID taken from WhatsApp
Meta for Developers Dashboard" },
- "apiVersion": { "index": 2, "kind": "property", "displayName": "Api
Version", "group": "advanced", "label": "advanced", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": "v13.0", "description": "WhatsApp Cloud
API version" },
- "autowiredEnabled": { "index": 3, "kind": "property", "displayName":
"Autowired Enabled", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description":
"Whether autowiring is enabled. This is used for automatic autowiring options
(the option must be marked as autowired) by looking up in the registry to find
if there is a single instance of matching t [...]
- "baseUri": { "index": 4, "kind": "property", "displayName": "Base Uri",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": "https:\/\/graph.facebook.com", "description":
"Can be used to set an alternative base URI, e.g. when you want to test the
component against a mock WhatsApp API" },
- "client": { "index": 5, "kind": "property", "displayName": "Client",
"group": "advanced", "label": "advanced", "required": false, "type": "object",
"javaType": "java.net.http.HttpClient", "deprecated": false, "autowired":
false, "secret": false, "description": "Java 11 HttpClient implementation" },
- "webhookVerifyToken": { "index": 6, "kind": "property", "displayName":
"Webhook Verify Token", "group": "advanced", "label": "advanced", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description":
"Webhook verify token" },
- "authorizationToken": { "index": 7, "kind": "property", "displayName":
"Authorization Token", "group": "security", "label": "security", "required":
true, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description":
"Authorization Token taken from WhatsApp Meta for Developers Dashboard" }
+ "phoneNumberId": { "index": 0, "kind": "property", "displayName": "Phone
Number Id", "group": "common", "label": "", "required": true, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "Phone Number ID taken from WhatsApp Meta for
Developers Dashboard" },
+ "bridgeErrorHandler": { "index": 1, "kind": "property", "displayName":
"Bridge Error Handler", "group": "consumer", "label": "consumer", "required":
false, "type": "boolean", "javaType": "boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": false, "description":
"Allows for bridging the consumer to the Camel routing Error Handler, which
mean any exceptions (if possible) occurred while the Camel consumer is trying
to pickup incoming messages, or the like [...]
+ "lazyStartProducer": { "index": 2, "kind": "property", "displayName":
"Lazy Start Producer", "group": "producer", "label": "producer", "required":
false, "type": "boolean", "javaType": "boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": false, "description":
"Whether the producer should be started lazy (on the first message). By
starting lazy you can use this to allow CamelContext and routes to startup in
situations where a producer may otherwise fail [...]
+ "apiVersion": { "index": 3, "kind": "property", "displayName": "Api
Version", "group": "advanced", "label": "advanced", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": "v13.0", "description": "WhatsApp Cloud
API version" },
+ "autowiredEnabled": { "index": 4, "kind": "property", "displayName":
"Autowired Enabled", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description":
"Whether autowiring is enabled. This is used for automatic autowiring options
(the option must be marked as autowired) by looking up in the registry to find
if there is a single instance of matching t [...]
+ "baseUri": { "index": 5, "kind": "property", "displayName": "Base Uri",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": "https:\/\/graph.facebook.com", "description":
"Can be used to set an alternative base URI, e.g. when you want to test the
component against a mock WhatsApp API" },
+ "client": { "index": 6, "kind": "property", "displayName": "Client",
"group": "advanced", "label": "advanced", "required": false, "type": "object",
"javaType": "java.net.http.HttpClient", "deprecated": false, "autowired":
false, "secret": false, "description": "Java 11 HttpClient implementation" },
+ "webhookVerifyToken": { "index": 7, "kind": "property", "displayName":
"Webhook Verify Token", "group": "advanced", "label": "advanced", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description":
"Webhook verify token" },
+ "authorizationToken": { "index": 8, "kind": "property", "displayName":
"Authorization Token", "group": "security", "label": "security", "required":
true, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description":
"Authorization Token taken from WhatsApp Meta for Developers Dashboard" }
},
"headers": {
"CamelWhatsAppPhoneNumberId": { "index": 0, "kind": "header",
"displayName": "", "group": "producer", "label": "producer", "required": false,
"javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Phone Number ID taken from WhatsApp
Meta for Developers Dashboard", "constantName":
"org.apache.camel.component.whatsapp.WhatsAppConstants#WHATSAPP_PHONE_NUMBER_ID"
},
"CamelWhatsAppRecipientPhoneNumberId": { "index": 1, "kind": "header",
"displayName": "", "group": "producer", "label": "producer", "required": false,
"javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Recipient phone number associated with
Phone Number ID", "constantName":
"org.apache.camel.component.whatsapp.WhatsAppConstants#WHATSAPP_RECIPIENT_PHONE_NUMBER_ID"
}
},
"bodyTypes": {
+ "consumerOut": { "carriers": [ "text", "null" ], "description": "In
webhook mode (webhook:whatsapp:...), the event that WhatsApp posts, as JSON
text. The verification request of WhatsApp (a GET) also reaches the route, with
the hub.challenge as the body when hub.mode is subscribe and hub.verify_token
matches webhookVerifyToken, else with no body (403, or 400 when the parameters
are missing). With webhookSecret, an event without a valid X-Hub-Signature-256
is answered with 403 and doe [...]
+ "consumerReply": { "carriers": [ "any" ], "description": "The body at the
end of the route is not sent: the reply is the body the route got, the event or
the hub.challenge" },
"producerIn": { "carriers": [ "pojo", "null" ], "description": "A request
of org.apache.camel.component.whatsapp.model: a TextMessageRequest,
MediaMessageRequest, LocationMessageRequest, ContactMessageRequest,
InteractiveMessageRequest or TemplateMessageRequest to send a message, or an
UploadMediaRequest to upload a media file. Text, bytes, a Map or another POJO
fails: build the request. No body sends nothing" },
"producerOut": { "carriers": [ "pojo", "unchanged" ], "description": "The
org.apache.camel.component.whatsapp.model.MessageResponse of WhatsApp, with the
ids of the messages sent, or the id of the media uploaded. No body is left as
it is" }
},
"properties": {
- "phoneNumberId": { "index": 0, "kind": "path", "displayName": "Phone
Number Id", "group": "producer", "label": "", "required": true, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "The phone number ID
taken from whatsapp-business dashboard." },
- "lazyStartProducer": { "index": 1, "kind": "parameter", "displayName":
"Lazy Start Producer", "group": "producer (advanced)", "label":
"producer,advanced", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether the producer should be started
lazy (on the first message). By starting lazy you can use this to allow
CamelContext and routes to startup in situations where a produc [...]
- "apiVersion": { "index": 2, "kind": "parameter", "displayName": "Api
Version", "group": "advanced", "label": "advanced", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "Facebook graph api
version." },
- "baseUri": { "index": 3, "kind": "parameter", "displayName": "Base Uri",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "Can be used to set an
alternative base URI, e.g. when you want to test the component against a mock
WhatsApp [...]
- "httpClient": { "index": 4, "kind": "parameter", "displayName": "Http
Client", "group": "advanced", "label": "advanced", "required": false, "type":
"object", "javaType": "java.net.http.HttpClient", "deprecated": false,
"autowired": false, "secret": false, "description": "HttpClient implementation"
},
- "webhookPath": { "index": 5, "kind": "parameter", "displayName": "Webhook
Path", "group": "advanced", "label": "advanced", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": "webhook", "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "Webhook path" },
- "whatsappService": { "index": 6, "kind": "parameter", "displayName":
"Whatsapp Service", "group": "advanced", "label": "advanced", "required":
false, "type": "object", "javaType":
"org.apache.camel.component.whatsapp.WhatsAppService", "deprecated": false,
"autowired": false, "secret": false, "description": "WhatsApp service
implementation" },
- "authorizationToken": { "index": 7, "kind": "parameter", "displayName":
"Authorization Token", "group": "security", "label": "security", "required":
true, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": true, "security":
"secret", "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "The authorization access
token taken from w [...]
- "webhookSecret": { "index": 8, "kind": "parameter", "displayName":
"Webhook Secret", "group": "security", "label": "security", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "The app secret used to
verify the X-Hub-Signature-256 signature of inbound [...]
- "webhookVerifyToken": { "index": 9, "kind": "parameter", "displayName":
"Webhook Verify Token", "group": "security", "label": "security", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "Webhook verify token" }
+ "phoneNumberId": { "index": 0, "kind": "path", "displayName": "Phone
Number Id", "group": "common", "label": "", "required": true, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "The phone number ID
taken from whatsapp-business dashboard." },
+ "bridgeErrorHandler": { "index": 1, "kind": "parameter", "displayName":
"Bridge Error Handler", "group": "consumer (advanced)", "label":
"consumer,advanced", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Allows for bridging the consumer to the
Camel routing Error Handler, which mean any exceptions (if possible) occurred
while the Camel consumer is trying to pickup incoming [...]
+ "exceptionHandler": { "index": 2, "kind": "parameter", "displayName":
"Exception Handler", "group": "consumer (advanced)", "label":
"consumer,advanced", "required": false, "type": "object", "javaType":
"org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.",
"deprecated": false, "autowired": false, "secret": false, "description": "To
let the consumer use a custom ExceptionHandler. Notice if the option
bridgeErrorHandler is enabled then this option is not in use. By def [...]
+ "exchangePattern": { "index": 3, "kind": "parameter", "displayName":
"Exchange Pattern", "group": "consumer (advanced)", "label":
"consumer,advanced", "required": false, "type": "enum", "javaType":
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ],
"deprecated": false, "autowired": false, "secret": false, "description": "Sets
the exchange pattern when the consumer creates an exchange." },
+ "lazyStartProducer": { "index": 4, "kind": "parameter", "displayName":
"Lazy Start Producer", "group": "producer (advanced)", "label":
"producer,advanced", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether the producer should be started
lazy (on the first message). By starting lazy you can use this to allow
CamelContext and routes to startup in situations where a produc [...]
+ "apiVersion": { "index": 5, "kind": "parameter", "displayName": "Api
Version", "group": "advanced", "label": "advanced", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "Facebook graph api
version." },
+ "baseUri": { "index": 6, "kind": "parameter", "displayName": "Base Uri",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "Can be used to set an
alternative base URI, e.g. when you want to test the component against a mock
WhatsApp [...]
+ "httpClient": { "index": 7, "kind": "parameter", "displayName": "Http
Client", "group": "advanced", "label": "advanced", "required": false, "type":
"object", "javaType": "java.net.http.HttpClient", "deprecated": false,
"autowired": false, "secret": false, "description": "HttpClient implementation"
},
+ "webhookPath": { "index": 8, "kind": "parameter", "displayName": "Webhook
Path", "group": "advanced", "label": "advanced", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": "webhook", "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "Webhook path" },
+ "whatsappService": { "index": 9, "kind": "parameter", "displayName":
"Whatsapp Service", "group": "advanced", "label": "advanced", "required":
false, "type": "object", "javaType":
"org.apache.camel.component.whatsapp.WhatsAppService", "deprecated": false,
"autowired": false, "secret": false, "description": "WhatsApp service
implementation" },
+ "authorizationToken": { "index": 10, "kind": "parameter", "displayName":
"Authorization Token", "group": "security", "label": "security", "required":
true, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": true, "security":
"secret", "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "The authorization access
token taken from [...]
+ "webhookSecret": { "index": 11, "kind": "parameter", "displayName":
"Webhook Secret", "group": "security", "label": "security", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "The app secret used to
verify the X-Hub-Signature-256 signature of inbound [...]
+ "webhookVerifyToken": { "index": 12, "kind": "parameter", "displayName":
"Webhook Verify Token", "group": "security", "label": "security", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "Webhook verify token" }
}
}
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/whatsapp-component.adoc
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/whatsapp-component.adoc
index 0ea8f5c8845a..1da15a25c2c2 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/whatsapp-component.adoc
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/whatsapp-component.adoc
@@ -2,11 +2,11 @@
:doctitle: WhatsApp
:shortname: whatsapp
:artifactid: camel-whatsapp
-:description: Send messages to WhatsApp.
+:description: Send messages to WhatsApp, and receive its events in webhook
mode.
:since: 3.19
:supportlevel: Stable
:tabs-sync-option:
-:component-header: Only producer is supported
+:component-header: Both producer and consumer are supported
*Since Camel {since}*
diff --git
a/components/camel-whatsapp/src/generated/java/org/apache/camel/component/whatsapp/WhatsAppComponentConfigurer.java
b/components/camel-whatsapp/src/generated/java/org/apache/camel/component/whatsapp/WhatsAppComponentConfigurer.java
index c7893e5970b2..b85cb6d7f5b8 100644
---
a/components/camel-whatsapp/src/generated/java/org/apache/camel/component/whatsapp/WhatsAppComponentConfigurer.java
+++
b/components/camel-whatsapp/src/generated/java/org/apache/camel/component/whatsapp/WhatsAppComponentConfigurer.java
@@ -31,6 +31,8 @@ public class WhatsAppComponentConfigurer extends
PropertyConfigurerSupport imple
case "autowiredEnabled":
target.setAutowiredEnabled(property(camelContext, boolean.class, value));
return true;
case "baseuri":
case "baseUri": target.setBaseUri(property(camelContext,
java.lang.String.class, value)); return true;
+ case "bridgeerrorhandler":
+ case "bridgeErrorHandler":
target.setBridgeErrorHandler(property(camelContext, boolean.class, value));
return true;
case "client": target.setClient(property(camelContext,
java.net.http.HttpClient.class, value)); return true;
case "lazystartproducer":
case "lazyStartProducer":
target.setLazyStartProducer(property(camelContext, boolean.class, value));
return true;
@@ -53,6 +55,8 @@ public class WhatsAppComponentConfigurer extends
PropertyConfigurerSupport imple
case "autowiredEnabled": return boolean.class;
case "baseuri":
case "baseUri": return java.lang.String.class;
+ case "bridgeerrorhandler":
+ case "bridgeErrorHandler": return boolean.class;
case "client": return java.net.http.HttpClient.class;
case "lazystartproducer":
case "lazyStartProducer": return boolean.class;
@@ -76,6 +80,8 @@ public class WhatsAppComponentConfigurer extends
PropertyConfigurerSupport imple
case "autowiredEnabled": return target.isAutowiredEnabled();
case "baseuri":
case "baseUri": return target.getBaseUri();
+ case "bridgeerrorhandler":
+ case "bridgeErrorHandler": return target.isBridgeErrorHandler();
case "client": return target.getClient();
case "lazystartproducer":
case "lazyStartProducer": return target.isLazyStartProducer();
diff --git
a/components/camel-whatsapp/src/generated/java/org/apache/camel/component/whatsapp/WhatsAppEndpointConfigurer.java
b/components/camel-whatsapp/src/generated/java/org/apache/camel/component/whatsapp/WhatsAppEndpointConfigurer.java
index d4d2aee025a5..50ef1370de04 100644
---
a/components/camel-whatsapp/src/generated/java/org/apache/camel/component/whatsapp/WhatsAppEndpointConfigurer.java
+++
b/components/camel-whatsapp/src/generated/java/org/apache/camel/component/whatsapp/WhatsAppEndpointConfigurer.java
@@ -29,6 +29,12 @@ public class WhatsAppEndpointConfigurer extends
PropertyConfigurerSupport implem
case "authorizationToken":
target.getConfiguration().setAuthorizationToken(property(camelContext,
java.lang.String.class, value)); return true;
case "baseuri":
case "baseUri":
target.getConfiguration().setBaseUri(property(camelContext,
java.lang.String.class, value)); return true;
+ case "bridgeerrorhandler":
+ case "bridgeErrorHandler":
target.setBridgeErrorHandler(property(camelContext, boolean.class, value));
return true;
+ case "exceptionhandler":
+ case "exceptionHandler":
target.setExceptionHandler(property(camelContext,
org.apache.camel.spi.ExceptionHandler.class, value)); return true;
+ case "exchangepattern":
+ case "exchangePattern":
target.setExchangePattern(property(camelContext,
org.apache.camel.ExchangePattern.class, value)); return true;
case "httpclient":
case "httpClient": target.setHttpClient(property(camelContext,
java.net.http.HttpClient.class, value)); return true;
case "lazystartproducer":
@@ -54,6 +60,12 @@ public class WhatsAppEndpointConfigurer extends
PropertyConfigurerSupport implem
case "authorizationToken": return java.lang.String.class;
case "baseuri":
case "baseUri": return java.lang.String.class;
+ case "bridgeerrorhandler":
+ case "bridgeErrorHandler": return boolean.class;
+ case "exceptionhandler":
+ case "exceptionHandler": return
org.apache.camel.spi.ExceptionHandler.class;
+ case "exchangepattern":
+ case "exchangePattern": return org.apache.camel.ExchangePattern.class;
case "httpclient":
case "httpClient": return java.net.http.HttpClient.class;
case "lazystartproducer":
@@ -80,6 +92,12 @@ public class WhatsAppEndpointConfigurer extends
PropertyConfigurerSupport implem
case "authorizationToken": return
target.getConfiguration().getAuthorizationToken();
case "baseuri":
case "baseUri": return target.getConfiguration().getBaseUri();
+ case "bridgeerrorhandler":
+ case "bridgeErrorHandler": return target.isBridgeErrorHandler();
+ case "exceptionhandler":
+ case "exceptionHandler": return target.getExceptionHandler();
+ case "exchangepattern":
+ case "exchangePattern": return target.getExchangePattern();
case "httpclient":
case "httpClient": return target.getHttpClient();
case "lazystartproducer":
diff --git
a/components/camel-whatsapp/src/generated/java/org/apache/camel/component/whatsapp/WhatsAppEndpointUriFactory.java
b/components/camel-whatsapp/src/generated/java/org/apache/camel/component/whatsapp/WhatsAppEndpointUriFactory.java
index 46e8ff59126a..63ab2f0d1ad4 100644
---
a/components/camel-whatsapp/src/generated/java/org/apache/camel/component/whatsapp/WhatsAppEndpointUriFactory.java
+++
b/components/camel-whatsapp/src/generated/java/org/apache/camel/component/whatsapp/WhatsAppEndpointUriFactory.java
@@ -24,10 +24,13 @@ public class WhatsAppEndpointUriFactory extends
org.apache.camel.support.compone
private static final Set<String> ENDPOINT_IDENTITY_PROPERTY_NAMES;
private static final Map<String, String> MULTI_VALUE_PREFIXES;
static {
- Set<String> props = new HashSet<>(10);
+ Set<String> props = new HashSet<>(13);
props.add("apiVersion");
props.add("authorizationToken");
props.add("baseUri");
+ props.add("bridgeErrorHandler");
+ props.add("exceptionHandler");
+ props.add("exchangePattern");
props.add("httpClient");
props.add("lazyStartProducer");
props.add("phoneNumberId");
diff --git
a/components/camel-whatsapp/src/generated/resources/META-INF/org/apache/camel/component/whatsapp/whatsapp.json
b/components/camel-whatsapp/src/generated/resources/META-INF/org/apache/camel/component/whatsapp/whatsapp.json
index ed03ad118418..5bd925642ec9 100644
---
a/components/camel-whatsapp/src/generated/resources/META-INF/org/apache/camel/component/whatsapp/whatsapp.json
+++
b/components/camel-whatsapp/src/generated/resources/META-INF/org/apache/camel/component/whatsapp/whatsapp.json
@@ -3,7 +3,7 @@
"kind": "component",
"name": "whatsapp",
"title": "WhatsApp",
- "description": "Send messages to WhatsApp.",
+ "description": "Send messages to WhatsApp, and receive its events in
webhook mode.",
"deprecated": false,
"firstVersion": "3.19.0",
"label": "cloud,api,chat",
@@ -18,39 +18,45 @@
"async": false,
"api": false,
"consumerOnly": false,
- "producerOnly": true,
+ "producerOnly": false,
"lenientProperties": false,
"browsable": false,
"remote": true
},
"componentProperties": {
- "lazyStartProducer": { "index": 0, "kind": "property", "displayName":
"Lazy Start Producer", "group": "producer", "label": "producer", "required":
false, "type": "boolean", "javaType": "boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": false, "description":
"Whether the producer should be started lazy (on the first message). By
starting lazy you can use this to allow CamelContext and routes to startup in
situations where a producer may otherwise fail [...]
- "phoneNumberId": { "index": 1, "kind": "property", "displayName": "Phone
Number Id", "group": "producer", "label": "", "required": true, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "Phone Number ID taken from WhatsApp
Meta for Developers Dashboard" },
- "apiVersion": { "index": 2, "kind": "property", "displayName": "Api
Version", "group": "advanced", "label": "advanced", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": "v13.0", "description": "WhatsApp Cloud
API version" },
- "autowiredEnabled": { "index": 3, "kind": "property", "displayName":
"Autowired Enabled", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description":
"Whether autowiring is enabled. This is used for automatic autowiring options
(the option must be marked as autowired) by looking up in the registry to find
if there is a single instance of matching t [...]
- "baseUri": { "index": 4, "kind": "property", "displayName": "Base Uri",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": "https:\/\/graph.facebook.com", "description":
"Can be used to set an alternative base URI, e.g. when you want to test the
component against a mock WhatsApp API" },
- "client": { "index": 5, "kind": "property", "displayName": "Client",
"group": "advanced", "label": "advanced", "required": false, "type": "object",
"javaType": "java.net.http.HttpClient", "deprecated": false, "autowired":
false, "secret": false, "description": "Java 11 HttpClient implementation" },
- "webhookVerifyToken": { "index": 6, "kind": "property", "displayName":
"Webhook Verify Token", "group": "advanced", "label": "advanced", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description":
"Webhook verify token" },
- "authorizationToken": { "index": 7, "kind": "property", "displayName":
"Authorization Token", "group": "security", "label": "security", "required":
true, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description":
"Authorization Token taken from WhatsApp Meta for Developers Dashboard" }
+ "phoneNumberId": { "index": 0, "kind": "property", "displayName": "Phone
Number Id", "group": "common", "label": "", "required": true, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "Phone Number ID taken from WhatsApp Meta for
Developers Dashboard" },
+ "bridgeErrorHandler": { "index": 1, "kind": "property", "displayName":
"Bridge Error Handler", "group": "consumer", "label": "consumer", "required":
false, "type": "boolean", "javaType": "boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": false, "description":
"Allows for bridging the consumer to the Camel routing Error Handler, which
mean any exceptions (if possible) occurred while the Camel consumer is trying
to pickup incoming messages, or the like [...]
+ "lazyStartProducer": { "index": 2, "kind": "property", "displayName":
"Lazy Start Producer", "group": "producer", "label": "producer", "required":
false, "type": "boolean", "javaType": "boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": false, "description":
"Whether the producer should be started lazy (on the first message). By
starting lazy you can use this to allow CamelContext and routes to startup in
situations where a producer may otherwise fail [...]
+ "apiVersion": { "index": 3, "kind": "property", "displayName": "Api
Version", "group": "advanced", "label": "advanced", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": "v13.0", "description": "WhatsApp Cloud
API version" },
+ "autowiredEnabled": { "index": 4, "kind": "property", "displayName":
"Autowired Enabled", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description":
"Whether autowiring is enabled. This is used for automatic autowiring options
(the option must be marked as autowired) by looking up in the registry to find
if there is a single instance of matching t [...]
+ "baseUri": { "index": 5, "kind": "property", "displayName": "Base Uri",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": "https:\/\/graph.facebook.com", "description":
"Can be used to set an alternative base URI, e.g. when you want to test the
component against a mock WhatsApp API" },
+ "client": { "index": 6, "kind": "property", "displayName": "Client",
"group": "advanced", "label": "advanced", "required": false, "type": "object",
"javaType": "java.net.http.HttpClient", "deprecated": false, "autowired":
false, "secret": false, "description": "Java 11 HttpClient implementation" },
+ "webhookVerifyToken": { "index": 7, "kind": "property", "displayName":
"Webhook Verify Token", "group": "advanced", "label": "advanced", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description":
"Webhook verify token" },
+ "authorizationToken": { "index": 8, "kind": "property", "displayName":
"Authorization Token", "group": "security", "label": "security", "required":
true, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description":
"Authorization Token taken from WhatsApp Meta for Developers Dashboard" }
},
"headers": {
"CamelWhatsAppPhoneNumberId": { "index": 0, "kind": "header",
"displayName": "", "group": "producer", "label": "producer", "required": false,
"javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Phone Number ID taken from WhatsApp
Meta for Developers Dashboard", "constantName":
"org.apache.camel.component.whatsapp.WhatsAppConstants#WHATSAPP_PHONE_NUMBER_ID"
},
"CamelWhatsAppRecipientPhoneNumberId": { "index": 1, "kind": "header",
"displayName": "", "group": "producer", "label": "producer", "required": false,
"javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Recipient phone number associated with
Phone Number ID", "constantName":
"org.apache.camel.component.whatsapp.WhatsAppConstants#WHATSAPP_RECIPIENT_PHONE_NUMBER_ID"
}
},
"bodyTypes": {
+ "consumerOut": { "carriers": [ "text", "null" ], "description": "In
webhook mode (webhook:whatsapp:...), the event that WhatsApp posts, as JSON
text. The verification request of WhatsApp (a GET) also reaches the route, with
the hub.challenge as the body when hub.mode is subscribe and hub.verify_token
matches webhookVerifyToken, else with no body (403, or 400 when the parameters
are missing). With webhookSecret, an event without a valid X-Hub-Signature-256
is answered with 403 and doe [...]
+ "consumerReply": { "carriers": [ "any" ], "description": "The body at the
end of the route is not sent: the reply is the body the route got, the event or
the hub.challenge" },
"producerIn": { "carriers": [ "pojo", "null" ], "description": "A request
of org.apache.camel.component.whatsapp.model: a TextMessageRequest,
MediaMessageRequest, LocationMessageRequest, ContactMessageRequest,
InteractiveMessageRequest or TemplateMessageRequest to send a message, or an
UploadMediaRequest to upload a media file. Text, bytes, a Map or another POJO
fails: build the request. No body sends nothing" },
"producerOut": { "carriers": [ "pojo", "unchanged" ], "description": "The
org.apache.camel.component.whatsapp.model.MessageResponse of WhatsApp, with the
ids of the messages sent, or the id of the media uploaded. No body is left as
it is" }
},
"properties": {
- "phoneNumberId": { "index": 0, "kind": "path", "displayName": "Phone
Number Id", "group": "producer", "label": "", "required": true, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "The phone number ID
taken from whatsapp-business dashboard." },
- "lazyStartProducer": { "index": 1, "kind": "parameter", "displayName":
"Lazy Start Producer", "group": "producer (advanced)", "label":
"producer,advanced", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether the producer should be started
lazy (on the first message). By starting lazy you can use this to allow
CamelContext and routes to startup in situations where a produc [...]
- "apiVersion": { "index": 2, "kind": "parameter", "displayName": "Api
Version", "group": "advanced", "label": "advanced", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "Facebook graph api
version." },
- "baseUri": { "index": 3, "kind": "parameter", "displayName": "Base Uri",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "Can be used to set an
alternative base URI, e.g. when you want to test the component against a mock
WhatsApp [...]
- "httpClient": { "index": 4, "kind": "parameter", "displayName": "Http
Client", "group": "advanced", "label": "advanced", "required": false, "type":
"object", "javaType": "java.net.http.HttpClient", "deprecated": false,
"autowired": false, "secret": false, "description": "HttpClient implementation"
},
- "webhookPath": { "index": 5, "kind": "parameter", "displayName": "Webhook
Path", "group": "advanced", "label": "advanced", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": "webhook", "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "Webhook path" },
- "whatsappService": { "index": 6, "kind": "parameter", "displayName":
"Whatsapp Service", "group": "advanced", "label": "advanced", "required":
false, "type": "object", "javaType":
"org.apache.camel.component.whatsapp.WhatsAppService", "deprecated": false,
"autowired": false, "secret": false, "description": "WhatsApp service
implementation" },
- "authorizationToken": { "index": 7, "kind": "parameter", "displayName":
"Authorization Token", "group": "security", "label": "security", "required":
true, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": true, "security":
"secret", "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "The authorization access
token taken from w [...]
- "webhookSecret": { "index": 8, "kind": "parameter", "displayName":
"Webhook Secret", "group": "security", "label": "security", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "The app secret used to
verify the X-Hub-Signature-256 signature of inbound [...]
- "webhookVerifyToken": { "index": 9, "kind": "parameter", "displayName":
"Webhook Verify Token", "group": "security", "label": "security", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "Webhook verify token" }
+ "phoneNumberId": { "index": 0, "kind": "path", "displayName": "Phone
Number Id", "group": "common", "label": "", "required": true, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "The phone number ID
taken from whatsapp-business dashboard." },
+ "bridgeErrorHandler": { "index": 1, "kind": "parameter", "displayName":
"Bridge Error Handler", "group": "consumer (advanced)", "label":
"consumer,advanced", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Allows for bridging the consumer to the
Camel routing Error Handler, which mean any exceptions (if possible) occurred
while the Camel consumer is trying to pickup incoming [...]
+ "exceptionHandler": { "index": 2, "kind": "parameter", "displayName":
"Exception Handler", "group": "consumer (advanced)", "label":
"consumer,advanced", "required": false, "type": "object", "javaType":
"org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.",
"deprecated": false, "autowired": false, "secret": false, "description": "To
let the consumer use a custom ExceptionHandler. Notice if the option
bridgeErrorHandler is enabled then this option is not in use. By def [...]
+ "exchangePattern": { "index": 3, "kind": "parameter", "displayName":
"Exchange Pattern", "group": "consumer (advanced)", "label":
"consumer,advanced", "required": false, "type": "enum", "javaType":
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ],
"deprecated": false, "autowired": false, "secret": false, "description": "Sets
the exchange pattern when the consumer creates an exchange." },
+ "lazyStartProducer": { "index": 4, "kind": "parameter", "displayName":
"Lazy Start Producer", "group": "producer (advanced)", "label":
"producer,advanced", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether the producer should be started
lazy (on the first message). By starting lazy you can use this to allow
CamelContext and routes to startup in situations where a produc [...]
+ "apiVersion": { "index": 5, "kind": "parameter", "displayName": "Api
Version", "group": "advanced", "label": "advanced", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "Facebook graph api
version." },
+ "baseUri": { "index": 6, "kind": "parameter", "displayName": "Base Uri",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "Can be used to set an
alternative base URI, e.g. when you want to test the component against a mock
WhatsApp [...]
+ "httpClient": { "index": 7, "kind": "parameter", "displayName": "Http
Client", "group": "advanced", "label": "advanced", "required": false, "type":
"object", "javaType": "java.net.http.HttpClient", "deprecated": false,
"autowired": false, "secret": false, "description": "HttpClient implementation"
},
+ "webhookPath": { "index": 8, "kind": "parameter", "displayName": "Webhook
Path", "group": "advanced", "label": "advanced", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": "webhook", "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "Webhook path" },
+ "whatsappService": { "index": 9, "kind": "parameter", "displayName":
"Whatsapp Service", "group": "advanced", "label": "advanced", "required":
false, "type": "object", "javaType":
"org.apache.camel.component.whatsapp.WhatsAppService", "deprecated": false,
"autowired": false, "secret": false, "description": "WhatsApp service
implementation" },
+ "authorizationToken": { "index": 10, "kind": "parameter", "displayName":
"Authorization Token", "group": "security", "label": "security", "required":
true, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": true, "security":
"secret", "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "The authorization access
token taken from [...]
+ "webhookSecret": { "index": 11, "kind": "parameter", "displayName":
"Webhook Secret", "group": "security", "label": "security", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "The app secret used to
verify the X-Hub-Signature-256 signature of inbound [...]
+ "webhookVerifyToken": { "index": 12, "kind": "parameter", "displayName":
"Webhook Verify Token", "group": "security", "label": "security", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.whatsapp.WhatsAppConfiguration",
"configurationField": "configuration", "description": "Webhook verify token" }
}
}
diff --git a/components/camel-whatsapp/src/main/docs/whatsapp-component.adoc
b/components/camel-whatsapp/src/main/docs/whatsapp-component.adoc
index 0ea8f5c8845a..1da15a25c2c2 100644
--- a/components/camel-whatsapp/src/main/docs/whatsapp-component.adoc
+++ b/components/camel-whatsapp/src/main/docs/whatsapp-component.adoc
@@ -2,11 +2,11 @@
:doctitle: WhatsApp
:shortname: whatsapp
:artifactid: camel-whatsapp
-:description: Send messages to WhatsApp.
+:description: Send messages to WhatsApp, and receive its events in webhook
mode.
:since: 3.19
:supportlevel: Stable
:tabs-sync-option:
-:component-header: Only producer is supported
+:component-header: Both producer and consumer are supported
*Since Camel {since}*
diff --git
a/components/camel-whatsapp/src/main/java/org/apache/camel/component/whatsapp/WhatsAppEndpoint.java
b/components/camel-whatsapp/src/main/java/org/apache/camel/component/whatsapp/WhatsAppEndpoint.java
index 17f3ed125acf..85b84efdcb20 100644
---
a/components/camel-whatsapp/src/main/java/org/apache/camel/component/whatsapp/WhatsAppEndpoint.java
+++
b/components/camel-whatsapp/src/main/java/org/apache/camel/component/whatsapp/WhatsAppEndpoint.java
@@ -33,20 +33,29 @@ import org.apache.camel.spi.BodyType.Carrier;
import org.apache.camel.spi.BodyTypes;
import org.apache.camel.spi.UriEndpoint;
import org.apache.camel.spi.UriParam;
-import org.apache.camel.support.ScheduledPollEndpoint;
+import org.apache.camel.support.DefaultEndpoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * Send messages to WhatsApp.
+ * Send messages to WhatsApp, and receive its events in webhook mode.
*/
@UriEndpoint(firstVersion = "3.19.0", scheme = "whatsapp", title = "WhatsApp",
syntax = "whatsapp:phoneNumberId",
- producerOnly = true,
category = {
Category.CLOUD, Category.API,
Category.CHAT },
headersClass = WhatsAppConstants.class)
-@BodyTypes(producerIn = @BodyType(value = { Carrier.POJO, Carrier.NULL },
+@BodyTypes(consumerOut = @BodyType(value = { Carrier.TEXT, Carrier.NULL },
+ description = "In webhook mode
(webhook:whatsapp:...), the event that WhatsApp posts, as JSON"
+ + " text. The verification
request of WhatsApp (a GET) also reaches the route,"
+ + " with the hub.challenge as
the body when hub.mode is subscribe and"
+ + " hub.verify_token matches
webhookVerifyToken, else with no body (403, or 400"
+ + " when the parameters are
missing). With webhookSecret, an event without a"
+ + " valid X-Hub-Signature-256
is answered with 403 and does not reach the route"),
+ consumerReply = @BodyType(value = Carrier.ANY,
+ description = "The body at the end of the
route is not sent: the reply is the body the route"
+ + " got, the event or the
hub.challenge"),
+ producerIn = @BodyType(value = { Carrier.POJO, Carrier.NULL },
description = "A request of
org.apache.camel.component.whatsapp.model: a TextMessageRequest,"
+ " MediaMessageRequest,
LocationMessageRequest, ContactMessageRequest,"
+ " InteractiveMessageRequest
or TemplateMessageRequest to send a message, or an"
@@ -55,7 +64,7 @@ import org.slf4j.LoggerFactory;
producerOut = @BodyType(value = { Carrier.POJO, Carrier.UNCHANGED },
description = "The
org.apache.camel.component.whatsapp.model.MessageResponse of WhatsApp, with the
ids of the messages sent, or the id"
+ " of the media uploaded. No
body is left as it is"))
-public class WhatsAppEndpoint extends ScheduledPollEndpoint implements
WebhookCapableEndpoint {
+public class WhatsAppEndpoint extends DefaultEndpoint implements
WebhookCapableEndpoint {
private static final Logger LOG =
LoggerFactory.getLogger(WhatsAppEndpoint.class);
@UriParam
@@ -104,7 +113,7 @@ public class WhatsAppEndpoint extends ScheduledPollEndpoint
implements WebhookCa
@Override
public Consumer createConsumer(Processor processor) throws Exception {
- throw new UnsupportedOperationException("consumer not supported");
+ throw new UnsupportedOperationException("Use webhook component to wrap
this endpoint");
}
@Override
diff --git
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
index 03d6b720f8fe..43c92b42a230 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
@@ -3530,3 +3530,11 @@ exception as before.
The `CamelFileLastModified` header is now the last modified time of the file,
as its documentation says.
Before, it was the time of the event. The header is not set when the file no
longer exists, for example for a `DELETE` event.
The time of the event is in the `CamelMessageTimestamp` header.
+
+=== camel-whatsapp - the component is no longer marked producer only
+
+The whatsapp component receives events in webhook mode
(`webhook:whatsapp:...`), so its metadata no longer marks it as
+producer only, and the catalog now describes the body that the webhook route
gets. Tools that read the catalog, such as
+the YAML DSL validator and the Endpoint DSL, now accept a whatsapp endpoint as
a consumer, and the Endpoint DSL builder
+of whatsapp gets the consumer options `bridgeErrorHandler`, `exceptionHandler`
and `exchangePattern`. A whatsapp
+endpoint used directly in `from` still fails at startup: wrap it with the
webhook component, as before.
diff --git
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
index fc1463da7851..87ac634b964a 100644
---
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
+++
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
@@ -5381,7 +5381,7 @@ public interface ComponentsBuilderFactory {
}
/**
* WhatsApp (camel-whatsapp)
- * Send messages to WhatsApp.
+ * Send messages to WhatsApp, and receive its events in webhook mode.
*
* Category: cloud,api,chat
* Since: 3.19
diff --git
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/WhatsappComponentBuilderFactory.java
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/WhatsappComponentBuilderFactory.java
index 5061d458da9a..5f3f0fbeca94 100644
---
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/WhatsappComponentBuilderFactory.java
+++
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/WhatsappComponentBuilderFactory.java
@@ -24,7 +24,7 @@ import org.apache.camel.builder.component.ComponentBuilder;
import org.apache.camel.component.whatsapp.WhatsAppComponent;
/**
- * Send messages to WhatsApp.
+ * Send messages to WhatsApp, and receive its events in webhook mode.
*
* Generated by camel build tools - do NOT edit this file!
*/
@@ -33,7 +33,7 @@ public interface WhatsappComponentBuilderFactory {
/**
* WhatsApp (camel-whatsapp)
- * Send messages to WhatsApp.
+ * Send messages to WhatsApp, and receive its events in webhook mode.
*
* Category: cloud,api,chat
* Since: 3.19
@@ -50,6 +50,49 @@ public interface WhatsappComponentBuilderFactory {
*/
interface WhatsappComponentBuilder extends
ComponentBuilder<WhatsAppComponent> {
+ /**
+ * Phone Number ID taken from WhatsApp Meta for Developers Dashboard.
+ *
+ * The option is a: <code>java.lang.String</code> type.
+ *
+ * Group: common
+ *
+ * @param phoneNumberId the value to set
+ * @return the dsl builder
+ */
+ default WhatsappComponentBuilder phoneNumberId(java.lang.String
phoneNumberId) {
+ doSetProperty("phoneNumberId", phoneNumberId);
+ return this;
+ }
+
+
+ /**
+ * Allows for bridging the consumer to the Camel routing Error Handler,
+ * which mean any exceptions (if possible) occurred while the Camel
+ * consumer is trying to pickup incoming messages, or the likes, will
+ * now be processed as a message and handled by the routing Error
+ * Handler. Important: This is only possible if the 3rd party component
+ * allows Camel to be alerted if an exception was thrown. Some
+ * components handle this internally only, and therefore
+ * bridgeErrorHandler is not possible. In other situations we may
+ * improve the Camel component to hook into the 3rd party component and
+ * make this possible for future releases. By default the consumer will
+ * use the org.apache.camel.spi.ExceptionHandler to deal with
+ * exceptions, that will be logged at WARN or ERROR level and ignored.
+ *
+ * The option is a: <code>boolean</code> type.
+ *
+ * Default: false
+ * Group: consumer
+ *
+ * @param bridgeErrorHandler the value to set
+ * @return the dsl builder
+ */
+ default WhatsappComponentBuilder bridgeErrorHandler(boolean
bridgeErrorHandler) {
+ doSetProperty("bridgeErrorHandler", bridgeErrorHandler);
+ return this;
+ }
+
/**
* Whether the producer should be started lazy (on the first message).
@@ -75,21 +118,6 @@ public interface WhatsappComponentBuilderFactory {
return this;
}
- /**
- * Phone Number ID taken from WhatsApp Meta for Developers Dashboard.
- *
- * The option is a: <code>java.lang.String</code> type.
- *
- * Group: producer
- *
- * @param phoneNumberId the value to set
- * @return the dsl builder
- */
- default WhatsappComponentBuilder phoneNumberId(java.lang.String
phoneNumberId) {
- doSetProperty("phoneNumberId", phoneNumberId);
- return this;
- }
-
/**
* WhatsApp Cloud API version.
@@ -208,8 +236,9 @@ public interface WhatsappComponentBuilderFactory {
String name,
Object value) {
switch (name) {
- case "lazyStartProducer": ((WhatsAppComponent)
component).setLazyStartProducer((boolean) value); return true;
case "phoneNumberId": ((WhatsAppComponent)
component).setPhoneNumberId((java.lang.String) value); return true;
+ case "bridgeErrorHandler": ((WhatsAppComponent)
component).setBridgeErrorHandler((boolean) value); return true;
+ case "lazyStartProducer": ((WhatsAppComponent)
component).setLazyStartProducer((boolean) value); return true;
case "apiVersion": ((WhatsAppComponent)
component).setApiVersion((java.lang.String) value); return true;
case "autowiredEnabled": ((WhatsAppComponent)
component).setAutowiredEnabled((boolean) value); return true;
case "baseUri": ((WhatsAppComponent)
component).setBaseUri((java.lang.String) value); return true;
diff --git
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointHeaderBuilders.java
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointHeaderBuilders.java
index 31f9bdb1dbed..17701d19c82b 100644
---
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointHeaderBuilders.java
+++
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointHeaderBuilders.java
@@ -4164,7 +4164,7 @@ public class EndpointHeaderBuilders {
}
/**
* WhatsApp (camel-whatsapp)
- * Send messages to WhatsApp.
+ * Send messages to WhatsApp, and receive its events in webhook mode.
*
* Category: cloud,api,chat
* Since: 3.19
diff --git
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
index 386324e2c118..86cec6a45108 100644
---
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
+++
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
@@ -18039,7 +18039,7 @@ public class StaticEndpointBuilders {
}
/**
* WhatsApp (camel-whatsapp)
- * Send messages to WhatsApp.
+ * Send messages to WhatsApp, and receive its events in webhook mode.
*
* Category: cloud,api,chat
* Since: 3.19
@@ -18058,7 +18058,7 @@ public class StaticEndpointBuilders {
}
/**
* WhatsApp (camel-whatsapp)
- * Send messages to WhatsApp.
+ * Send messages to WhatsApp, and receive its events in webhook mode.
*
* Category: cloud,api,chat
* Since: 3.19
diff --git
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/WhatsAppEndpointBuilderFactory.java
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/WhatsAppEndpointBuilderFactory.java
index 5964e997483f..4f211a19d822 100644
---
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/WhatsAppEndpointBuilderFactory.java
+++
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/WhatsAppEndpointBuilderFactory.java
@@ -27,7 +27,7 @@ import org.apache.camel.builder.EndpointProducerBuilder;
import org.apache.camel.builder.endpoint.AbstractEndpointBuilder;
/**
- * Send messages to WhatsApp.
+ * Send messages to WhatsApp, and receive its events in webhook mode.
*
* Generated by camel build tools - do NOT edit this file!
*/
@@ -35,15 +35,14 @@ import
org.apache.camel.builder.endpoint.AbstractEndpointBuilder;
public interface WhatsAppEndpointBuilderFactory {
/**
- * Builder for endpoint for the WhatsApp component.
+ * Builder for endpoint consumers for the WhatsApp component.
*/
- public interface WhatsAppEndpointBuilder
+ public interface WhatsAppEndpointConsumerBuilder
extends
- EndpointProducerBuilder {
- default AdvancedWhatsAppEndpointBuilder advanced() {
- return (AdvancedWhatsAppEndpointBuilder) this;
+ EndpointConsumerBuilder {
+ default AdvancedWhatsAppEndpointConsumerBuilder advanced() {
+ return (AdvancedWhatsAppEndpointConsumerBuilder) this;
}
-
/**
* The authorization access token taken from whatsapp-business
* dashboard.
@@ -56,7 +55,7 @@ public interface WhatsAppEndpointBuilderFactory {
* @param authorizationToken the value to set
* @return the dsl builder
*/
- default WhatsAppEndpointBuilder authorizationToken(String
authorizationToken) {
+ default WhatsAppEndpointConsumerBuilder authorizationToken(String
authorizationToken) {
doSetProperty("authorizationToken", authorizationToken);
return this;
}
@@ -74,7 +73,7 @@ public interface WhatsAppEndpointBuilderFactory {
* @param webhookSecret the value to set
* @return the dsl builder
*/
- default WhatsAppEndpointBuilder webhookSecret(String webhookSecret) {
+ default WhatsAppEndpointConsumerBuilder webhookSecret(String
webhookSecret) {
doSetProperty("webhookSecret", webhookSecret);
return this;
}
@@ -88,20 +87,311 @@ public interface WhatsAppEndpointBuilderFactory {
* @param webhookVerifyToken the value to set
* @return the dsl builder
*/
- default WhatsAppEndpointBuilder webhookVerifyToken(String
webhookVerifyToken) {
+ default WhatsAppEndpointConsumerBuilder webhookVerifyToken(String
webhookVerifyToken) {
doSetProperty("webhookVerifyToken", webhookVerifyToken);
return this;
}
}
/**
- * Advanced builder for endpoint for the WhatsApp component.
+ * Advanced builder for endpoint consumers for the WhatsApp component.
*/
- public interface AdvancedWhatsAppEndpointBuilder
+ public interface AdvancedWhatsAppEndpointConsumerBuilder
+ extends
+ EndpointConsumerBuilder {
+ default WhatsAppEndpointConsumerBuilder basic() {
+ return (WhatsAppEndpointConsumerBuilder) this;
+ }
+ /**
+ * Allows for bridging the consumer to the Camel routing Error Handler,
+ * which mean any exceptions (if possible) occurred while the Camel
+ * consumer is trying to pickup incoming messages, or the likes, will
+ * now be processed as a message and handled by the routing Error
+ * Handler. Important: This is only possible if the 3rd party component
+ * allows Camel to be alerted if an exception was thrown. Some
+ * components handle this internally only, and therefore
+ * bridgeErrorHandler is not possible. In other situations we may
+ * improve the Camel component to hook into the 3rd party component and
+ * make this possible for future releases. By default the consumer will
+ * use the org.apache.camel.spi.ExceptionHandler to deal with
+ * exceptions, that will be logged at WARN or ERROR level and ignored.
+ *
+ * The option is a: <code>boolean</code> type.
+ *
+ * Default: false
+ * Group: consumer (advanced)
+ *
+ * @param bridgeErrorHandler the value to set
+ * @return the dsl builder
+ */
+ default AdvancedWhatsAppEndpointConsumerBuilder
bridgeErrorHandler(boolean bridgeErrorHandler) {
+ doSetProperty("bridgeErrorHandler", bridgeErrorHandler);
+ return this;
+ }
+ /**
+ * Allows for bridging the consumer to the Camel routing Error Handler,
+ * which mean any exceptions (if possible) occurred while the Camel
+ * consumer is trying to pickup incoming messages, or the likes, will
+ * now be processed as a message and handled by the routing Error
+ * Handler. Important: This is only possible if the 3rd party component
+ * allows Camel to be alerted if an exception was thrown. Some
+ * components handle this internally only, and therefore
+ * bridgeErrorHandler is not possible. In other situations we may
+ * improve the Camel component to hook into the 3rd party component and
+ * make this possible for future releases. By default the consumer will
+ * use the org.apache.camel.spi.ExceptionHandler to deal with
+ * exceptions, that will be logged at WARN or ERROR level and ignored.
+ *
+ * The option will be converted to a <code>boolean</code> type.
+ *
+ * Default: false
+ * Group: consumer (advanced)
+ *
+ * @param bridgeErrorHandler the value to set
+ * @return the dsl builder
+ */
+ default AdvancedWhatsAppEndpointConsumerBuilder
bridgeErrorHandler(String bridgeErrorHandler) {
+ doSetProperty("bridgeErrorHandler", bridgeErrorHandler);
+ return this;
+ }
+ /**
+ * To let the consumer use a custom ExceptionHandler. Notice if the
+ * option bridgeErrorHandler is enabled then this option is not in use.
+ * By default the consumer will deal with exceptions, that will be
+ * logged at WARN or ERROR level and ignored.
+ *
+ * The option is a: <code>org.apache.camel.spi.ExceptionHandler</code>
+ * type.
+ *
+ * Group: consumer (advanced)
+ *
+ * @param exceptionHandler the value to set
+ * @return the dsl builder
+ */
+ default AdvancedWhatsAppEndpointConsumerBuilder
exceptionHandler(org.apache.camel.spi.ExceptionHandler exceptionHandler) {
+ doSetProperty("exceptionHandler", exceptionHandler);
+ return this;
+ }
+ /**
+ * To let the consumer use a custom ExceptionHandler. Notice if the
+ * option bridgeErrorHandler is enabled then this option is not in use.
+ * By default the consumer will deal with exceptions, that will be
+ * logged at WARN or ERROR level and ignored.
+ *
+ * The option will be converted to a
+ * <code>org.apache.camel.spi.ExceptionHandler</code> type.
+ *
+ * Group: consumer (advanced)
+ *
+ * @param exceptionHandler the value to set
+ * @return the dsl builder
+ */
+ default AdvancedWhatsAppEndpointConsumerBuilder
exceptionHandler(String exceptionHandler) {
+ doSetProperty("exceptionHandler", exceptionHandler);
+ return this;
+ }
+ /**
+ * Sets the exchange pattern when the consumer creates an exchange.
+ *
+ * The option is a: <code>org.apache.camel.ExchangePattern</code> type.
+ *
+ * Group: consumer (advanced)
+ *
+ * @param exchangePattern the value to set
+ * @return the dsl builder
+ */
+ default AdvancedWhatsAppEndpointConsumerBuilder
exchangePattern(org.apache.camel.ExchangePattern exchangePattern) {
+ doSetProperty("exchangePattern", exchangePattern);
+ return this;
+ }
+ /**
+ * Sets the exchange pattern when the consumer creates an exchange.
+ *
+ * The option will be converted to a
+ * <code>org.apache.camel.ExchangePattern</code> type.
+ *
+ * Group: consumer (advanced)
+ *
+ * @param exchangePattern the value to set
+ * @return the dsl builder
+ */
+ default AdvancedWhatsAppEndpointConsumerBuilder exchangePattern(String
exchangePattern) {
+ doSetProperty("exchangePattern", exchangePattern);
+ return this;
+ }
+ /**
+ * Facebook graph api version.
+ *
+ * The option is a: <code>java.lang.String</code> type.
+ *
+ * Group: advanced
+ *
+ * @param apiVersion the value to set
+ * @return the dsl builder
+ */
+ default AdvancedWhatsAppEndpointConsumerBuilder apiVersion(String
apiVersion) {
+ doSetProperty("apiVersion", apiVersion);
+ return this;
+ }
+ /**
+ * Can be used to set an alternative base URI, e.g. when you want to
+ * test the component against a mock WhatsApp API.
+ *
+ * The option is a: <code>java.lang.String</code> type.
+ *
+ * Group: advanced
+ *
+ * @param baseUri the value to set
+ * @return the dsl builder
+ */
+ default AdvancedWhatsAppEndpointConsumerBuilder baseUri(String
baseUri) {
+ doSetProperty("baseUri", baseUri);
+ return this;
+ }
+ /**
+ * HttpClient implementation.
+ *
+ * The option is a: <code>java.net.http.HttpClient</code> type.
+ *
+ * Group: advanced
+ *
+ * @param httpClient the value to set
+ * @return the dsl builder
+ */
+ default AdvancedWhatsAppEndpointConsumerBuilder
httpClient(java.net.http.HttpClient httpClient) {
+ doSetProperty("httpClient", httpClient);
+ return this;
+ }
+ /**
+ * HttpClient implementation.
+ *
+ * The option will be converted to a
+ * <code>java.net.http.HttpClient</code> type.
+ *
+ * Group: advanced
+ *
+ * @param httpClient the value to set
+ * @return the dsl builder
+ */
+ default AdvancedWhatsAppEndpointConsumerBuilder httpClient(String
httpClient) {
+ doSetProperty("httpClient", httpClient);
+ return this;
+ }
+ /**
+ * Webhook path.
+ *
+ * The option is a: <code>java.lang.String</code> type.
+ *
+ * Default: webhook
+ * Group: advanced
+ *
+ * @param webhookPath the value to set
+ * @return the dsl builder
+ */
+ default AdvancedWhatsAppEndpointConsumerBuilder webhookPath(String
webhookPath) {
+ doSetProperty("webhookPath", webhookPath);
+ return this;
+ }
+ /**
+ * WhatsApp service implementation.
+ *
+ * The option is a:
+ * <code>org.apache.camel.component.whatsapp.WhatsAppService</code>
+ * type.
+ *
+ * Group: advanced
+ *
+ * @param whatsappService the value to set
+ * @return the dsl builder
+ */
+ default AdvancedWhatsAppEndpointConsumerBuilder
whatsappService(org.apache.camel.component.whatsapp.WhatsAppService
whatsappService) {
+ doSetProperty("whatsappService", whatsappService);
+ return this;
+ }
+ /**
+ * WhatsApp service implementation.
+ *
+ * The option will be converted to a
+ * <code>org.apache.camel.component.whatsapp.WhatsAppService</code>
+ * type.
+ *
+ * Group: advanced
+ *
+ * @param whatsappService the value to set
+ * @return the dsl builder
+ */
+ default AdvancedWhatsAppEndpointConsumerBuilder whatsappService(String
whatsappService) {
+ doSetProperty("whatsappService", whatsappService);
+ return this;
+ }
+ }
+
+ /**
+ * Builder for endpoint producers for the WhatsApp component.
+ */
+ public interface WhatsAppEndpointProducerBuilder
extends
EndpointProducerBuilder {
- default WhatsAppEndpointBuilder basic() {
- return (WhatsAppEndpointBuilder) this;
+ default AdvancedWhatsAppEndpointProducerBuilder advanced() {
+ return (AdvancedWhatsAppEndpointProducerBuilder) this;
+ }
+
+ /**
+ * The authorization access token taken from whatsapp-business
+ * dashboard.
+ *
+ * The option is a: <code>java.lang.String</code> type.
+ *
+ * Required: true
+ * Group: security
+ *
+ * @param authorizationToken the value to set
+ * @return the dsl builder
+ */
+ default WhatsAppEndpointProducerBuilder authorizationToken(String
authorizationToken) {
+ doSetProperty("authorizationToken", authorizationToken);
+ return this;
+ }
+ /**
+ * The app secret used to verify the X-Hub-Signature-256 signature of
+ * inbound webhook event payloads (from the Meta/WhatsApp app
+ * dashboard). When set, event callbacks with a missing or invalid
+ * signature are rejected with HTTP 403; when not set, no signature
+ * verification is performed.
+ *
+ * The option is a: <code>java.lang.String</code> type.
+ *
+ * Group: security
+ *
+ * @param webhookSecret the value to set
+ * @return the dsl builder
+ */
+ default WhatsAppEndpointProducerBuilder webhookSecret(String
webhookSecret) {
+ doSetProperty("webhookSecret", webhookSecret);
+ return this;
+ }
+ /**
+ * Webhook verify token.
+ *
+ * The option is a: <code>java.lang.String</code> type.
+ *
+ * Group: security
+ *
+ * @param webhookVerifyToken the value to set
+ * @return the dsl builder
+ */
+ default WhatsAppEndpointProducerBuilder webhookVerifyToken(String
webhookVerifyToken) {
+ doSetProperty("webhookVerifyToken", webhookVerifyToken);
+ return this;
+ }
+ }
+
+ /**
+ * Advanced builder for endpoint producers for the WhatsApp component.
+ */
+ public interface AdvancedWhatsAppEndpointProducerBuilder extends
EndpointProducerBuilder {
+ default WhatsAppEndpointProducerBuilder basic() {
+ return (WhatsAppEndpointProducerBuilder) this;
}
/**
@@ -123,7 +413,7 @@ public interface WhatsAppEndpointBuilderFactory {
* @param lazyStartProducer the value to set
* @return the dsl builder
*/
- default AdvancedWhatsAppEndpointBuilder lazyStartProducer(boolean
lazyStartProducer) {
+ default AdvancedWhatsAppEndpointProducerBuilder
lazyStartProducer(boolean lazyStartProducer) {
doSetProperty("lazyStartProducer", lazyStartProducer);
return this;
}
@@ -146,10 +436,189 @@ public interface WhatsAppEndpointBuilderFactory {
* @param lazyStartProducer the value to set
* @return the dsl builder
*/
- default AdvancedWhatsAppEndpointBuilder lazyStartProducer(String
lazyStartProducer) {
+ default AdvancedWhatsAppEndpointProducerBuilder
lazyStartProducer(String lazyStartProducer) {
doSetProperty("lazyStartProducer", lazyStartProducer);
return this;
}
+ /**
+ * Facebook graph api version.
+ *
+ * The option is a: <code>java.lang.String</code> type.
+ *
+ * Group: advanced
+ *
+ * @param apiVersion the value to set
+ * @return the dsl builder
+ */
+ default AdvancedWhatsAppEndpointProducerBuilder apiVersion(String
apiVersion) {
+ doSetProperty("apiVersion", apiVersion);
+ return this;
+ }
+ /**
+ * Can be used to set an alternative base URI, e.g. when you want to
+ * test the component against a mock WhatsApp API.
+ *
+ * The option is a: <code>java.lang.String</code> type.
+ *
+ * Group: advanced
+ *
+ * @param baseUri the value to set
+ * @return the dsl builder
+ */
+ default AdvancedWhatsAppEndpointProducerBuilder baseUri(String
baseUri) {
+ doSetProperty("baseUri", baseUri);
+ return this;
+ }
+ /**
+ * HttpClient implementation.
+ *
+ * The option is a: <code>java.net.http.HttpClient</code> type.
+ *
+ * Group: advanced
+ *
+ * @param httpClient the value to set
+ * @return the dsl builder
+ */
+ default AdvancedWhatsAppEndpointProducerBuilder
httpClient(java.net.http.HttpClient httpClient) {
+ doSetProperty("httpClient", httpClient);
+ return this;
+ }
+ /**
+ * HttpClient implementation.
+ *
+ * The option will be converted to a
+ * <code>java.net.http.HttpClient</code> type.
+ *
+ * Group: advanced
+ *
+ * @param httpClient the value to set
+ * @return the dsl builder
+ */
+ default AdvancedWhatsAppEndpointProducerBuilder httpClient(String
httpClient) {
+ doSetProperty("httpClient", httpClient);
+ return this;
+ }
+ /**
+ * Webhook path.
+ *
+ * The option is a: <code>java.lang.String</code> type.
+ *
+ * Default: webhook
+ * Group: advanced
+ *
+ * @param webhookPath the value to set
+ * @return the dsl builder
+ */
+ default AdvancedWhatsAppEndpointProducerBuilder webhookPath(String
webhookPath) {
+ doSetProperty("webhookPath", webhookPath);
+ return this;
+ }
+ /**
+ * WhatsApp service implementation.
+ *
+ * The option is a:
+ * <code>org.apache.camel.component.whatsapp.WhatsAppService</code>
+ * type.
+ *
+ * Group: advanced
+ *
+ * @param whatsappService the value to set
+ * @return the dsl builder
+ */
+ default AdvancedWhatsAppEndpointProducerBuilder
whatsappService(org.apache.camel.component.whatsapp.WhatsAppService
whatsappService) {
+ doSetProperty("whatsappService", whatsappService);
+ return this;
+ }
+ /**
+ * WhatsApp service implementation.
+ *
+ * The option will be converted to a
+ * <code>org.apache.camel.component.whatsapp.WhatsAppService</code>
+ * type.
+ *
+ * Group: advanced
+ *
+ * @param whatsappService the value to set
+ * @return the dsl builder
+ */
+ default AdvancedWhatsAppEndpointProducerBuilder whatsappService(String
whatsappService) {
+ doSetProperty("whatsappService", whatsappService);
+ return this;
+ }
+ }
+
+ /**
+ * Builder for endpoint for the WhatsApp component.
+ */
+ public interface WhatsAppEndpointBuilder
+ extends
+ WhatsAppEndpointConsumerBuilder,
+ WhatsAppEndpointProducerBuilder {
+ default AdvancedWhatsAppEndpointBuilder advanced() {
+ return (AdvancedWhatsAppEndpointBuilder) this;
+ }
+
+ /**
+ * The authorization access token taken from whatsapp-business
+ * dashboard.
+ *
+ * The option is a: <code>java.lang.String</code> type.
+ *
+ * Required: true
+ * Group: security
+ *
+ * @param authorizationToken the value to set
+ * @return the dsl builder
+ */
+ default WhatsAppEndpointBuilder authorizationToken(String
authorizationToken) {
+ doSetProperty("authorizationToken", authorizationToken);
+ return this;
+ }
+ /**
+ * The app secret used to verify the X-Hub-Signature-256 signature of
+ * inbound webhook event payloads (from the Meta/WhatsApp app
+ * dashboard). When set, event callbacks with a missing or invalid
+ * signature are rejected with HTTP 403; when not set, no signature
+ * verification is performed.
+ *
+ * The option is a: <code>java.lang.String</code> type.
+ *
+ * Group: security
+ *
+ * @param webhookSecret the value to set
+ * @return the dsl builder
+ */
+ default WhatsAppEndpointBuilder webhookSecret(String webhookSecret) {
+ doSetProperty("webhookSecret", webhookSecret);
+ return this;
+ }
+ /**
+ * Webhook verify token.
+ *
+ * The option is a: <code>java.lang.String</code> type.
+ *
+ * Group: security
+ *
+ * @param webhookVerifyToken the value to set
+ * @return the dsl builder
+ */
+ default WhatsAppEndpointBuilder webhookVerifyToken(String
webhookVerifyToken) {
+ doSetProperty("webhookVerifyToken", webhookVerifyToken);
+ return this;
+ }
+ }
+
+ /**
+ * Advanced builder for endpoint for the WhatsApp component.
+ */
+ public interface AdvancedWhatsAppEndpointBuilder
+ extends
+ AdvancedWhatsAppEndpointConsumerBuilder,
+ AdvancedWhatsAppEndpointProducerBuilder {
+ default WhatsAppEndpointBuilder basic() {
+ return (WhatsAppEndpointBuilder) this;
+ }
+
/**
* Facebook graph api version.
*
@@ -260,7 +729,7 @@ public interface WhatsAppEndpointBuilderFactory {
public interface WhatsAppBuilders {
/**
* WhatsApp (camel-whatsapp)
- * Send messages to WhatsApp.
+ * Send messages to WhatsApp, and receive its events in webhook mode.
*
* Category: cloud,api,chat
* Since: 3.19
@@ -273,7 +742,7 @@ public interface WhatsAppEndpointBuilderFactory {
}
/**
* WhatsApp (camel-whatsapp)
- * Send messages to WhatsApp.
+ * Send messages to WhatsApp, and receive its events in webhook mode.
*
* Category: cloud,api,chat
* Since: 3.19
@@ -292,7 +761,7 @@ public interface WhatsAppEndpointBuilderFactory {
}
/**
* WhatsApp (camel-whatsapp)
- * Send messages to WhatsApp.
+ * Send messages to WhatsApp, and receive its events in webhook mode.
*
* Category: cloud,api,chat
* Since: 3.19