whatsapp-api-webhook-server-java - библиотека для интеграции с мессенджером WhatsApp через API сервиса green-api.com. Чтобы воспользоваться библиотекой, нужно получить регистрационный токен и ID аккаунта в личном кабинете. Есть бесплатный тариф аккаунта разработчика.
Документация к REST API находится по ссылке. Библиотека является оберткой к REST API, поэтому документация по ссылке выше применима и к самой библиотеке.
Чтобы отправить сообщение или выполнить другие методы Green API, аккаунт WhatsApp в приложении телефона должен быть в авторизованном состоянии. Для авторизации аккаунта перейдите в личный кабинет и сканируйте QR-код с использованием приложения WhatsApp.
Обновим систему:
sudo apt update
sudo apt upgrade -yНа сервере должен быть установлен Java 17. Инструкция по установке Java.
sudo apt install openjdk-17-jdkНастроим брандмауэр:
Разрешим соединение по SSH:
sudo ufw allow sshБазовые правила:
sudo ufw default deny incoming
sudo ufw default allow outgoingРазрешаем соединения по HTTP и HTTPS:
sudo ufw allow http
sudo ufw allow httpsАктивируем брандмауэр:
sudo ufw enableУстановите библиотеку в проект своего сервера. Библиотека доступна в центральном репозитории Maven.
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-client-java', version: 'version'Установите параметры сервера в application.yml.
Атрибут WebhookToken является опциональным, ему можно не присваивать значение, однако он должен быть
в application.yml.
Если вы не хотите устанавливать пароль, вы можете просто оставить параметр webhookToken без значения.
green-api:
webhookToken:
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 и быть бином с именем whatsappWebhookHandler.
Для этого установите аннотацию @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 |
EditedMessageWebhook |
EditedMessage |
DeletedMessageWebhook |
DeletedMessage |
InteractiveButtonsMessageWebhook |
InteractiveButtons |
InteractiveButtonsReplyMessageWebhook |
InteractiveButtonsReply |
OutgoingCall |
OutgoingCall |
QuotaExceeded |
QuotaExceeded |
Для JAR-файла:
java -jar ваше_приложение.jarЕсли используется Maven запустите из директории проекта:
./mvnw spring-boot:runДокументация по методам сервиса
Лицензировано на условиях Attribution-NoDerivatives 4.0 International (CC BY-ND 4.0) . LICENSE.