Skip to content

How to run the web server#

Import#

Maven

<dependency>
  <groupId>com.green-api</groupId>
  <artifactId>whatsapp-api-webhook-server-java</artifactId>
  <version>{{version}}</version>
</dependency>

Gradle

implementation group: 'com.green-api', name: 'whatsapp-api-webhook-server-java', version: '0.0.1'

Examples#

How to initialize an object#

Set server options in application.yml. The WebhookToken attribute is optional and does not need to be assigned a value, but it must be in application.yml. If you don't want to set a password, you can simply leave the webhookToken parameter without a value.

green-api:
  webhookToken: 1a2b3c4d5e
server:
  port: 8080

How to run the web server#

Applications will start listening the port immediately after running the main method; for this, do not forget to add the @ComponentScan(basePackages = "com.greenapi.server") annotation.

Link to example: WhatsappApiServerExample.java.

@SpringBootApplication
@ComponentScan(basePackages = "com.greenapi.server")
public class WhatsappApiServerExample {
     public static void main(String[] args) {
         SpringApplication.run(WhatsappApiServerExample.class, args);
     }
}

The handler function class must implement the WebhookHandler interface and be a bean named whatsappWebhookHandler. To do this, set the @Component(value = "whatsappWebhookHandler") annotation on the handler function class.

Link to example: WebhookHandlerExample.java.

@Component(value = "whatsappWebhookHandler")
public class WebhookHandlerExample implements WebhookHandler {

     @SneakyThrows
     @Override
     public void handle(Notification notification) {
         System.out.println("START " + notification);
         Thread.sleep(20000);
         System.out.println("END " + notification);
     }
}

Webhook URL: {{your host}}/whatsapp/async/webhook If you want your handle() handler function to be executed asynchronously.

Webhook URL: {{your host}}/whatsapp/webhook If you want your handle() handler function to be called for each webhook sequentially in one thread.

Since each notification is automatically cast to a java object, you can filter the notification by any field yourself. A description of the structure of notification objects can be found at this link: Documentation For convenience, all types of hooks and messages are named similarly to the documentation:

Java object Webhook's json object
TextMessageWebhook TextMessage
TemplateMessageWebhook TemplateMessage
StickerMessageWebhook StickerMessage
ReactionMessageWebhook ReactionMessage
QuotedMessageWebhook QuotedMessage
PollUpdateMessageWebhook PollUpdateMessage
PollMessageWebhook PollMessage
LocationMessageWebhook LocationMessage
ListMessageWebhook ListMessage
GroupInviteMessageWebhook GroupInviteMessage
FileMessageWebhook imageMessage, videoMessage, documentMessage, audioMessage
ExtendedTextMessageWebhook ExtendedTextMessage
ButtonsMessageWebhook ButtonsMessage
ContactMessageWebhook ContactMessage
ContactsArrayMessageWebhook ContactMessage
TemplateButtonsReplyMessageWebhook TemplateButtonsReplyMessage
ButtonsResponseMessageWebhook ButtonsResponseMessage
ListResponseMessageWebhook ListResponseMessage

Running the application#

For JAR file:

java -jar your_app.jar

If using Maven, run from the project directory:

./mvnw spring-boot:run