Under Community Review

Add Webhooks

A number of CMS, and other Enterprise systems, I'm working with have access to Webhooks. We've been asked by more than one client now about the possibility of using webhooks (as opposed to having to write and deploy extensions) to be informed on activities such as 

publishing/unpublishing

creating content of a specific type

updates to schemas

  • From an RFP that I just received: "Currently webhook call outs to other services are used when many categories of content are created or changed. These would need to continue. There also needs to be an interface available to set up and maintain the webhooks without the need for an interaction with the Software Development team. If that tagging system could enforce our best practices SOP for content creation that would be ideal."

  • Webhooks would be great!

    This is what I would imagine:

    1. Definition of a Webhook
    ===================================
    In the Access Manager you would be able to set up the definition of the Webhook. I'm thinking that this would be the right place because this is the same place where you set up security tokens for your apps etc... Settings for the Webhook include:
    a. URL
    b. Timeout
    c. Security
    d. Headers
    e. Error Definitions (Response Code, Message, etc..)

    2. Associate a Webhook with a Schema
    ====================================
    In a tab in the Schema, you can associate one or more Webhooks with the Schema using these options:
    a. When:
    i. OnNew = When a new component is created based on the Schema
    ii. OnSave = When a component is saved
    iii. OnDelete = When a component is deleted
    iv. OnButton = While editing a component, a button could be pressed and the Webhook would be triggered

    b. Error:
    i. On Error Continue or Stop processing

    c. Contexts to Send (as JSON) in request payload
    i. Component (current field values)
    ii. User (username, groups)
    iii. Publication Context (name/id)

    d. What to do with Webhook response
    i. Y/N - Modify Component with Webhook response


    3. Associate a Webhook with a Publication
    ==========================================
    In a tab on the Publication, allow one or more Webhooks to be associated with the publication process:
    a. What:
    i. Component based on a specific schema
    ii. Page

    b. When:
    i. Prior to Attempting to Publish
    ii. After Successful Publish
    iii. After Successful Unpublish

    Other options (Error, Contexts, Response) similar to Schema.

    Use Cases
    ==================
    "I want to set the Review Date of my Article to 6 months from today." -> OnNew Webhook on the Schema

    "Lookup product information based on the value that I have in the SKU field." -> OnButton Webhook on the Schema

    "Do a mandatory 508 compliance check on my component when I save." -> OnSave Webhook on the Schema

    "Push a message to our Slack channel when a page has been published to a Preview site." -> Publish Page Webhook.

    "Update ZenDesk/ServiceNow Help Desk articles when a new help article has been published." -> Publish Component Webhook.

    "Make a 'Ticker Tape' (ie: custom log) of all transactions on a particular type of component." -> OnSave, OnDelete Webhooks on the Schema.

    I realize that some of these cases can already be addressed with Workflow/Custom Deployers. However I do think that making it this functionality more transparent and readily available will bring great value and will help me demo!

  • This, yes, the first.

    The webhook should do either a POST or a GET to a user \-entered URL, and it should be associated with a selected event and a selected tcm-id.  In the body of the request it should include a JSON payload with at least the event details and the associated tcm-id.

    Bonus points for making the payload more configurable, but many times a webhook is just about making the event known.

  • Is the idea about giving certain CMS users the ability to enter or configure the webhook URLs that the Content Manager should ping during those activities? Or is this in the other direction?