demavair
@demavair

Telegram Bot Java — как заставить работать бота через Webhook?

Доброго времени суток.Я создаю телеграм бота на java с помощью rubengulas api. И у меня никак не получается настроить webhook.
Я знаю что для вебхука существуют следующие правила,указанные в официальной документации телеграма:

*Supports IPv4, IPv6 is currently not supported for Webhooks.

*Accepts incoming POSTs from 149.154.167.197-233 on port 443,80,88 or 8443.

*Is able to handle TLS1.0+ HTTPS-traffic.

*Provides a supported, non-wildcard, verified or self-signed certificate.

*Uses a CN or SAN that matches the domain you’ve supplied on setup.

*Supplies all intermediate certificates to complete a verification chain.

У меня есть домен с верифицированным сертификатом.Сервер прослушивает 443 порт и принимает post запросы с адресов 149.154.167.197-233.
Я использую вот этот метод rubengulas api для создания Telegram api

private static TelegramBotsApi createNoSelfSignedTelegramBotsApi() throws TelegramApiException {
        return new TelegramBotsApi(
               "src/main/resources/server.jks",//path to KeyStore for the server 
               "myPassword",                   //Key store password for the serve
               "https://example.com:443",      //External url
               "https://localhost:443");       //Internal url
    }

я получил .jks файл с помощью следующих команд из Pem файлов действующего на сервере сертификата:

openssl pkcs12 -export -in mydomain.net.crt -inkey mydomain.key > keypair.p12
keytool -importkeystore -srckeystore keypair.p12 -destkeystore server.jks -srcstoretype pkcs12

Бота я запускал следующим образом:

ApiContextInitializer.init();
    TelegramBotsApi botsApi = new TelegramBotsApi(
                           "src/main/resources/server.jks",
                           "mypassword",
                           "https://example.com:443",
                           "https://localhost:443");
   BotHook webhookBot = new BotHook(options);
   botsApi.registerBot(webhookBot)

Телеграм api создает http сервер гризли, который при старте бота пишет следующее:

Jul 28, 2018 3:27:59 PM org.glassfish.grizzly.http.server.NetworkListener start

INFO: Started listener bound to [localhost:443]

Jul 28, 2018 3:27:59 PM org.glassfish.grizzly.http.server.HttpServer start

INFO: [HttpServer] Started.

При самом запуске программы больше ошибок нет. А вот в логах сервера я увидел следующую ошибку

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: mydomain.net request: 
"POST /callback/WebhookClass HTTP/1.1", host: "mydomain.net"

Выглядит так что мой post запрос не может обработаться из-за неправильно указанного url к вебхуку. Но я не понимаю какой url нужно указать, поскольку бот собирается в jar архив ,
и класс обрабатывающий вебхук находится в нем.Пожалйста подскажите.
  • Вопрос задан
  • 3278 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы