Listening to updates using webhooks

A great way of building data-driven apps using Felt is by triggering a workflow whenever something changes on a map, like someone drawing a polygon around an area of interest or updating the details on a pin.

Instead of polling by listing elements, comments or data layers on a fixed interval, a better alternative is to set up a webhook where Felt will send a notification any time a map is updated. This allows you to build integrations on top, such as sending a Slack message or performing calculations for the newly-drawn area.

Requirements

Two things are needed in order to make use of webhooks:

  1. A Felt map which will serve as the basis for the webhook. Updates will be sent whenever something on this map changes.

  2. A webhook URL where the updates will be sent in the form of POST requests.

Generating a new webhook

Workspace admins can set up webhooks in the Webhooks tab of their workspace.

Simply click on Generate new webhook, select a map to listen to changes and paste in a webhook URL where the updates will be sent to.

Setting up an example webhook using Pipedream

Pipedream's RequestBin is an easy way to collect webhook requests and even run custom code as a result.

  1. Create a free Pipedream account

  2. On the left-hand sidebar, navigate to Sources, then click on New source in the top-right corner.

  3. Select HTTP / Webhook, then New Requests (Payload Only), and give your newly-created source a name.

  4. Copy the endpoint URL. It will look like https://XXX.m.pipedream.net

  5. In Felt, navigate to the Webhooks tab of your workspace and click on Create new webhook

  6. Paste the endpoint URL from Pipedream into the Webhook URL text field, select your map in the dropdown and click Create.

To test your webhook:

  1. Navigate to the Felt map that's linked to the webhook

  2. Make any change: add a pin, draw with the marker, change the color of a polygon, update sharing permissions...

  3. Back in Pipedream, verify that new events appear for the new source. The payload should look like this:

{
  "body": {
    "attributes": {
      "type": "map:update",
      "updated_at": "2024-04-29T12:16:46",
      "map_id": "Jzjr8gMKSrCOxZ1OSMT49CB"
    }
  }
}

Last updated