Пример бота на Java#
Установка#
Перед началом необходимо установить библиотеку и сконфигурировать бота, подробно этот процесс описан здесь: Как импортировать библиотеку и сконфигурировать своего бота.
Пример бота#
В качестве примера был создан бот демонстрирующий отправку методов класса Scene. Он состоит из 3 сцен: FullStartScene, ChooseScene и InputLinkScene.
Ссылка на пример: full. Стартовая сцена FullStartScene
ждет команду /start
, после чего отправляет меню и активирует следующую сцену ChooseScene
.
public class FullStartScene extends Scene {
@Override
public State processIncomingMessage(MessageWebhook incomingMessage, State currentState) {
var greetingText =
"""
Please, choose Scene's method and I execute it.
1. answerWithText();
2. answerWithUrlFile();
3. answerWithPoll();
4. answerWithLocation();
5. answerWithContact();
6. Exit.
""";
var resp = answerWithText(incomingMessage, greetingText, "/start");
if (resp == null) {
var sendMessageResp = answerWithText(incomingMessage, "Hi, this is test bot.\nPlease, send me a command - /start");
return currentState;
}
return activateNextScene(currentState, new ChooseScene());
}
}
Вторая сцена ждет ответа пользователя и запускает выполнение нужного метода. В случае выбора 2. answerWithUrlFile()
, запускается сцена InputLinkScene
public class ChooseScene extends Scene {
@Override
public State processIncomingMessage(MessageWebhook incomingMessage, State currentState) {
if (Filter.isMessageTextExpected(incomingMessage, "1")) {
answerWithText(incomingMessage, "Hi! This is answerWithText!");
return currentState;
} else if (Filter.isMessageTextExpected(incomingMessage, "2")) {
answerWithText(incomingMessage, "Send me the link on File:");
return activateNextScene(currentState, new InputLinkScene());
} else if (Filter.isMessageTextExpected(incomingMessage, "3")) {
var options = new ArrayList<Option>();
options.add(new Option("Red"));
options.add(new Option("Blue"));
options.add(new Option("Green"));
options.add(new Option("Pink"));
answerWithPoll(incomingMessage, "choose color", options, false);
return currentState;
} else if (Filter.isMessageTextExpected(incomingMessage, "4")) {
answerWithLocation(incomingMessage, "Home", "Cdad. de La Paz 2969, Buenos Aires", -34.5553558, -58.4642510);
return currentState;
} else if (Filter.isMessageTextExpected(incomingMessage, "5")) {
var contact = Contact.builder()
.firstName("first")
.lastName("last")
.middleName("middle")
.company("Green API")
.phoneContact(11111111111L)
.build();
answerWithContact(incomingMessage, contact);
return currentState;
} else if (Filter.isMessageTextExpected(incomingMessage, "6")) {
answerWithText(incomingMessage, "Goodbye!");
return activateStartScene(currentState);
}
answerWithText(incomingMessage, "Please send numbers - 1, 2, 3, 4, 5 or 6");
return currentState;
}
}
Данная сцена ждет чтобы пользователь отправил ссылку на файл. Если ссылка корректная, отправляет файл и возвращает на сцену выбора ChooseScene
.
public class InputLinkScene extends Scene {
@Override
public State processIncomingMessage(MessageWebhook incomingMessage, State currentState) {
var fileUrl = getText(incomingMessage);
if (fileUrl != null) {
try {
answerWithUrlFile(incomingMessage, "This is your file!", fileUrl, "testFile");
} catch (Exception e) {
answerWithText(incomingMessage, "invalid link! Please send me a link, for example https://greenapi.com");
}
} else {
answerWithText(incomingMessage, "Please send me a link!");
return currentState;
}
return activateNextScene(currentState, new ChooseScene());
}
}
Список методов класса Scene#
Методы класса Scene | Описание |
---|---|
activateNextScene(State currentState, Scene nextScene) | Активирует следующую сцену nextScene для текущего чата. |
activateStartScene(State currentState) | Активирует стартовую сцену для текущего пользователя. |
getText(MessageWebhook messageWebhook) | Возвращает текст сообщения, если оно текстовое, если нет возвращает null |
answerWithText(MessageWebhook messageWebhook, String text) | Отвечает текстом на входящее сообщение. |
answerWithUploadFile(MessageWebhook messageWebhook, String caption, File file) | Загружает и отправляет файл в ответ на входящее сообщение. Сaption - не обязательное поле. |
answerWithUrlFile(MessageWebhook messageWebhook, String caption, String url, String fileName) | Отправляет файл из url в ответ на входящее сообщение. Сaption - не обязательное поле. |
answerWithLocation(MessageWebhook messageWebhook, String nameLocation, String address, Double latitude, Double longitude) | Отправляет геолокация в ответ на входящее сообщение. |
answerWithPoll(MessageWebhook messageWebhook, String message, List<Option> options, Boolean multipleAnswers) | Отправляет опрос в ответ на входящее сообщение. |
answerWithContact(MessageWebhook messageWebhook, Contact contact) | Отправляет контакт в ответ на входящее сообщение. |
В перегруженном варианте методы ответов на сообщения могут содержать дополнительные параметры
expectedMessage
иregexPattern
. Если текст входящего сообщения совпадает с условием, метод выполнится и вернет ответ метода согласно документации, если нет, то метод вернетnull
.
Список примеров#
Описание | Ссылка на пример |
---|---|
Как инициализировать объект | BotStarterClassExample.java |
Сцена "Привет" | BaseStartScene.java |
Сцена "Эхо" | EchoStartScene.java |
Как получать другие типы уведомлений | EventStartScene.java |
Как фильтровать входящие сообщения | FiltersStartScene.java |
Как обрабатывать тело уведомлений | MediaStartScene.java |
Как работать с состоянием бота | state |
Пример готового чат бота | full |