DEV Community

Cover image for Introducing Convoy
Subomi Oluwalana for Convoy

Posted on • Updated on

Introducing Convoy

Hi dev.to, I’d like to show you Convoy.

Sample Instance UI

Convoy is an open-source webhooks service. You can think of it as a swiss army knife for publishing webhook events. Few months ago, I was building a Fintech API and I was looking around for a tool to push webhooks events. I wanted something simply, ease-to-use, language-agnostic, and cloud-native. Ideally, I wanted a container I could deploy, publish events to it, and it reliably publishes events to the endpoints. I couldn’t find a such a tool, so we built it. Convoy exposes a REST API to register endpoints, and publish events to respective endpoints.

Webhook Issues

On the surface, webhooks isn't simply HTTP Push. There exist several naunces and some use-cases needed for some type of integrations. I'd like to talk about a few:

  • Bad Endpoints

    Publishing webhooks requires you to deal with several poorly designed endpoints, endpoints that respond with large payload sizes, endpoints that hang unending and eventually timeout, some other endpoints have expired certificates. A good webhook system will provide visibility into these issues for both publishers and consumers.

  • Delivery Attempt Logs

    Building against webhooks can be non-trival for developers at times. Developers often times, use ngrok to pipe events to their local machine to debug several things; signing payload, parsing payload structure, responding with a 200 status code fast, monitoring successful retries, testing url per events. Building a great webhooks delivery system requires building a delivery attempt log showing what was sent vs. what was returned.

  • Delayed Job Implementation.

    Because webhooks is inherently an asynchronous activity, It needs an underlying resilient job/task queuing system to account for scalability, retries for transient & non-transient failures of events. A standard webhooks delivery system is an implementation over a job queuing system (e.g. redis, kafka, rabbit, nats etc) to provide such features.

  • Security

    Publishing webhook events with HTTP requires consumers to secure their endpoints from malicious users. Consumers need to know who is posting and if they're authorized to post events. Several consumers have several layers of security: Signing payload with a shared secret (common), Static IPs (common in fintech), Mutual TLS (found in PagerDuty). Essentially, a good webhook delivery system needs to support all forms of security depending on what respective consumers require.

  • URL per Events.

    In this age of no-code tools, and serverless functions. It is common for developers to receive webhook events from a provider (e.g. Stripe) and fan-out to several apps behind the scene to perform any desired action. Stripe, as an example provides first-class support for this where users can subscribe an endpoint to specific events, but isn't found in many other applications. A good webhook delivery system should provide first-class support for URL per events.

It is all this fragmented implementations of webhooks, we are trying to solve with Convoy.

Getting Started

To get started you can head over to https://getconvoy.io/docs/guide and follow the step by step guide to running Convoy on your local machine.

Conclusion

We believe we're still very early in abstracting the fragmented implementations of webhooks into Convoy, but we're happy to share our progress so far and invite to you be a part of our community

You can join our slack community here

We can’t wait to hear your feedback!

Top comments (6)

Collapse
 
leankhan profile image
LeanKhan

Awesome! Was trying to do something like and called it errand boy. So you send your webhook requests to the Convoy endpoint, then Convoy dispatches them to your app? Is that correct?

Collapse
 
subomioluwalana profile image
Subomi Oluwalana

Haha. Nice name.

No, Convoy doesn't work for receiving webhook events. It works for publishing them your user's apps. So push webhook events to Convoy's REST API. Convoy signs the payload and forwards the events to your user's endpoint. If it fails, it automatically retry it with the configured retry mechanism.

Collapse
 
leankhan profile image
LeanKhan

Thanks for explaining. I understand

Thread Thread
 
subomioluwalana profile image
Subomi Oluwalana

You're welcome!

Collapse
 
danvixent profile image
Daniel Oluojomu

Hi. @leankhan, Convoy now supports receiving webhook events! Check out version 0.6.0 and the docs.

Collapse
 
leankhan profile image
LeanKhan • Edited

Thanks for the update! Will try to try it out