Как запустить веб-сервер#
Импорт#
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