# Webhook

{% hint style="info" %}
Available on the **PREMIUM** plan and above
{% endhint %}

Webhooks are used to listen to events occurring on a third-party app.&#x20;

It is most commonly used for use cases like payment collection, where the chatbot waits for the third-party payment processor to call the webhook once payment is received.

<figure><img src="https://360969599-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsrMxU8nO3RjusUiYuXBB%2Fuploads%2F5KL76Hk9HvK6SaCp2hrL%2FCleanShot%202024-06-20%20at%2018.22.31.png?alt=media&#x26;token=4fc9b403-2e2f-4a24-84f6-d22c91623607" alt=""><figcaption></figcaption></figure>

## Endpoint

Set this webhook endpoint on the application that will publish the event.&#x20;

When invoking this endpoint, it is mandatory to return the `conversation_key` as part of the response payload; if it is not present, our systems will not consider it a successful response.

You can use the variable **Conversation URL** to extract the conversation\_key value from it.

Use a javascript action block before using the webhook block with this code.

```
const conversation_url = "Conversation URL";

// Function to extract the conversation key from the URL
function getLastPartOfUrl(url) {
    // Split the URL by slashes
    const parts = url.split('/');

    // Return the last part
    return parts[parts.length - 1];
}

// Retrieve the conversation key from the URL
const conversation_key = getLastPartOfUrl(conversation_url);

// Sets the conversation key into a new variable
wn.setConversationVariable("conversation_key", conversation_key);

// This variable will be used to push the conversation_key to the third-party app.
```

## Timeout

The chat flow will wait for this webhook call for the specified duration.&#x20;

If the webhook is not invoked in the given timeframe, the chat flow will proceed in the <mark style="background-color:red;">FAILURE</mark> flow.

{% hint style="info" %}
Set the duration between 1 and 300 seconds.
{% endhint %}

## Response

When a webhook response is received, you can map the fields that are to be saved into variables.&#x20;

{% hint style="info" %}
You can map a maximum of 50 variables.
{% endhint %}
