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

Как запустить веб-сервер#

Импорт#

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'

Примеры#

Как инициализировать объект#

Установите параметры сервера в application.yml. Атрибут WebhookToken является опциональным, ему можно не присваивать значение, однако он должен быть в application.yml. Если вы не хотите устанавливать пароль, вы можете просто оставить параметр webhookToken без значения.

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

Как запустить веб-сервер#

Приложения начнет слушать порт, сразу после запуска метода main, для этого не забудьте поставить аннотацию @ComponentScan(basePackages = "com.greenapi.server"), чтобы в вашем проекте были доступны все стандартные бины библиотеки.

Ссылка на пример: WhatsappApiServerExample.java.

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

Класс функции-обработчика должен имплементировать интерфейс WebhookHandler и быть бином. Для этого установите аннотацию @Component(value = "whatsappWebhookHandler") над классом функции-обработчика.

Ссылка на пример: 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}}/green-api/async/webhook Если вы хотите чтобы ваша функция-обработчик handle() будет выполнена асинхронно.

Webhook URL: {{your host}}/green-api/webhook Если вы хотите чтобы ваша функция-обработчик handle() вызывалась для каждого вебхука последовательно в одном потоке.

Так как каждое уведомление автоматически кастится до java объекта, вы можете фильтровать уведомление по любому полю самостоятельно. С описанием структуры объектов уведомлений можно ознакомиться по этой ссылке: Документация Для удобства все типы хуков и сообщений названы аналогично документации:

Java объект Webhook's json объект
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

При получении нового уведомления ваша функция-обработчик handle() будет выполнена асинхронно. Мы рекомендуем обрабатывать уведомления асинхронно, так как они настроены на таймаут, при долгом получении статус кода 200. После таймаута вторая попытка происходит не сразу, что может послужить причиной долгой обработки уведомлений и увеличения очереди сообщений.

Запуск приложения#

Для JAR-файла:

java -jar ваше_приложение.jar

Если используется Maven запустите из директории проекта:

./mvnw spring-boot:run