Skip to main content

Webhook Node


A Webhook Node is used when your application needs to make a dynamic request to an external third-party system and wait for a response.

Typically used in scenarios such as payments, verifications, etc., where the user initiates a task and waits for an external process to complete.

It has three key stages:

  • Request
  • Waiting
  • Completion

Webhook Node Properties​

Request​

This step is implemented using a custom service.

  • Click the dropdown to attach your custom service.

  • Here, the system sends a request to the third-party service.
  • The system automatically generates a callback URL.
  • The callback URL is injected into a special params.callbackUrl key.
  • It is then passed to the external service.

Example Custom Service:​

Note: The third-party system is expected to call this URL once it has completed its process.

  • The payload/data sent along with the request can use session variables or other dynamic values.

Waiting​

During this stage, the user is shown a waiting screen.

  • Click the dropdown to attach your waiting screen form.

  • It’s used for UI/UX purposes — to indicate the system is awaiting a response.
  • The user will not be able to move the process back or forward during the waiting stage.

Completion​

  • Click the 'Webhook Handler' dropdown to attach your custom service.

  • The third-party calls back using the callback URL.
  • The platform then invokes a custom service to process this incoming response.

Process:​

  • Authenticates the caller.
  • Validates the incoming data (params.response contains the incoming data).
    • If the service executes successfully, the journey proceeds.
    • If the service fails (i.e., throws an error), the journey halts.

Email Notification (Private Flows Only)​

If users are expected to wait a long time for a response, you can send them a journey resume link via email.

  • Set the Subject and Body of the email here.

If the customer's emailId is available, an email with a special placeholder ${soloResumeLink}(dynamically replaced with a link) can be sent, to let them resume the journey.