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

Пример бота на 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