== Camel Example Webhook

This example shows the webhook meta-component in action using one of the supported components: telegram.

The example starts up a spring-boot application that configures automatically a webhook using the Telegram API to point to the local application and
waits for messages.

=== Setting up a Telegram Bot

Creating a Telegram Bot is the first step for running this demo. You need to follow the instructions at
the link:https://core.telegram.org/bots#3-how-do-i-create-a-bot[Telegram Bot developers home].

When a new Bot is created, the link:https://telegram.me/botfather[BotFather] provides an
**authorization token** corresponding to the Bot. The authorization token is a mandatory parameter
for the camel-telegram endpoint and should be put in the `application.properties` file of the example application.

The full property should look like:

----
camel.component.telegram.authorization-token=<put-here-your-token>
----

=== Setting up a webhook tunnel

In order to use this example from a standard workstation machine, you need it to be exposed to the internet, for the Telegram servers to be
able to contact it. Moreover, Telegram requires that the endpoint is exposed using *HTTPS*.

The best way to expose your workstation through a internet HTTPS endpoint is using some tunneling tool, like link:https://serveo.net/[Serveo].
A more popular option is link:https://ngrok.com/[Ngrok] but HTTPS endpoints currently require a paid subscription.

With Serveo, you can run in a terminal the following command:

----
ssh -R 80:localhost:8080 serveo.net
----

Your ssh client will print in the console a message like the following:

----
Hi there
Forwarding HTTP traffic from https://xxx.serveo.net
----

Take note of the URL that is returned and place it in the `application.properties` file of the example.

The full property should look like:

----
camel.component.webhook.configuration.webhook-external-url=https://the-subdomain-returned.serveo.net
----

=== Running the example

Now that everything is set up, you can run the example using

----
mvn spring-boot:run
----

You can now contat your bot using a Telegram client and you'll see all your messages printed in the console.

What's interesting to notice is that in this example, *the Telegram component is not doing any long polling** to the Telegram API, it's just receiving *push notifications*.

=== Help and contributions

If you hit any problem using Camel or have some feedback, then please
https://camel.apache.org/support.html[let us know].

We also love contributors, so
https://camel.apache.org/contributing.html[get involved] :-)

The Camel riders!
