CodeGym/Java Blog/рдпрд╛рджреГрдЪреНрдЫрд┐рдХ/рдЬрд╛рд╡рд╛рдордзреНрдпреЗ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рддрдпрд╛рд░ рдХрд░рдгреЗ: рдЧрд░реНрднрдзрд╛рд░рдгреЗрдкрд╛рд╕реВрди рдЙрдкрдпреЛрдЬрдирд╛...
John Squirrels
рдкрд╛рддрд│реА 41
San Francisco

рдЬрд╛рд╡рд╛рдордзреНрдпреЗ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рддрдпрд╛рд░ рдХрд░рдгреЗ: рдЧрд░реНрднрдзрд╛рд░рдгреЗрдкрд╛рд╕реВрди рдЙрдкрдпреЛрдЬрдирд╛рдкрд░реНрдпрдВрдд

рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдпрд╛ рдЧреНрд░реБрдкрдордзреНрдпреЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреЗрд▓реЗ
рд╕рджрд╕реНрдп
рдордЧ рд╕рд╛рдВрдЧрдХрд╛рдореЗ рдХрд╛рдп рдЖрд╣реЗрдд? рдЖрдкрдг рдпрд╛рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рдпреЗрдереЗ рд╡рд╛рдЪреВ рд╢рдХрддрд╛ . рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯреНрд╕ (рдпрд╛рдкреБрдвреЗ "API") рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд░реНтАНрдпрд╛ рд▓рд╛рдпрдмреНрд░рд░реАрдЪреНрдпрд╛ рдЕрдзрд┐рдХреГрдд рджрд╕реНрддрдРрд╡рдЬрд╛рдВрдЪреЗ рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рддреЗ рдпреЗрдереЗ рдЖрдврд│реВ рд╢рдХрддреЗ .
рдЬрд╛рд╡рд╛рдордзреНрдпреЗ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рддрдпрд╛рд░ рдХрд░рдгреЗ: рдЧрд░реНрднрдзрд╛рд░рдгреЗрдкрд╛рд╕реВрди рдЙрдкрдпреЛрдЬрдирд╛рдкрд░реНрдпрдВрдд - 1
рддреЗрдереЗ рд╕рд░реНрд╡ рдХрд╛рд╣реА рдЕрддрд┐рд╢рдп рд╕реБрд▓рдн рдЖрдгрд┐ рд╕реНрдкрд╖реНрдЯ рдЖрд╣реЗ. рдЕрд╕реЗ рджрд┐рд╕рддреЗ рдХреА рдЖрдореНрд╣реА рдлрдХреНрдд рдХреЛрдб рд▓рд┐рд╣реВ рд╢рдХрддреЛ рдЖрдгрд┐ рдЖрдирдВрдж рдХрд░реВ рд╢рдХрддреЛ! рдкрдг рддреЗ рдЗрддрдХреЗ рд╕реЛрдкреЗ рдирд╛рд╣реА. рд╢реЛрдзрдгреНрдпрд╛рдд рдмрд░рд╛рдЪ рд╡реЗрд│ рдШрд╛рд▓рд╡рд▓реНрдпрд╛рдирдВрддрд░, рдорд▓рд╛ рдмреЙрдЯ рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯрд╡рд░реАрд▓ рдЬреНрдЮрд╛рдирд╛рдЪреНрдпрд╛ рдЯрд┐рдкреНрд╕ рд╕рд╛рдкрдбрд▓реНрдпрд╛ рдЖрд╣реЗрдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдХреАрдмреЛрд░реНрдб рдХрд╕рд╛ рдмрдирд╡рд╛рдпрдЪрд╛, рдПрдХ рд╣рд╛рддрд╛рд│рдгреАCallbackQuery, рдЖрдгрд┐ рдкреБрдвреЗ. рдкрд░рдВрддреБ, рдорд▓рд╛ Java рдмреЙрдЯ рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯрд╕рд╛рдареА рд╕рдВрдкреВрд░реНрдг, рд╕рдВрдкреВрд░реНрдг рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рд╕рд╛рдкрдбрд▓рд╛ рдирд╛рд╣реА. рддреНрдпрд╛рдореБрд│реЗ рдорд▓рд╛ рд╣рд╛ рд▓реЗрдЦ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕ рдкреНрд░рд╡реГрддреНрдд рдХреЗрд▓реЗ. рдЕрд╢рд╛ рдЕрдиреЗрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯреНрд╕ рдЖрд╣реЗрдд рдЬрд┐рдереЗ рддреБрдореНрд╣реА рддреБрдордЪрд╛ рд╕реНрд╡рддрдГрдЪрд╛ рд╕рд╣рдЬ рдЙрдкрдпреЛрдЬреНрдп рдмреЙрдЯ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛. рдкрд░рдВрддреБ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреА рдЕрд╢реА рдЖрд╣реЗ рдХреА рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ рдмрд╣реБрддреЗрдХ рдмреЙрдЯреНрд╕ рд╕рдВрджрд░реНрдн рдорд╛рд╣рд┐рддреА рдЖрдгрд┐ рдпрд╛рд╕рд╛рд░рдЦреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛рдд. рдЖрдордЪрд╛ рдмреЙрдЯ рд╣рд╛ рдПрдХ рдкреВрд░реНрдг рд╡реЗрдм рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд╣реЗ. рддреБрдореНрд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдмрд╛рдВрдзреВ рд╢рдХрддрд╛, рд╡рд┐рд╡рд┐рдз API рд╡рд┐рдирдВрддреНрдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реВ рд╢рдХрддрд╛, рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд╛рд░реНрд╕ рдХрд░реВ рд╢рдХрддрд╛, рдЬрдЯрд┐рд▓ рдЧрдгрдирд╛ рдХрд░реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдмрд░реЗрдЪ рдХрд╛рд╣реА рдХрд░реВ рд╢рдХрддрд╛. рд╢рдХреНрдпрддрд╛ рдХреЗрд╡рд│ рдЖрдкрд▓реНрдпрд╛ рдХрд▓реНрдкрдиреЗрджреНрд╡рд╛рд░реЗ рдорд░реНрдпрд╛рджрд┐рдд рдЖрд╣реЗрдд. рдорд▓рд╛ рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА рдореА рдХрд╛рдп рд▓рд┐рд╣рдгрд╛рд░ рдЖрд╣реЗ рд╣реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдгреНрдпрд╛рдд рд╡рд░реАрд▓ рдЧреЛрд╖реНрдЯреАрдВрдиреА рдорджрдд рдХреЗрд▓реА рдЖрд╣реЗ. рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдорд╡рд░ рдмреЙрдЯрдЪреА рдиреЛрдВрджрдгреА рдХрд░рдгреЗ рдЦреВрдк рд╕реЛрдкреЗ рдЖрд╣реЗ. рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреЗ рд╡рд░реАрд▓ рд▓рд┐рдВрдХ рдХреЗрд▓реЗрд▓реНрдпрд╛ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдгрд╛рдд рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ. рдЖрдордЪреНрдпрд╛ рдЕрд░реНрдЬрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рдмреЙрдЯрдЪреЗ рдирд╛рд╡ рдЖрдгрд┐ рдмреЙрдЯрдЪреА рдиреЛрдВрджрдгреА рдХрд░рддрд╛рдирд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдорд┐рд│рдгрд╛рд░реЗ рдЯреЛрдХрди рдорд╛рд╣рд┐рдд рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдореБрд│рд╛рдд, рдмреЙрдЯ рд╣рд╛ рдлрдХреНрдд рдХрдиреНрд╕реЛрд▓-рдЖрдзрд╛рд░рд┐рдд рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЖрд╣реЗ. рдХреЛрдгрддреЗрд╣реА рдлреНрд░рдВрдЯ рдПрдВрдб рдирд╛рд╣реА, рдлрдХреНрдд рд╢реБрджреНрдз рдХрдорд╛рдВрдб рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ. рдЖрдкрдг рдорд╛рд╕реНрдЯрд░ рдХрд░реВ рдЗрдЪреНрдЫрд┐рдд рдЕрд╕рд▓реНрдпрд╛рд╕рд╣рд╛рдпрдмрд░рдиреЗрдЯ рдХрд░рд╛ рдХрд┐рдВрд╡рд╛ JSON рдХрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рд╛рдпрдЪреЗ рддреЗ рд╢рд┐рдХрд╛ , рдордЧ рд╣рд╛ рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рдХрд▓реНрдк рдЖрд╣реЗ. (рддреБрдореНрд╣реА Maven рд╡рд╛рдкрд░рдд рдЖрд╣рд╛рдд рдЕрд╕реЗ рдореА рдЧреГрд╣реАрдд рдзрд░рддреЛ) рд╡рд░ рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рдЬреЛрдбреВрди рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВ pom.xml. рддреБрдореНрд╣реА рд╣реЗ рдЕрд╕реЗ рдХрд░реВ рд╢рдХрддрд╛:
<dependency>
            <groupId>org.telegram</groupId>
            <artifactId>telegrambots</artifactId>
            <version>3.5</version>
</dependency>
рдордЧ Botрд╡рд░реНрдЧ рддрдпрд╛рд░ рдХрд░рд╛ рдЬреЛ TelegramLongPollingBotрд╡рд░реНрдЧрд╛рдЪрд╛ рд╡рд╛рд░рд╕рд╛ рдШреЗрддреЛ рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛ рдкрджреНрдзрддреА рдЕрдзрд┐рд▓рд┐рдЦрд┐рдд рдХрд░рд╛:
public class Bot extends TelegramLongPollingBot {

    /**
     * Method for receiving messages.
     * @param update Contains a message from the user.
     */
    @Override
    public void onUpdateReceived(Update update) {
    String message = update.getMessage().getText();
    sendMsg(update.getMessage().getChatId().toString(), message);
    }

    /**
     * Method for creating a message and sending it.
     * @param chatId chat id
     * @param s The String that you want to send as a message.
     */
    public synchronized void sendMsg(String chatId, String s) {
        SendMessage sendMessage = new SendMessage();
        sendMessage.enableMarkdown(true);
        sendMessage.setChatId(chatId);
        sendMessage.setText(s);
        try {
            sendMessage(sendMessage);
        } catch (TelegramApiException e) {
            log.log(Level.SEVERE, "Exception: ", e.toString());
        }
    }

    /**
     * This method returns the bot's name, which was specified during registration.
     * @return bot name
     */
    @Override
    public String getBotUsername() {
        return "BotName";
    }

    /**
     * This method returns the bot's token for communicating with the Telegram server
     * @return the bot's token
     */
    @Override
    public String getBotToken() {
        return "BotToken";
    }
}
mainрдЖрдгрд┐ рдЖрддрд╛ рдкрджреНрдзрддреАрдЪреА рд╕рд╛рдордЧреНрд░реАрдГ
public static void main(String[] args) {
        ApiContextInitializer.init();
        TelegramBotApi telegramBotApi = new TelegramBotApi();
        try {
            telegramBotApi.registerBot(Bot.getBot());
        } catch (TelegramApiRequestException e) {
            e.printStackTrace();
        }
}
getBotUsername()рдЖрдгрд┐ рдкрджреНрдзрддреА рднрд░рд▓реНрдпрд╛рдирдВрддрд░ getBotToken(), рдмреЙрдЯ рд╕реБрд░реВ рдХрд░рд╛. рдЖрддреНрддрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рддреНрдпрд╛рд▓рд╛ рдкрд╛рдард╡рд▓реЗрд▓реЗ рдХреЛрдгрддреЗрд╣реА рд╕рдВрджреЗрд╢ рддреЗ рдлрдХреНрдд рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддреЗ, рдЬрд╕реЗ рдХреА " рдЖрд░рд╢рд╛ " рд╕рд╛рд░рдЦреЗ. рд╣реЗ рдЕрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ: рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реБрд░реВ рдХрд░рддрд╛, рддреЗрд╡реНрд╣рд╛ рддреЗ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рд╕рд░реНрд╡реНрд╣рд░рд▓рд╛, рджрд░ n рд╕реЗрдХрдВрджрд╛рдВрдиреА рдПрдХрджрд╛, рдЦрд╛рд▓реАрд▓ URL рд╡рд░ рд╡рд┐рдирдВрддреНрдпрд╛ рдкрд╛рдард╡рдгреНрдпрд╛рд╕ рд╕реБрд░реБрд╡рд╛рдд рдХрд░рддреЗ: https://api.telegram.org/BotToken/getMe , рдЬрд┐рдереЗ BotToken рд╣реЗ рддреБрдордЪреНрдпрд╛ рдмреЙрдЯрдЪреЗ рдЯреЛрдХрди рдЖрд╣реЗ . рдкреНрд░рддрд┐рд╕рд╛рджрд╛рдд, рддреНрдпрд╛рд▓рд╛ рд╕рд░реНрд╡ рд╕рдВрджреЗрд╢ рдЕрд╕рд▓реЗрд▓реЗ JSON рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ. рдпрд╛рддреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢рд╛рд╡рд░ рд▓рд╛рдпрдмреНрд░рд░реАрджреНрд╡рд╛рд░реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд▓реА рдЬрд╛рддреЗ рдЖрдгрд┐ рддреА OnUpdateReceived(Update update)рдкрджреНрдзрдд рдореНрд╣рдгреВрди рдкрд╛рдард╡рд┐рд▓реА рдЬрд╛рддреЗUpdateрд╡рд╕реНрддреВ рдЖрдгрд┐ рддреНрдпрд╛рд╕реЛрдмрддрдЪ рдЖрдореНрд╣реА рдХрд╛рдо рдХрд░рддреЛ. рдпреЗрдереЗ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯреНрд╕рдЪреЗ рд╕реМрдВрджрд░реНрдп рдЖрд╣реЗ: рддреЗ рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕рдВрдЧрдгрдХрд╛рд╡рд░ рдЪрд╛рд▓рд╡реВ рд╢рдХрддрд╛рдд, рддреНрдпрд╛рдЪреА рдЪрд╛рдЪрдгреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдлрдХреНрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реБрд░реВ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдмрджрд▓рд╛рдирдВрддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рддреЗ рд╣реЛрд╕реНрдЯрд╡рд░ рддреИрдирд╛рдд рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА. рд╣реЗ рдЦреВрдк рд╕реЛрдпреАрдЪреЗ рдЖрд╣реЗ. рдЕрд░реНрдерд╛рдд, рддреБрдореНрд╣реА рд╡реЗрдмрд╣реБрдХ рд╡рд╛рдкрд░реВрди рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдмреЙрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░реВ рд╢рдХрддрд╛. рддреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рдЗрдВрдЯрд░рдиреЗрдЯрд╡рд░ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рд╢реЛрдзреВ рд╢рдХрддрд╛. рд╕рд╛рдзреЗрдкрдгрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА LongPolling рд╡рд╛рдкрд░реВ. рд╕рдВрджреЗрд╢рд╛рдВрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╢реА рдХреЗрд▓реА рдЬрд╛рддреЗ рдЖрдгрд┐ рддреБрдореНрд╣реА рдкреНрд░рддрд┐рд╕рд╛рджрд╛рдд рдХрд╛рдп рдкрд╛рдард╡рддрд╛ рд╣реЗ рдХреЗрд╡рд│ рднрд╛рд╖рд╛ рдЖрдгрд┐ рд▓рд╛рдпрдмреНрд░рд░реАрдЪреНрдпрд╛ рдХреНрд╖рдорддреЗрджреНрд╡рд╛рд░реЗ рдорд░реНрдпрд╛рджрд┐рдд рдЖрд╣реЗ. рдмрд╛рдХреА рд╕рд░реНрд╡ рдХрд╛рд╣реА рддреБрдордЪреНрдпрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЖрд╣реЗ. рддреБрдореНрд╣реА рдПрдХ рдмреЙрдЯ рдмрдирд╡реВ рд╢рдХрддрд╛ рдЬреЛ рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА YouTube рд╡реНрд╣рд┐рдбрд┐рдУ рд╢реЛрдзреЗрд▓. рддреБрдореНрд╣реА рдПрдХ рдмреЙрдЯ рдмрдирд╡реВ рд╢рдХрддрд╛ рдЬреЛ рддреБрдореНрд╣рд╛рд▓рд╛ рджрд░рд░реЛрдЬ рдЬреЗ рдкрд╛рдард╡рддрд╛ рддреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдкрд╛рдард╡реЗрд▓, рдЬрд╕реЗ рдХреА рдПрдХ рд╡рд░реНрд╖рд╛рдкреВрд░реНрд╡реАрдЪреНрдпрд╛ рдЯрд╛рдЗрдо рдХреЕрдкреНрд╕реВрд▓. рдХрд┐рдВрд╡рд╛ рддреБрдореНрд╣реА CRM рд╕рд┐рд╕реНрдЯреАрдордордзреНрдпреЗ рд╕рдорд╛рдХрд▓рд┐рдд рд╣реЛрдгреЗ рдЖрдгрд┐ рдЫреЛрдЯреНрдпрд╛ рд╡реНрдпрд╡рд╕рд╛рдпрд╛рдВрд╕рд╛рдареА рдмреЙрдЯреНрд╕ рдмрдирд╡рдгреЗ рд╢рд┐рдХреВ рд╢рдХрддрд╛тАФрддреБрдореНрд╣реА рдХреЗрд╡рд│ рддреБрдордЪреНрдпрд╛ рдХрд▓реНрдкрдиреЗрдиреЗ рдорд░реНрдпрд╛рджрд┐рдд рдЖрд╣рд╛рдд. рдкреБрдвреЗ. рдЬреНрдпрд╛рдВрдиреА рдмреЙрдЯреНрд╕ рд╡рд╛рдкрд░рд▓реЗ рдЖрд╣реЗрдд рддреНрдпрд╛рдВрдирд╛ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ рдХреА " " рд╡рд░реНрдгрд╛рдиреЗ рд╕реБрд░реВ рд╣реЛрдгрд╛рд░реНтАНрдпрд╛ рдХрдорд╛рдВрдбрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдгреЗ рд╕реЛрдпреАрдЪреЗ рдЖрд╣реЗ /, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, /start. рдкрд░рдВрддреБ рдПрдХ рдЕрдзрд┐рдХ рд╕реЛрдпреАрд╕реНрдХрд░ рдорд╛рд░реНрдЧ рдЖрд╣реЗ: рдмрдЯрдгреЗ. рджреЛрди рдкреНрд░рдХрд╛рд░рдЪреА рдмрдЯрдгреЗ рдЖрд╣реЗрдд: рдЗрдирдкреБрдЯ рдлреАрд▓реНрдбрдЦрд╛рд▓реА рджрд┐рд╕рдгрд╛рд░реА ( ReplyKeyboardMarkup) рдЖрдгрд┐ рдмрдЯрдгреЗ рдЬреА рддреНрдпрд╛рдВрдирд╛ рдЬреЛрдбрд▓реЗрд▓реНрдпрд╛ рд╕рдВрджреЗрд╢рд╛рдЪреНрдпрд╛ рдереЗрдЯ рдЦрд╛рд▓реА рдЖрд╣реЗрдд (InlineKeyboardMarkup). рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдгрд╛рддреАрд▓ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╡рд░реНрдгрдирд╛рд╡рд░реВрди рддреБрдореНрд╣реА рддреНрдпрд╛рдВрдЪреА рдореВрд▓рднреВрдд рдорд╛рд╣рд┐рддреА рдорд┐рд│рд╡реВ рд╢рдХрддрд╛.

рд░рд┐рдкреНрд▓рд╛рдпрдХреАрдмреЛрд░реНрдбрдорд╛рд░реНрдХрдЕрдк

рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд, рд╣реЗ рдмрдЯрдг рдЕреЕрд░реЗрдЪреЗ рдЕреЕрд░реЗ рдЖрд╣реЗ: List<KeyboardRow <KeyboardButton>>. рдпреЗрдереЗ рдирдореБрдирд╛ рдХреЛрдб рдЖрд╣реЗ рдЬреЛ рдХреАрдмреЛрд░реНрдб рддрдпрд╛рд░ рдХрд░рддреЛ:
public synchronized void setButtons(SendMessage sendMessage) {
        // Create a keyboard
        ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup();
        sendMessage.setReplyMarkup(replyKeyboardMarkup);
        replyKeyboardMarkup.setSelective(true);
        replyKeyboardMarkup.setResizeKeyboard(true);
        replyKeyboardMarkup.setOneTimeKeyboard(false);

        // Create a list of keyboard rows
        List<KeyboardRow> keyboard = new ArrayList<>();

        // First keyboard row
        KeyboardRow keyboardFirstRow = new KeyboardRow();
        // Add buttons to the first keyboard row
        keyboardFirstRow.add(new KeyboardButton("Hi"));

        // Second keyboard row
        KeyboardRow keyboardSecondRow = new KeyboardRow();
        // Add the buttons to the second keyboard row
        keyboardSecondRow.add(new KeyboardButton("Help");

        // Add all of the keyboard rows to the list
        keyboard.add(keyboardFirstRow);
        keyboard.add(keyboardSecondRow);
        // and assign this list to our keyboard
        replyKeyboardMarkup.setKeyboard(keyboard);
    }
sendMsg()рдореЗрд╕реЗрдЬ рдкрд╛рд╕ рдХреЗрд▓реНрдпрд╛рд╡рд░ рдЖрдореНрд╣реА рдпрд╛ рдкрджреНрдзрддреАрд▓рд╛ рдореЗрдердб рдореНрд╣рдгрддреЛ . рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рдЖрдореНрд╣реА рддреНрдпрд╛ рд╕рдВрджреЗрд╢рд╛рд╕рд╛рдареА рдХреАрдмреЛрд░реНрдб рд╕реЗрдЯ рдХрд░рддреЛ. рдЬреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣реА рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ рд╣рд╛ рд╕рдВрджреЗрд╢ рдкрд╛рдард╡рддреЛ, рддреЗрд╡реНрд╣рд╛ рддреНрдпрд╛рд▓рд╛ рдЖрдордЪреНрдпрд╛ рд╕рдВрджреЗрд╢рд╛рдЪрд╛ рдордЬрдХреВрд░ рдЖрдгрд┐ "рд╣рд╛рдп" рдЖрдгрд┐ "рдорджрдд" рдореНрд╣рдгрдгрд╛рд░реА 2 рдмрдЯрдгреЗ рдПрдХрдореЗрдХрд╛рдВрдЪреНрдпрд╛ рдЦрд╛рд▓реА рджрд┐рд╕реЗрд▓. рдЬреЗрд╡реНрд╣рд╛ рдпрд╛рдкреИрдХреА рдПрдХ рдмрдЯрдг рдХреНрд▓рд┐рдХ рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рддреЗрд╡реНрд╣рд╛ рдмреЙрдЯрд▓рд╛ рдмрдЯрдг рдордЬрдХреВрд░ рдЕрд╕рд▓реЗрд▓рд╛ рд╕рдВрджреЗрд╢ рдкрд╛рдард╡рд┐рд▓рд╛ рдЬрд╛рддреЛ. рдореНрд╣рдгреВрди, рдХреНрд▓рд╛рдпрдВрдЯрдиреЗ "рдорджрдд" рд╡рд░ рдХреНрд▓рд┐рдХ рдХреЗрд▓реНрдпрд╛рд╕ , рдмреЙрдЯрд▓рд╛ "рдорджрдд" рд╕рд╣ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдИрд▓. рдмреЙрдЯрд▓рд╛, рдЕрд╕реЗ рджрд┐рд╕рддреЗ рдХреА рдХреНрд▓рд╛рдпрдВрдЯрдиреЗ рд╕реНрд╡рддрдГ "рдорджрдд" рд▓рд┐рд╣рд┐рд▓реЗ рдЖрдгрд┐ рдмреЙрдЯрд▓рд╛ рдордЬрдХреВрд░ рдкрд╛рдард╡рд▓рд╛. рдЖрдгрд┐ рдордЧ рддреБрдореНрд╣реА рд╕рдВрджреЗрд╢рд╛рдВрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛.

рдЗрдирд▓рд╛рдЗрди рдХреАрдмреЛрд░реНрдбрдорд╛рд░реНрдХрдЕрдк

рд╣реЗ рджреЗрдЦреАрд▓ рдЕреЕрд░реЗрдЪреЗ рдЕреЕрд░реЗ рдЖрд╣реЗ. рд╣реЗ рдорд╛рдЧреАрд▓ рдорд╛рд░реНрдХрдЕрдк рд╕рд╛рд░рдЦреЗрдЪ рдЖрд╣реЗ, рдкрд░рдВрддреБ рддрд░реНрдХрд╢рд╛рд╕реНрддреНрд░ рдпреЗрдереЗ рдереЛрдбреЗ рд╡реЗрдЧрд│реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ. рдпрд╛ рдкреНрд░рдХрд╛рд░рдЪрд╛ рдХреАрдмреЛрд░реНрдб рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрджреЗрд╢рд╛рд╢реА рдЬреЛрдбрд▓реЗрд▓рд╛ рдЕрд╕рддреЛ рдЖрдгрд┐ рдХреЗрд╡рд│ рддреНрдпрд╛рд╕рд╛рдареАрдЪ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЕрд╕рддреЛ. рдЗрдирд▓рд╛рдЗрди рдХреАрдмреЛрд░реНрдб рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдпреЗрдереЗ рдПрдХ рдкрджреНрдзрдд рдЖрд╣реЗ:
private void setInline() {
        List<List<InlineKeyboardButton>> buttons = new ArrayList<>();
        List<InlineKeyboardButton> buttons1 = new ArrayList<>();
        buttons1.add(new InlineKeyboardButton().setText("Button").setCallbackData(17));
        buttons.add(buttons1);

        InlineKeyboardMarkup markupKeyboard = new InlineKeyboardMarkup();
        markupKeyboard.setKeyboard(buttons);
    }
ListрдордзреНрдпреЗ рдПрдХ рддрдпрд╛рд░ рдХрд░рд╛ ListрдЖрдгрд┐ рдкрд╣рд┐рд▓реНрдпрд╛ рдкрдВрдХреНрддреАрдордзреНрдпреЗ рдЗрдирд▓рд╛рдЗрди рдмрдЯрдг рдЬреЛрдбрд╛. рдпрд╛ рдмрдЯрдгрд╛рдордзреНрдпреЗ URL, рдЪреЕрдиреЗрд▓рдЪреА рд▓рд┐рдВрдХ рдХрд┐рдВрд╡рд╛ CallbackQuery, рдЬреНрдпрд╛рдмрджреНрджрд▓ рдореА рдереЛрдбреНрдпрд╛ рд╡реЗрд│рд╛рдиреЗ рд▓рд┐рд╣реАрди. рдпреЗрдереЗ рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдмрдЯрдгрд╛рдЪрд╛ рдордЬрдХреВрд░ рд╕реЗрдЯ рдХрд░рддреЛ, рдЬреЛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ рджрд┐рд╕реЗрд▓ рдЖрдгрд┐ рдирдВрддрд░ рдЖрдореНрд╣реА рдмреЙрдЯрд▓рд╛ рдкрд╛рдард╡рд▓рд╛ рдЬрд╛рдгрд╛рд░рд╛ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХрд░рддреЛ. рдЖрдордЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рд╡рд╛рдкрд░рдХрд░реНрддрд╛ "рд╣рд╛рдп" рдкрд╛рд╣рддреЛ рдЖрдгрд┐ рдЬреЗрд╡реНрд╣рд╛ рдмрдЯрдг рджрд╛рдмрд▓реЗ рдЬрд╛рддреЗ рддреЗрд╡реНрд╣рд╛ 17 рдХреНрд░рдорд╛рдВрдХ рдмреЙрдЯрд▓рд╛ рдкрд╛рдард╡рд┐рд▓рд╛ рдЬрд╛рдИрд▓. рд╣реЗ рдЖрдордЪреЗ рдЖрд╣реЗ CallbackQuery. рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд╣реА рд╢рдмреНрдж CallbackQuery. рдСрдмреНрдЬреЗрдХреНрдЯрд╡рд░реВрди рд╣рд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА Update, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ update.getCallbackQuery(). рд╣реА рдкрджреНрдзрдд a рдкрд░рдд рдХрд░рддреЗ CallbackQuery, рдЬреНрдпрд╛рдордзреВрди рддреБрдореНрд╣реА рдмреЙрдЯрд▓рд╛ рдкрд╛рдард╡рд▓реЗрд▓рд╛ рдбреЗрдЯрд╛ рдНрдХреНрд╕реЗрд╕ рдХрд░реВ рд╢рдХрддрд╛. рдкрджреНрдзрддреАрджреНрд╡рд╛рд░реЗ рд╣рд╛ рдбреЗрдЯрд╛ рдорд┐рд│рд╡рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ рдирдХрд╛ update.getMessage().getText()тАФрддреБрдореНрд╣рд╛рд▓рд╛ рдПрдХ рдорд┐рд│реЗрд▓ NullPointerException.
@Override
    public void onUpdateReceived(Update update) {
        if(update.hasMessage()) {
            ThreadClass thread = new ThreadClass(update.getMessage());
        } else  if(update.hasCallbackQuery()) {
            AnswerCallbackThread answerThread = new AnswerCallbackThread(update.getCallbackQuery());
        }
    }
рд╕рдВрджреЗрд╢ рдЕрд╕рд▓реНрдпрд╛рд╕, рдЖрдореНрд╣реА рдкреНрд░рдХреНрд░рд┐рдпреЗрд╕рд╛рдареА рдирд╡реАрди рдереНрд░реЗрдбрд╡рд░ рдкрд╛рдард╡рддреЛ; рддреЗрдереЗ рдЕрд╕рд▓реНрдпрд╛рд╕ CallbackQuery, рдЖрдореНрд╣реА рдкреНрд░рдХреНрд░рд┐рдпреЗрд╕рд╛рдареА рдпреЛрдЧреНрдп рдереНрд░реЗрдбрд╡рд░ рдкрд╛рдард╡реВ. рдЖрдкрдг рдПрдХ рдкреНрд░рддрд┐рд╕рд╛рдж рдкрд╛рдард╡реВ рд╢рдХрддрд╛ CallbackQuery. рдЯреЗрд▓реАрдЧреНрд░рд╛рдордордзреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреВрдЪрд╛ рд╕реНрд╡рддрдГрдЪрд╛ рдЖрдпрдбреА рдЕрд╕рддреЛ. рдПрдЦрд╛рджреНрдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рд╛ рдкреНрд░рддрд┐рд╕рд╛рдж рдкрд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА CallbackQuery, рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рддреНрдпрд╛рдЪреА рдЖрдпрдбреА рдорд╛рд╣рд┐рдд рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЬреА рдЖрдореНрд╣рд╛рд▓рд╛ рд╕рдВрдмрдВрдзрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯрд╡рд░реВрди рдорд┐рд│рддреЗ. рдкреНрд░рддрд┐рд╕рд╛рдж рдкрд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдпрд╛ рдкрджреНрдзрддреАрд▓рд╛ рдХреЙрд▓ рдХрд░рддреЛ:
public synchronized void answerCallbackQuery(String callbackId, String message) {
        AnswerCallbackQuery answer = new AnswerCallbackQuery();
        answer.setCallbackQueryId(callbackId);
        answer.setText(message);
        answer.setShowAlert(true);
        try {
            answerCallbackQuery(answer);
        } catch (TelegramApiException e) {
            e.printStackTrace();
        }
    }
рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ:рдкреНрд░рддрд┐рд╕рд╛рджрд╛рддреАрд▓ рдордЬрдХреВрд░ CallbackQuery200 рд╡рд░реНрдгрд╛рдВрдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдирд╕рд╛рд╡рд╛! рдЕрд╕рд╛ рдкреНрд░рддрд┐рд╕рд╛рдж рдкрд╛рдард╡рд▓реНрдпрд╛рдирдВрддрд░, рдХреНрд▓рд╛рдпрдВрдЯрд▓рд╛ рд╕рдВрджреЗрд╢ рдЕрд╕рд▓реЗрд▓реА рдПрдХ рдкреЙрдк-рдЕрдк рд╡рд┐рдВрдбреЛ рджрд┐рд╕реЗрд▓. рд╣реА рд╡рд┐рдВрдбреЛ рджрд┐рд╕рд▓реНрдпрд╛рдирдВрддрд░ рдХрд╛рд╣реА рд╕реЗрдХрдВрджрд╛рдд рдЕрджреГрд╢реНрдп рд╣реЛрдК рд╢рдХрддреЗ рдХрд┐рдВрд╡рд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдиреЗ рдУрдХреЗ рджрд╛рдмреЗрдкрд░реНрдпрдВрдд рддреА рдХрд╛рдпрдо рд░рд╛рд╣реВ рд╢рдХрддреЗ. рдореЛрдб рд╕реНрд╡рд┐рдЪ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА answer.setShowAlert(true)рдкрджреНрдзрдд рдХреЙрд▓ рдХрд░рддреЛ. рдЬрд░ рддреБрдореНрд╣реА trueрдкрджреНрдзрдд рдкрд╛рд╕ рдХреЗрд▓реА, рддрд░ рдУрдХреЗ рджрд╛рдмреЗрдкрд░реНрдпрдВрдд рд╡рд┐рдВрдбреЛ рдХрд╛рдпрдо рд░рд╛рд╣рддреЗ. рдЖрдкрдг рдЦреЛрдЯреЗ рдкрд╛рд╕ рдХреЗрд▓реНрдпрд╛рд╕, рдирдВрддрд░ рддреЗ 5 рд╕реЗрдХрдВрджрд╛рдВрдирдВрддрд░ рдЕрджреГрд╢реНрдп рд╣реЛрддреЗ. рд╣реА рд╕рд░реНрд╡ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рд▓рд╛рдпрдмреНрд░рд░реАрдЪреА рдореВрд▓рднреВрдд рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рдЖрд╣реЗрдд. рддреБрдореНрд╣рд╛рд▓рд╛ рд╣рд╡реЗ рдЕрд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣реА рдорд▓реНрдЯреАрдореАрдбрд┐рдпрд╛, рднреМрдЧреЛрд▓рд┐рдХ рд╕реНрдерд╛рди рдЗ. рдХрд╕реЗ рдкрд╛рдард╡рд╛рдпрдЪреЗ рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдЧреЛрд╖реНрдЯреА рд╢рд┐рдХреВ рд╢рдХрддрд╛. рдЪрд▓рд╛ рдЖрдордЪреНрдпрд╛ рдмреЙрдЯрд▓рд╛ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░ рддреИрдирд╛рдд рдХрд░реВрдпрд╛. рдорд╛рдЭреНрдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рд╕рд╛рдареА, рдореА Heroku рдирд┐рд╡рдбрд▓реЗ. рдорд▓рд╛ рд╡рд╛рдЯрддреЗ рдХреА рд╣реЗ рд╕реНрд╡рддрдГрдЪреЗ CLI рд╕рд╣ рдПрдХ рд╕реЛрдпреАрд╕реНрдХрд░ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рдЖрд╣реЗ. рд╣реЗ рд╡рд┐рдирд╛рдореВрд▓реНрдп рдЖрд╣реЗ, рдкрд░рдВрддреБ рдпрд╛ рдпреЛрдЬрдиреЗрд╡рд░ рдХреЛрдгрддреНрдпрд╛рд╣реА рд╡рд┐рдирдВрддреНрдпрд╛ рди рдорд┐рд│рд╛рд▓реНрдпрд╛рдирдВрддрд░ рддреБрдордЪрд╛ рдмреЙрдЯ 30 рдорд┐рдирд┐рдЯрд╛рдВрдирдВрддрд░ рд╣рд╛рдпрдмрд░рдиреЗрдЯ рд╣реЛрдИрд▓. рд╡рд┐рдирдВрддреА рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реНрдпрд╛рд╡рд░ рддреЗ рдЬрд╛рдЧреЗ рд╣реЛрдИрд▓. рд╣реЗ рдЗрддрдХреНрдпрд╛ рд▓рд╡рдХрд░ рдШрдбрддреЗ, рддреБрдордЪреНрдпрд╛ рд▓рдХреНрд╖рд╛рддрд╣реА рдпреЗрдгрд╛рд░ рдирд╛рд╣реА (рдЬреЛрдкрд░реНрдпрдВрдд, рдЕрд░реНрдерд╛рддрдЪ, рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рд╣реЛрдд рдирд╛рд╣реА). рдореЛрдлрдд рдпреЛрдЬрдирд╛ 5MB рдбреЗрдЯрд╛рдмреЗрд╕, 100MB рдбрд┐рд╕реНрдХ рд╕реНрдкреЗрд╕, рджрд░рдорд╣рд╛ 2TB рдбреЗрдЯрд╛ рдЖрдгрд┐ 1 рдбрд╛рдпрдиреЛрджреНрд╡рд╛рд░реЗ рдорд░реНрдпрд╛рджрд┐рдд рдЖрд╣реЗ. рдбрд╛рдпрдиреЛ рд╣рд╛ рддреБрдордЪрд╛ рд░рдирд┐рдВрдЧ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд╣реЗ. рдореА рддрд╛рдмрдбрддреЛрдм рдореНрд╣рдгреЗрди рдХреА рддреИрдирд╛рддреАрдореБрд│реЗ рдорд▓рд╛ рдЕрдбрдЪрдгреА рдЖрд▓реНрдпрд╛, рдХрд╛рд░рдг рдореА рдпрд╛рдкреВрд░реНрд╡реА рдХрдзреАрд╣реА рдорд╛рдЭреЗ рдЕрд░реНрдЬ рддреИрдирд╛рдд рдХреЗрд▓реЗ рдирд╡реНрд╣рддреЗ. рдЙрдкрдпреЛрдЬрдирд╛рджрд░рдореНрдпрд╛рди, Heroku рд▓рд╛ Procfile рдирд╛рд╡рд╛рдЪреА рдлрд╛рдИрд▓ (рд╡рд┐рд╕реНрддрд╛рд░ рди рдХрд░рддрд╛) рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЖрдореНрд╣реА рддреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯрдордзреНрдпреЗ рддрдпрд╛рд░ рдХрд░рддреЛ. рдЖрдд, рдЖрдореНрд╣реА рд▓рд┐рд╣рд┐рддреЛ worker: sh target/bin/workerBot, рдЬрд┐рдереЗ workerBot рдордзреНрдпреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗрд▓реЗ рдирд╛рд╡ рдЖрд╣реЗ pom.xml. рдП рд╢рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдореЕрд╡реЗрди рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрд╕реЗрдВрдмрд▓рд░ рдкреНрд▓рдЧрдЗрди (appassembler-maven-plugin) рджреНрд╡рд╛рд░реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗрд▓реА рдЬрд╛рдИрд▓. рд╕рдВрдХрд▓рд┐рдд рдЬрд╛рд░ рдлрд╛рдЗрд▓ рдХрд╢реА рд▓рд╛рдБрдЪ рдХрд░рд╛рдпрдЪреА рдпрд╛рдЪреЗ рд╡рд░реНрдгрди рд╕реНрдХреНрд░рд┐рдкреНрдЯрдордзреНрдпреЗ рдЖрд╣реЗ. рд▓рд╛рдБрдЪ рдХрд░рдгреНтАНрдпрд╛рд╕рд╛рдареА рд╡рд░реНрдЧрд╛рдЪреЗ рдирд╛рд╡ <mainClass>рдЖрдгрд┐ рджрд░рдореНрдпрд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЖрд╣реЗ </mainClass>, рддрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдЪреЗ рдирд╛рд╡ <name>рдЖрдгрд┐ </name>рджрд░рдореНрдпрд╛рди рджрд┐рд▓реЗ pom.xmlрдЖрд╣реЗ
...
<build>
    <plugins>
        ...
       <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>appassembler-maven-plugin</artifactId>
            <version>1.1.1</version>
            <configuration>
                <assembleDirectory>target</assembleDirectory>
                <programs>
                    <program>
                        <mainClass>com.home.server.TelegramBot</mainClass>
                        <name>workerBot</name>
                    </program>
                </programs>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>assemble</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рддреБрдореНрд╣реА Heroku рд╡рд░ рдиреЛрдВрджрдгреА рдХрд░рд╛рд╡реА , рдЖрдгрд┐ Git рдЖрдгрд┐ Heroku CLI рджреЛрдиреНрд╣реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛рд╡реЗ . рддреБрдордЪреНрдпрд╛ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рдирд▓рд╛ рдбреЗрдЯрд╛рдмреЗрд╕рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣реА рдирд╡реАрди рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░рддрд╛ рддреЗрд╡реНрд╣рд╛ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдЬреЛрдбрдгреНрдпрд╛рд╕ рд╡рд┐рд╕рд░реВ рдирдХрд╛. рдкреБрдвреЗ, рддреБрдореНрд╣рд╛рд▓рд╛ рддреБрдордЪреНрдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕рд╕рд╛рдареА рд╣реЛрд╕реНрдЯ, рд╡рд╛рдкрд░рдХрд░реНрддрд╛рдирд╛рд╡, рдкрд╛рд╕рд╡рд░реНрдб рдЖрдгрд┐ рдкреЛрд░реНрдЯ рдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рдирдВрддрд░ рддреЗ рддреБрдордЪреНрдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдд рд╕реВрдЪрд┐рдд рдХрд░рд╛. рдкреБрдвреЗ, рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА, Maven рд╡рд╛рдкрд░реВрди рддреБрдордЪрд╛ рдкреНрд░рдХрд▓реНрдк рддрдпрд╛рд░ рдХрд░рд╛ .
mvn clean install
рдкреНрд░рдердо, рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд┐рд░реЗрдХреНрдЯреНрд░реАрд╡рд░ рдЬрд╛рддреЛ рдЖрдгрд┐ рдХрдорд╛рдВрдбрд╕рд╣ рд░реЗрдкреЙрдЬрд┐рдЯрд░реА рд╕реБрд░реВ рдХрд░рддреЛ git init. рдордЧ рдЖрдореНрд╣реА рдЖрдордЪрд╛ рдкреНрд░рдХрд▓реНрдк рдпрд╛ рднрд╛рдВрдбрд╛рд░рд╛рдд рдЬреЛрдбрддреЛ.
git add .
рдордЧ рдЖрдореНрд╣реА рдмрджрд▓ рдХрд░реВ
git commit -m "First commit in the project"
рдкреБрдвреЗ, рддреБрдореНрд╣рд╛рд▓рд╛ heroku рдордзреНрдпреЗ рд╕рд╛рдЗрди рдЗрди рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдХрдорд╛рдВрдб рд▓рд╛рдЗрдирд╡рд░ рдЦрд╛рд▓реАрд▓ рд▓рд┐рд╣рд╛
heroku login
рдиреЛрдВрджрдгреА рджрд░рдореНрдпрд╛рди рддреБрдореНрд╣реА рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реА рдХреНрд░реЗрдбреЗрдиреНрд╢рд┐рдпрд▓реНрд╕ рдПрдВрдЯрд░ рдХрд░рд╛. рддреНрдпрд╛рдирдВрддрд░, heroku рд╡рд░ рддреБрдордЪреНрдпрд╛ рднрд╛рдВрдбрд╛рд░рд╛рдЪреА URL рдирд┐рд╢реНрдЪрд┐рдд рдХрд░рд╛. рддреБрдореНрд╣реА рд╣реЗ рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдордзреНрдпреЗ рдХрд░рд╛. рдордЧ рдЖрдореНрд╣реА рд▓рд┐рд╣рд┐рддреЛ
git remote add heroku [url]
рддреБрдордЪреНрдпрд╛ рднрд╛рдВрдбрд╛рд░рд╛рд╕рд╛рдареА рд░рд┐рдореЛрдЯ рд╣рд┐рд░реЛрдХреВ рд░реЗрдкреЙрдЬрд┐рдЯрд░реА рдЬреЛрдбрд▓реА рдЖрд╣реЗ. рдкреБрдвреЗ рдЖрдкрдг рд▓рд┐рд╣рд┐рддреЛ
git push heroku master
рдордЧ рдЖрдкрдг рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛... рдЬрд░ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╢рд╕реНрд╡реАрд░рд┐рддреНрдпрд╛ рддреИрдирд╛рдд рдЭрд╛рд▓реЗ, рддрд░ рдЦрд╛рд▓реАрд▓ рдХрдорд╛рдВрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рд╛
heroku ps:scale worker=1
рдЖрдгрд┐ рддреЗрдЪ, рддреБрдордЪрд╛ рдЕрд░реНрдЬ рдЪрд╛рд▓реВ рдЖрд╣реЗ. рддрд╕реЗ рдирд╕рд▓реНрдпрд╛рд╕, рд▓реЙрдЧ рдХрд╛рд│рдЬреАрдкреВрд░реНрд╡рдХ рдкрд╣рд╛. рдмрд╣реБрдзрд╛, рддреБрдордЪреНрдпрд╛ рдЕрд░реНрдЬрд╛рддреАрд▓ рддреНрд░реБрдЯреАрдореБрд│реЗ рддреЛ рдЕрдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓рд╛ рдЖрд╣реЗ. рдЗрддрдХрд╛ рдореЛрдард╛ рд▓реЗрдЦ рд╡рд╛рдЪрд▓реНрдпрд╛рдмрджреНрджрд▓ рдзрдиреНрдпрд╡рд╛рдж. рдорд▓рд╛ рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА рдХреЛрдгрд╛рд▓рд╛рддрд░реА рддреЗ рдЙрдкрдпреБрдХреНрдд рд╡рд╛рдЯреЗрд▓ рдЖрдгрд┐ рд╡рд┐рдХрд╛рд╕рд╛рджрд░рдореНрдпрд╛рди рдЬреНрдпрд╛ рдХреНрд╖реЗрддреНрд░рд╛рдВрдиреА рдорд▓рд╛ рддреНрд░рд╛рд╕ рджрд┐рд▓рд╛ рддреНрдпрд╛ рдХреНрд╖реЗрддреНрд░рд╛рдд рддреБрдордЪрд╛ рдмрд░рд╛рдЪ рд╡реЗрд│ рд╡рд╛рдЪреЗрд▓.
рдЯрд┐рдкреНрдкрдгреНрдпрд╛
  • рд▓реЛрдХрдкреНрд░рд┐рдп
  • рдирд╡реАрди
  • рдЬреБрдиреЗ
рдЯрд┐рдкреНрдкрдгреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рд╕рд╛рдИрди рдЗрди рдХреЗрд▓реЗрд▓реЗ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ
рдпрд╛ рдкрд╛рдирд╛рд╡рд░ рдЕрдЬреВрди рдХреЛрдгрддреНрдпрд╛рд╣реА рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдирд╛рд╣реАрдд