Получение входящих уведомлений на Java#
Импорт#
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'
Примеры#
Как инициализировать объект#
Вы можете сконфигурировать свой bean, воспользоваться application.property или создать инстанс объекта через конструктор.
Через конфигурацию:
@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",
"{{номер вашего инстанса}}",
"{{токен вашего инстанса}}");
}
}
Через application.yml:
Или используйте готовый бин, который создается на основе параметров application.yml. Для этого укажите параметры вашего инстанса в файле application.yml следующим образом:
green-api:
host: https://api.green-api.com
hostMedia: https://media.green-api.com
instanceId: {{номер вашего инстанса}}
token: {{токен вашего инстанса}}
Убедитесь, что у вас есть RestTemplate
bean с вашей конфигурацией, например:
@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder){
return restTemplateBuilder.build();
}
И добавьте com.greenapi.client
в базовые пакеты для сканирования с помощью аннотации @ComponentScan
:
@SpringBootApplication
@ComponentScan(basePackages = "com.greenapi.client")
public class Application {
public static void main(String[] args) {
var context = SpringApplication.run(Application.class, args);
}
}
Через конструктор:
var restTemplate = new RestTemplateBuilder().build();
var greenApi1 = new GreenApi(
restTemplate,
"https://media.green-api.com",
"https://api.green-api.com",
"{{номер вашего инстанса1}}",
"{{токен вашего инстанса1}}");
var greenApi2 = new GreenApi(
restTemplate,
"https://media.greenapi.com",
"https://api.greenapi.com",
"{{номер вашего инстанса2}}",
"{{токен вашего инстанса2}}");
Как получать входящие уведомления#
Чтобы начать получать уведомления, нужно передать функцию-обработчик в webhookConsumer.start()
. Функция-обработчик должна реализовывать интерфейс WebhookHandler
. При получении нового уведомления ваша функция-обработчик будет выполнена. Чтобы перестать получать уведомления, нужно вызвать функцию webhookConsumer.stop()
.
WebhookConsumer
- это класс ответственный за обработку сообщений, для его корректного функционирования нужны GreenApi
и NotificationMapper
. Вы можете передать их в него через бины или через конструктор.
NotificationMapper
- это bean ответственный за преобразование JSON объекта в java объект. Для этого он использует ОbjectMapper
из библиотеки com.fasterxml.jackson
который должен быть доступен в качестве bean в конфигурации или установлен через конструктор.
WebhookHandler
- это интерфейс. Вы можете написать любой класс для обработки уведомлений, просто реализуйте интерфейс и выполните свою логику в методе handle()
или используйте лямбда выражение.
public interface WebhookHandler {
void handle(Notification notification);
}
Ссылка на пример: 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));
}
}
Так как каждое уведомление автоматически кастится в java объект, вы можете фильтровать уведомление по любому полю самостоятельно. С описанием структуры объектов уведомлений можно ознакомиться по этой ссылке: Документация Для удобства все типы хуков и сообщений названы аналогично документации:
Java объект | Webhook's json объект |
---|---|
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 |
Список примеров#
Описание | Ссылка на пример |
---|---|
Как создать группу и отправить сообщение | SendMessageExample.java |
Как создать группу и отправить сообщение | CreateGroupSendMessageExample.java |
Как отправить файл загруженный с устройства | SendFileByUploadExample.java |
Как отправить файл через ссылку | SendFileByUrlExample.java |
Как отправить файл через uploadFile + SendFileByUrl | UploadFileAndSendByUrlExample.java |
Как отправить опрос | SendPollExample.java |
Как получать входящие уведомления | WebhookExample.java |