Перейти к содержанию

Получение входящих уведомлений на 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