How to process incoming notifications#
Import#
Maven
<dependency>
<groupId>com.green-api</groupId>
<artifactId>whatsapp-api-client-java</artifactId>
<version>version</version>
</dependency>
Gradle
implementation group: 'com.green-api', name: 'whatsapp-api-client-java', version: 'version'
Examples#
How to initialize an object#
You can configure your bean, use application.yml, or instantiate an object via the constructor.
Via configuration:
@Configuration
public class GreenApiConf {
@Bean
public RestTemplate restTemplate() {
return new RestTemplateBuilder().build();
}
@Bean
public GreenApi greenApi(RestTemplate restTemplate) {
return new GreenApi(
restTemplate,
"https://media.greenapi.com",
"https://api.greenapi.com",
"{{YOUR-ID}}",
"{{YOUR-TOKEN}}");
}
}
Via application.yml:
To use a ready-made bean that is created based on application.yml parameters, specify the parameters of your instance in the application.yml file as follows:
green-api:
host: https://api.green-api.com
hostMedia: https://media.green-api.com
instanceId: {{yourInstance}}
token: {{yourToken}}
Make sure you have a RestTemplate bean with your configuration, like this:
@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder){
return restTemplateBuilder.build();
}
And add "com.greenapi.client" to the base scanning packages using the @ComponentScan
annotation:
@SpringBootApplication
@ComponentScan(basePackages = {"com.greenapi.client", "com.example"})
public class Application {
public static void main(String[] args) {
var context = SpringApplication.run(Application.class, args);
}
}
Via constructor:
var restTemplate = new RestTemplateBuilder().build();
var greenApi1 = new GreenApi(
restTemplate,
"https://media.green-api.com",
"https://api.green-api.com",
{{instanceId1}},
{{instanceToken1}});
var greenApi2 = new GreenApi(
restTemplate,
"https://media.greenapi.com",
"https://api.greenapi.com",
{{instanceId2}},
{{instanceToken2}});
How to receive incoming notifications#
To start receiving notifications, you need to pass a handler function to webhookConsumer.start()
. Handler function must implement the WebhookHandler
interface. When a new notification is received, your handler function will be completed. To stop receiving notifications, you need to call the webhookConsumer.stop()
function.
WebhookConsumer
is a class responsible for processing messages; for its correct functioning you need GreenApi
and NotificationMapper
objects. You can pass them to it through beans or through a constructor.
NotificationMapper
is a bean responsible for converting a JSON object into a java object. For this he uses ObjectMapper
from the com.fasterxml.jackson
library which should be available as a bean in the configuration or set via the constructor.
WebhookHandler
is an interface. You can write any class to handle notifications, just implement the interface and do your logic in the handle()
method or use a lambda expression.
public interface WebhookHandler {
void handle(Notification notification);
}
Link to example: WebhookExample.java.
@SpringBootApplication
public class WebhookExample {
public static void main(String[] args) {
var context = SpringApplication.run(WebhookExample.class, args);
var webhookConsumer = (WebhookConsumer) context.getBean("webhookConsumer");
webhookConsumer.start(notification -> System.out.println("New webhook received: " + notification));
}
}
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.class | TextMessage |
TemplateMessageWebhook.class | TemplateMessage |
StickerMessageWebhook.class | StickerMessage |
ReactionMessageWebhook.class | ReactionMessage |
QuotedMessageWebhook.class | QuotedMessage |
PollUpdateMessageWebhook.class | PollUpdateMessage |
PollMessageWebhook.class | PollMessage |
LocationMessageWebhook.class | LocationMessage |
ListMessageWebhook.class | ListMessage |
GroupInviteMessageWebhook.class | GroupInviteMessage |
FileMessageWebhook.class | imageMessage, videoMessage, documentMessage, audioMessage |
ExtendedTextMessageWebhook.class | ExtendedTextMessage |
ButtonsMessageWebhook.class | ButtonsMessage |
ContactMessageWebhook.class | ContactMessage |
ContactsArrayMessageWebhook.class | ContactMessage |
TemplateButtonsReplyMessageWebhook.class | TemplateButtonsReplyMessage |
ButtonsResponseMessageWebhook.class | ButtonsResponseMessage |
ListResponseMessageWebhook.class | ListResponseMessage |
Example's list#
Description | Link to example |
---|---|
How to send message | SendMessageExample.java |
How to create a group and send message | CreateGroupSendMessageExample.java |
How to send a file by uploading from the disk | SendFileByUploadExample.java |
How to send a file by URL | SendFileByUrlExample.java |
How to send a file by UploadFile + SendFileByUrl | UploadFileAndSendByUrlExample.java |
How to send poll | SendPollExample.java |
How to receive incoming notifications | WebhookExample.java |