Skip to content

CheremisinVlad/webhookBot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

webhookBot

Первым делом мы инициализируем контекст api

ApiContextInitializer.init();

На этом этапе происходит два события

1.Мы регистрируем ссесию для лонгполлинг и вебхука

public static void init() 
      {
          ApiContext.register(BotSession.class, DefaultBotSession.class);//longpolling          
          ApiContext.register(Webhook.class, DefaultWebhook.class);
      }

2.При этом срабатывает этот метод класса ApiContext

public static <T, S extends T> void register(Class<T> type, Class<S> implementation) 
    {
        if (bindings.containsKey(type)) 
        {
            BotLogger.debug("ApiContext", MessageFormat.format("Class {0} already registered", type.getName()));
        }
        bindings.put(type, implementation);
    }

Который складывает интерфейс и его реализацию в мапу

private static Map<Class, Class> bindings = new HashMap<>();

Из которой в дальнейшем мы можем получать нужную реализацию для вебхука или лонгполлинга.

Далее мы создает Api telegram( по сути поднимаем гриззли,который будет обрабатывать поступающие от телеграмм POST запросы)

try
{
    botsApi = new TelegramBotsApi(
            "src/main/resources/myDomain.net.jks",
            "myPassword",
            "https://myDomain.net:443",
            "https://217.0.0.1:443");
} catch (TelegramApiRequestException e)
{
    BotLogger.error(LOGTAG,e);
}

Когда мы создаем объект класса TelegramBotsApi в конструкторе происходит настройка вебхука и старт гризли сервера

public TelegramBotsApi(String keyStore, String keyStorePassword, String externalUrl, String internalUrl) throws TelegramApiRequestException {
        if (externalUrl == null || externalUrl.isEmpty()) {
            throw new TelegramApiRequestException("Parameter externalUrl can not be null or empty");
        }
        if (internalUrl == null || internalUrl.isEmpty()) {
            throw new TelegramApiRequestException("Parameter internalUrl can not be null or empty");
        }
        if (keyStore == null || keyStore.isEmpty()) {
            throw new TelegramApiRequestException("Parameter keyStore can not be null or empty");
        }
        if (keyStorePassword == null || keyStorePassword.isEmpty()) {
            throw new TelegramApiRequestException("Parameter keyStorePassword can not be null or empty");
        }

        this.useWebhook = true;
        this.extrenalUrl = fixExternalUrl(externalUrl);
        webhook = ApiContext.getInstance(Webhook.class);// достаем вебхук из мапы bindings
        webhook.setInternalUrl(internalUrl);
        webhook.setKeyStore(keyStore, keyStorePassword);
        webhook.startServer();
    }

Дальше мы создаем нашу реализацию вебхука и регестрируем ее

WebhookBot bot = new WebhookBot();
        try
        {
            botsApi.registerBot(bot);

        } catch (TelegramApiRequestException e)
        {
            BotLogger.error(LOGTAG,e);
        }

При запуске этого кода Гриззли пишет что умпешно стартовал. Но бот не работает. Ошибку я нашел только в логах сервера.

2018/07/29 15:08:43 [error] 1166#1166: *453 openat() "/var/www/www->root/data/www/mydomain.net/callback/WebhookClass failed (2: No such file or directory), client: 149.154.167.227, server: example.net request: "POST >/callback/WebhookClass HTTP/1.1", host: "mydomain.net"

Приложение я собираю в jar with dependencies и запускаю на сервере ubuntu 16.04 командой java -jar

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages