Use Webhooks
This tutorial assumes that fluvio
is installed, and logged-in to InfinyOn Cloud. Follow the Quick Start to get set up.
Webhooks are special connectors with an associated external url. Users can send data to their topics via a HTTP POST
request.
Webhook Configuration
The webhook configuration file has the following structure:
meta:
name: my-webhook # required
topic: my-webhook # required
logLevel: debug # default: info, options: [trace, debug, info, warn, error]
secrets:
- name: my-key
producer:
linger: 100ms
batch-size: 1mb
compression: snappy # default: none, options: [none, gzip, snappy, lz4, zstd]
webhook:
outputParts: full # default: body, options: [full, body]
outputType: json # default: text, options: [text, json]
outputUri: full # default: none, options: [full, none, path, query]
transforms:
- uses: infinyon/jolt@x.y.z
with:
key: ${{ secrets.my_key }}
The minimum configuration has needs the top 2 required fields: name
and topic
. The name
is the name of the webhook, and the topic
is the topic that the webhook will publish to.
Create a simple Webhook
Let's create an example configuration file
# example-webhook.yaml
meta:
name: my-webhook
topic: my-webhook-topic
Add a webhook to InfinyOn Cloud
$ fluvio cloud webhook create --config example-webhook.yaml
Your output should look similar to this. We'll cover sending data to this url.
Webhook "my-webhook" created with url: https://infinyon.cloud/webhooks/v1/[random string]
If you need this url again, you can run this command to list your webhooks, and their urls.
$ fluvio cloud webhook list
Example output
NAME TOPIC URL
my-webhook my-webhook-topic https://infinyon.cloud/webhooks/v1/[random string]
Send data to webhook
We'll be sending json data {"key": "value"}
to our webhook using curl
. Replace the url so [random string]
matches your unique url. Keep this command close because we'll refer to this example curl command later.
$ curl -v -X POST -d 'Hello World!' https://infinyon.cloud/webhooks/v1/[uri-key]
In another terminal, star a consumer that reads form the beginning:
$ fluvio consume my-webhook-topic -B
We should see the following output:
Hello World!
Create a JSON Webhook and embed HTTP parts
Next we'll send json records, but before we do that we'll modify outputParts
, outputType
, and outputUri
in the example-webhook.yaml
configuration file:
# example-webhook.yaml
meta:
name: my-webhook
topic: my-webhook-topic
webhook:
outputParts: full
outputType: json
outputUri: full
Run this command to update your webhook.
$ fluvio cloud webhook update --config example-webhook.yaml
Webhook "my-webhook" updated
Let's restart the consumer to a JSON formatter:
$ fluvio consume my-webhook-topic -O json
Run another curl with a json
payload:
$ curl -v -X POST -H "Content-Type: application/json" -d '{"key": "value"}' https://infinyon.cloud/webhooks/v1/[uri-key]
The consumer should now show the following output:
{
"body": {
"key": "value"
},
"headers": {
"accept": "*/*",
"accept-encoding": "gzip, br",
"content-length": "16",
"content-type": "application/json",
"host": "infinyon.cloud",
"user-agent": "curl/x.y.z",
"x-forwarded-for": "..."
},
"path": "",
"query": ""
}
Conclusion
You now know how to create and configure the output of Webhooks. Check out the Webhook Config reference to see how to configure other transformations.