TelegramBots
TelegramBots copied to clipboard
Example for AbilityWebHookBot.
Hi I'm trying to make serverless bot, and I can't use standard long polling. I can't configure webhook bot. Can someone help with example?)
I've already tried to launch it with ngrok locally, and I see, that telegram sends post requests. But bot didn't handle it.
I'm using spring boot, and ability version of bot.
Thank you for help)
I found concrete problem, but I don't know how to fix it.
public void registerBot(WebhookBot bot) throws TelegramApiRequestException {
if (useWebhook) {
webhook.registerWebhook(bot);
bot.setWebhook(externalUrl + bot.getBotPath(), pathToCertificate);
}
}
Even after I've extended from AbilityWebhookBot, useWebhook still false and it's not register it at all
Maybe it's late but i will leave an usage example:`
AbilityWebhookBot bot = new MyAbilityWebhookBot();
try {
Webhook webhook = new DefaultWebhook();
//this is the URL where the application will receive requests
webhook.setInternalUrl("http://0.0.0.0:8081/");
TelegramBotsApi botsApi = new TelegramBotsApi(DefaultBotSession.class, webhook);
SetWebhook setWebhook = new SetWebhook();
//this is the public URL accessed by Telegram servers
//it must be reverse proxied to the internalUrl if they are different
setWebhook.setUrl("https://public.domain.com/");
botsApi.registerBot(bot, setWebhook);
} catch (TelegramApiException e) {
e.printStackTrace();
}
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
try {
System.out.println("Removing the webhook...");
WebhookUtils.clearWebhook(bot);
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
});
`
Maybe it's late but i will leave an usage example:`
AbilityWebhookBot bot = new MyAbilityWebhookBot(); try { Webhook webhook = new DefaultWebhook(); //this is the URL where the application will receive requests webhook.setInternalUrl("http://0.0.0.0:8081/"); TelegramBotsApi botsApi = new TelegramBotsApi(DefaultBotSession.class, webhook); SetWebhook setWebhook = new SetWebhook(); //this is the public URL accessed by Telegram servers //it must be reverse proxied to the internalUrl if they are different setWebhook.setUrl("https://public.domain.com/"); botsApi.registerBot(bot, setWebhook); } catch (TelegramApiException e) { e.printStackTrace(); } Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { try { System.out.println("Removing the webhook..."); WebhookUtils.clearWebhook(bot); } catch (TelegramApiException e) { e.printStackTrace(); } } });
`
Thanks to your code I managed to successfully initialize a Webhook bot.
Keep in mind that the updates will be received at https://public.domain.com/callback/{botPath}
, where botPath
is the one defined into the class extending TelegramWebhookBot
.
However, even though the library defines the enpoint for handling the web hook updates, it did not work for me. So I had to define my POST request handler for /callback/{botPath} and "manually" call onWebhookUpdateReceived
method.