doo provides a way to synchronize doo entities to external systems using webhooks. Webhooks are user-defined HTTP callbacks. Each time an entity is changed will call the respective endpoint of the external system.
Webhooks configurations will be attached to an entire organization with all its events. The payload of event and order webhooks will contain the event_id so you can decide which webhooks to process.
Basic webhook flow
A user creates/edits/remove an entity in doo, which fires one or more triggers
For each trigger, if an external webhook endpoint has been configured
doo authenticates with the external authorization endpoint to retrieve an access token (optional)
doo sends a POST request (optionally authorized) to the external endpoint with the entity in a payload
external system processes webhook payload as required
Typical system setup
A typical integration scenario consists of the customer's Content Management System (CMS), which uses doo widgets to enable attendees to book, and the customer's Customer Relationship Management (CRM) as an external system, which provides endpoints for doo webhooks (authorization, event, and order).
2. Setup guide
If webhooks are part of your doo package, please follow the checklist below and provide the necessary details to your operational doo counterpart or to email@example.com:
(optional) we will provide you a test account and set up webhooks with an https://requestb.in integration (or any other similar service). In this way, you will be able to check how the webhooks work and see all the real payload from them
Implement OAuth endpoint to secure your endpoints and allow doo to authorize with your system before sending webhooks (optional, more)
Provide OAuth endpoint URL (<external_oauth_endpoint_url>)
Implement endpoints to receive webhook payload for each needed entity and trigger (more)
Provide a list of required triggers and endpoint URLs for them (e.g. <trigger_name> - <external_webhook_endpoint_url>)
3. Technical specification
3.3. Webhook endpoints (to be provided by an external system)
Curl example of the webhook HTTP POST request to external endpoint:
OrdersIdGetResponse model → order_details → buyer_answers answers to booker-level event questions
OrdersIdGetResponse model → order_details → attendees details such as first_name, last_name, email etc
OrdersIdGetResponse model → order_details → attendees → answers answers to attendee-level event questions
If you have an event with only booker-level questions (and no attendee-level questions), all details and answers will be returned in "order_details" and "buyer_answers". "order_details → attendees" will be empty except for an "id", "status" and a "ticket" object.
If you want to retrieve the answer of a buyer or an attendee to a specific question, look for the answer object with the relevant "question" value (string-match the question value)