Delivery Approval (Deprecated) (v1)
Validate recipients in your 3rd party system before content gets sent
Since this extension point is being deprecated, this guide will only serve to demonstrate the differences between v1 and v2. Overlap in design / intent / functionality are not documented here
Deprecated
This extension point is currently still usable and we continue to support apps that are already configured with this version. In the future this extension point will no longer be available for new configurations.
Authentication
How can your app validate this call is being made from a valid Seismic user?
This v1 extension point supports a few different methods for authentication, which are controlled via the extension point settings within your app. The details of your Authentication method are include in a header field: "authorization"
Custom Header
This is a hard-coded field that you will receive in the header to validate this request
- Extension configuration fields:
- "Auth Type is either 'basic', 'clientcert', or 'header'"
- Enter "header"
- "When AuthType is set to 'header' enter a header key is required"
* enter any string value
When receiving the call from Seismic the header field: "authorization" contains the value that you've input in the field: "When AuthType is set to 'header' enter a header key is required". - Sample: authorization: "abcd1234"
- "Auth Type is either 'basic', 'clientcert', or 'header'"
Basic Auth
This is hard-coding the user credentials that you will receive in the header to validate this request
- Extension configuration fields:
- "Auth Type is either 'basic', 'clientcert', or 'header'"
- Enter "basic"
- "Basic auth's user name"
- Enter the username to receive
- "Basic auth's password"
* Enter the password to receive
When receiving the call from Seismic the header field: "authorization" contains "Basic "+the base 64 encoded credentials you have input above.
- "Auth Type is either 'basic', 'clientcert', or 'header'"
- Sample: authorization: "Basic dGVzdEVtYWlsQHNlaXNtaWMuY29tOnRlc3RwYXNzd29yZA"
Payload
The payloads between v1 and v2 are nearly identical.
- The v1 extension point is missing the field "appId"
- "extensionPoint" : "delivery-approval-v1"
{
"extensionPoint": "delivery-approval-v1",
"tenantName": "jurassicpark",
"tenant": "2438562c-da5f-4b58-b724-d9d7e22cfbf2",
"occurredAt": "2018-02-04T01:23:17Z",
"data": {
"user": {
"id": "57a0479900-504cb3ab4a1f-626d174d2d"
},
"delivery": {
"type": "email",
"details": {
// these will be different based on delivery type
"containsAttachments": false,
},
"formInformation": {
// anything
},
"recipients": [{
"id": "309ee150-d8ce-40a6-986a-e5efbc109728",
"firstName": "Joe",
"lastName": "Demo",
"emailAddress": "[email protected]",
// context that only applies to this recipient
"context": [{
"systemType": "salesforce",
"systemId": null, // this always null for now
"contextType": "opportunity",
"contextName": "my opportunity",
"contextId": "some identifier",
"fields": {
// flat list of key values configured for this tenant, delivery type, and context type
}
}]
}],
"content": [{
"repository": "doccenter",
"type": "file",
"name": "Brand Values",
"libraryContent": {
"teamsiteId": "b9d85988-17f4-4994-82db-1ea46886046a",
"id": "3c3ffbb2-86ad-44d7-b692-b32c9b743ec7",
"versionId": "94bb9bd9-4e5e-4ee2-99f0-749a9ce422d2"
},
"contentProfileId": "b9d85988-17f4-4994-82db-1ea46886046a",
"contentProfilePath": ["by Industry", "Non-Profit"]
}, {
"repository": "library",
"type": "template",
"name": "Brand Values",
"teamsiteId": "b9d85988-17f4-4994-82db-1ea46886046a",
"id": "b9d85988-17f4-4994-82db-1ea46886046a",
"versionId": "b9d85988-17f4-4994-82db-1ea46886046a"
}, {
"repository": "workspace",
"type": "file",
"name": "Brand Values",
"id": "b9d85988-17f4-4994-82db-1ea46886046a",
"versionId": "b9d85988-17f4-4994-82db-1ea46886046a"
}],
// context that applies to the whole interaction
"context": [{
"systemType": "salesforce",
"systemId": null, // this always null for now
"contextType": "opportunity",
"contextName": "my opportunity",
"contextId": "some identifier",
"fields": {
// flat list of key values configured for this tenant, delivery type, and context type
}
}]
},
"clientDetails": {
"sessionId": "",
"ipAddress": "74.62.18.18",
"productArea": "doccenter",
"deviceType": "pc",
"browser": "chrome",
"browserVersion": "",
"operatingSystem": "windows",
"operatingSystemVersion": "",
"locale": ""
}
}
}
How to configure
Configure the UI Extension Point
- From your app settings within App Registration, navigate to the Extension Points page
- Click +Add
- Select Delivery Approval (Deprecated) from the list
- Fill out the fields
- Extension Instance Name - A Name that references this usage of this extension point within your app
- The URL of the Delivery Approval Consent Provider - The URL that we will post the payload to
- Auth Type - supports a value of 'basic', 'clientcert', or 'header'
- Basic auth's user name - when using 'basic' auth type, provide the user name to be used in conjunction with this functionality
- Basic auth's password - password for the user provided in 'Basic auth user name'
- When AuthType is set to 'header' enter a header key is required - this is for the Custom header authorization described above
- Click Save Changes
Enable the DeliveryApprovalV2 Extension Point
- After your extension point is created and saved, enable it by clicking the slider under Extension Points > Is Enabled?
- Click Save Changes
Security & Authentication
It is recommended that you validate the Signing Secret in the POST request that Seismic is making to your URL.
v2 Changelog
The v1 Delivery Approval extension supported a custom header and basic auth modes. These have been retired in favor of the Signing Secret auth pattern
Payloads
Outbound payload from Seismic to your endpoint
{
"extensionPoint": "delivery-approval-v2",
"tenantName": "jurassicpark",
"tenant": "2438562c-da5f-4b58-b724-d9d7e22cfbf2",
"occurredAt": "2018-02-04T01:23:17Z",
"data": {
"user": {
"id": "57a0479900-504cb3ab4a1f-626d174d2d"
},
"delivery": {
"type": "email",
"details": {
// these will be different based on delivery type
"containsAttachments": false,
},
"formInformation": {
// anything
},
"recipients": [{
"id": "309ee150-d8ce-40a6-986a-e5efbc109728",
"firstName": "Joe",
"lastName": "Demo",
"emailAddress": "[email protected]",
// context that only applies to this recipient
"context": [{
"systemType": "salesforce",
"systemId": null, // this always null for now
"contextType": "opportunity",
"contextName": "my opportunity",
"contextId": "some identifier",
"fields": {
// flat list of key values configured for this tenant, delivery type, and context type
}
}]
}],
"content": [{
"repository": "doccenter",
"type": "file",
"name": "Brand Values",
"libraryContent": {
"teamsiteId": "b9d85988-17f4-4994-82db-1ea46886046a",
"id": "3c3ffbb2-86ad-44d7-b692-b32c9b743ec7",
"versionId": "94bb9bd9-4e5e-4ee2-99f0-749a9ce422d2"
},
"contentProfileId": "b9d85988-17f4-4994-82db-1ea46886046a",
"contentProfilePath": ["by Industry", "Non-Profit"]
}, {
"repository": "library",
"type": "template",
"name": "Brand Values",
"teamsiteId": "b9d85988-17f4-4994-82db-1ea46886046a",
"id": "b9d85988-17f4-4994-82db-1ea46886046a",
"versionId": "b9d85988-17f4-4994-82db-1ea46886046a"
}, {
"repository": "workspace",
"type": "file",
"name": "Brand Values",
"id": "b9d85988-17f4-4994-82db-1ea46886046a",
"versionId": "b9d85988-17f4-4994-82db-1ea46886046a"
}],
// context that applies to the whole interaction
"context": [{
"systemType": "salesforce",
"systemId": null, // this always null for now
"contextType": "opportunity",
"contextName": "my opportunity",
"contextId": "some identifier",
"fields": {
// flat list of key values configured for this tenant, delivery type, and context type
}
}]
},
"clientDetails": {
"sessionId": "",
"ipAddress": "74.62.18.18",
"productArea": "doccenter",
"deviceType": "pc",
"browser": "chrome",
"browserVersion": "",
"operatingSystem": "windows",
"operatingSystemVersion": "",
"locale": ""
}
}
}
Content Properties
Content selected through the 'Paper Airplane' icon does not include content properties in the payload, whereas content that is added from the "+Add" button does have content properties in the payload. We are currently investigating a path forward.
Until this is addressed your app should not rely on Content Properties at this time
Updated almost 2 years ago