Подключение к телеграмму через Telegram Api

123
13 октября 2019, 00:30

создал бота, начал использовать telegram api проект собирается при помощи maven докинул зависимость

<dependency>
     <groupId>org.telegram</groupId>
     <artifactId>telegrambots</artifactId>
     <version>3.5</version>
</dependency>

Далее частично реализовал методы onUpdate , getBotUsername и getBotToken

@Override
    public void onUpdateReceived(Update update) {
        if(update.hasMessage() && update.getMessage().hasText()){
            SendMessage message = new SendMessage().setChatId(update.getMessage().getChatId());
            Message msg = update.getMessage();
            String text = "";
            message.setText(text);
        }
        else if(update.hasCallbackQuery()){
        }
    }
    @Override
    public String getBotUsername() {
        return "name";
    }
    @Override
    public String getBotToken() {
        return "token";
    }

в методе main

ApiContextInitializer.init();
        TelegramBotsApi telegramBotsApi = new TelegramBotsApi();
        try {
            telegramBotsApi.registerBot(new ConnectToTelegramm());
        } catch (TelegramApiRequestException e) {
            e.printStackTrace();
        }

и после этого выскакивает ошибка

фев 17, 2019 8:20:34 AM org.apache.http.impl.execchain.RetryExec execute
INFO: I/O exception (java.net.SocketException) caught when processing request to {s}->https://api.telegram.org:443: Connection reset
фев 17, 2019 8:20:34 AM org.apache.http.impl.execchain.RetryExec execute
INFO: Retrying request to {s}->https://api.telegram.org:443
фев 17, 2019 8:20:35 AM org.apache.http.impl.execchain.RetryExec execute
INFO: I/O exception (java.net.SocketException) caught when processing request to {s}->https://api.telegram.org:443: Connection reset
фев 17, 2019 8:20:35 AM org.apache.http.impl.execchain.RetryExec execute
INFO: Retrying request to {s}->https://api.telegram.org:443
фев 17, 2019 8:20:35 AM org.apache.http.impl.execchain.RetryExec execute
INFO: I/O exception (java.net.SocketException) caught when processing request to {s}->https://api.telegram.org:443: Connection reset
фев 17, 2019 8:20:35 AM org.apache.http.impl.execchain.RetryExec execute
INFO: Retrying request to {s}->https://api.telegram.org:443
org.telegram.telegrambots.exceptions.TelegramApiRequestException: Error executing setWebook method
    at org.telegram.telegrambots.bots.TelegramLongPollingBot.clearWebhook(TelegramLongPollingBot.java:55)
    at org.telegram.telegrambots.TelegramBotsApi.registerBot(TelegramBotsApi.java:120)
    at Bots.main(Bots.java:15)
Caused by: java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:210)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
    at sun.security.ssl.InputRecord.read(InputRecord.java:503)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:396)
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:355)
    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:359)
    at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
    at org.telegram.telegrambots.bots.TelegramLongPollingBot.clearWebhook(TelegramLongPollingBot.java:43)
    ... 2 more

Подскажите, что я делаю не так?

Answer 1

Ваш бот не имеет доступа к api.telegram.org. Скорей всего это связано с блокировкой доступа к телеграмм на территории РФ. Для обхода блокировки можно использовать http прокси на уровне клиента: Using Http Proxy В случае если ваш бот расширяет TelegramLongPollingBot, то добавьте ему конструктор с DefaultBotOptions

    public ConnectToTelegramm(DefaultBotOptions options){
        super(options);
    }

После чего, в вашем методе main создавайте бота с найтройками:

        ApiContextInitializer.init();
        TelegramBotsApi telegramBotsApi = new TelegramBotsApi();
        try {
            // Авторизация бота в прокси, после создания будет использоваться автоматически
            Authenticator.setDefault(new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(PROXY_USER, PROXY_PASSWORD.toCharArray());
                }
            });
            // Создаем экземпляр настроек
            DefaultBotOptions botOptions = ApiContext.getInstance(DefaultBotOptions.class);
            // Устанавливаем настройки прокси
            botOptions.setProxyHost(PROXY_HOST);
            botOptions.setProxyPort(PROXY_PORT);
            // Выбираем тип прокси: [HTTP|SOCKS4|SOCKS5] (по умолчанию: NO_PROXY)
            botOptions.setProxyType(DefaultBotOptions.ProxyType.SOCKS5);
            telegramBotsApi.registerBot(new ConnectToTelegramm(botOptions));
        } catch (TelegramApiRequestException e) {
            e.printStackTrace();
        }

Так же можно использовать socks прокси. Его поддержка была добавлена в данном PR: https://github.com/rubenlagus/TelegramBots/pull/451

Answer 2

Сталкивался с этой проблемой. Telegram заблокирован в РФ :/
Используйте VPN или Proxy.

READ ALSO
Как перевести результат вычисления double в понятный формат?

Как перевести результат вычисления double в понятный формат?

входящие данные Числа типа double 20 000 000 общая сумма

130
Что делает обьект типа стринг с массивом

Что делает обьект типа стринг с массивом

Вы этом коде все понимаю кроме этого

147
Как получить значений из объекта в java [закрыт]

Как получить значений из объекта в java [закрыт]

Как получить самую старую книгу?

128
Как хранить малый обьем данных в Java?

Как хранить малый обьем данных в Java?

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

108