BYNDER EXTENSIONs Documentation 

Table of contents 

Introduction 

Purpose 

The purpose of this document is to present the business requirements for the Bynder Integration. This document will allow all parties to have a single source of truth for the business requirements for the Bynder extensions. These will be managed in this document to ensure all parties agree on the requirements. 

OVERVIEW 

  • InboundBynderWebhook – Purpose is to allow inbound webhook messages to be received and queued from the client’s DAM (Bynder) 
  • InboundBynder – Purpose is to process queued messaged and import data into Inriver. 
  • Entity Listener – queues messages to send metadata back to Bynder 
  • Link Listener – queues messages to send metadata back to Bynder 

Extension Settings 

Entity Listener 

  • OutboundConnectorStateId – Connector used for the outbound to queue messages 
  • IsDebug – True if the extension should be run in debug mode (debug mode will result in more descriptive error messages). 
  • EnableFieldChangeNotification – if this is set to false, the process to queue a notification to Bynder will be skipped 

Link Listener 

  • OutboundConnectorStateId – Connector used for the outbound to queue messages 
  • IsDebug – True if the extension should be run in debug mode (debug mode will result in more descriptive error messages). 

Inbound Bynder Webhook  

  • InboundConnectorStateId – Connector used for the inbound to queue messages 
  • IsDebug – True if the extension should be run in debug mode (debug mode will result in more descriptive error messages). 
  • TopicArn – The Amazon Resource Name of the Topic that will be delivering messages to Inriver 
  • LogSnsMessages – If this is true, it will log the messages required for setup of the integration 

Inbound Bynder  

  • AddMissingCvlValues – If set to True, CVL values that are existing in Bynder but missing in Inriver will be added to Inriver 
  • AddMissingMetapropertyValues – If set to True, Metaproperty values that are existing in Inriver but missing in Bynder will be added to Bynder 
  • BynderIdsToProcess – If populated will process only those IDs from Bynder (multiple Ids can be delimited with semicolons).  If empty will process according to other settings. 
  • OutboundConnectorStateId – Connector used for the outbound queue 
  • InboundConnectorStateId – Connector used for the inbound to queue messages 
  • DeadLetterConnectorStateId –   Connector state queue to store dead letter messages that exceed retry count 
  • EmailAddresses - Email address(es) that will be emailed if errors occur 
  • IsDebug – True if the extension should be run in debug mode (debug mode will result in more descriptive error messages).  
  • MaxRetryCount - Set to controls the amount of times the extension will retry in the event of failure 
  • OnlyOnWeekDays – If extension is to run daily, should it only run on weekends?  True if yes, False if extension should run on weekends as well.  
  • ProcessInboundChanges – If set to True, the extension will process any inbound changes. If set to False, the extension will ignore any inbound changes. 
  • ProcessOutboundChanges – If set to True, the extension will process any outbound changes. If set to False, the extension will ignore any outbound changes. 
  • RunDeltaBynderSync – If set to True, Inriver will process SNS event notifications from Bynder. If set to False, Inriver will sync all resources with matching GTIN in Bynder. 
  • RunBiWeekly – Controls if the extension runs bi-weekly.  True or False  
  • RunDaily – Controls if the extension is run daily.  True or False  
  • RunHourly – Controls if the extension runs hourly.  True or False 
  • RunWeekly – Controls if the extension runs weekly.  True or False 
  • ScheduledStartHourUtc – Controls the start hour of the extension.  Note this is in UTC. 
  • ScheduledStartMinuteUtc – Controls the start minute of the extension. Note this is in UTC. 
  • SendEmail – Controls whether an email will be sent if the extension encounters errors. 

FIELD SETTINGS 

  • InboundBynder (Product/Item/Resource entity) 
  • OutboundBynder (Product/Item entity) 

API information 

Inbound Bynder Webhook 

Processing Steps 

  • Confirm that the message is valid based on message signature. If invalid, log error and stop. 
  • Queue message data to connector state queue specified in settings  

Inriver Status Logging 

  • Error – Invalid request received in BynderInboundDataExtension.Add(). 
  • This occurs when an invalid message is received 
  • Warning – Unexpected AWS message type received in BynderInboundDataExtension. Type: {snsMessageType} 
  • Occurs when AWS sends an unexpected message format 
  • Information – Received SubscriptionConfirmation from AWS. If there is a trusted connection, go to this URL in your browser to confirm subscription: {snsMessageSubscribeURL} || Topic ARN: {snsMessageTopicArn} 
  • Occurs when subscription is not set up. Use URL to confirm subscription and set provided TopicARN as extension setting. Then endpoint will begin to receive notifications. 
  • Error – Error occurred processing Bynder AWS Notification Id: {snsMessageMessageId} 
  • Occurs when the message cannot be parsed or queued. 

Entity Listener 

Processing Steps 

  • EntityCreated 
  • Resource 
  • If the extension setting OutboundConnectorStateId is empty, then stop 
  • Queue the Resource with all mapped fields to send to Bynder 
  • EntityUpdated 
  • Item 
  • If EnableFieldChangeNotification is false, then stop 
  • Get all mapped fields for the Bynder outbound 
  • If any of the changed fields are in that list, then queue the Item and the fields to be sent to Bynder 
  • Resource 
  • If the extension setting OutboundConnectorStateId is empty, then stop 
  • Queue the Resource with all mapped fields to be sent to Bynder 
  • Queue message data to connector state queue specified in settings  

Inriver Status Logging 

  • Error – Failed to process EntityCreated/EntityUpdated 
  • If any uncaught error occurs, this will be logged 
  • Warning – Unable to add field change connector state for entity: {entityId} – Fields: {fields} 
  • If an error occurs when queueing the connector state message this will be logged 

Link Listener 

Processing Steps 

  • LinkCreated/LinkUpdated/LinkDeleted 
  • Link type ID contains “Resource” 
  • If the extension setting OutboundConnectorStateId is empty, then stop 
  • Get all of the fields needed to send data to Bynder 
  • Queue the message to later be sent to Bynder 

Inriver Status Logging 

  • Error – Failed to process LinkCreated/LinkUpdated 
  • If any uncaught error occurs, this will be logged 
  • Warning – Unable to add connector state for source: {sourceEntityId} – target: {targetEntityId} – Action: {action} – LinkTypeId: {linkTypeId}”) 
  • If an error occurs when queueing the connector state message this will be logged 

Inbound Bynder Processor 

Processing Steps 

  • Initialize shared common data 
  • Retrieve field settings and data from Inriver 
  • Retrieve metadata and properties from Bynder 
  • If BynderIdsToProcess setting is populated, retrieve indicated assets from Bynder and execute sync logic. If populated, this setting will supercede RunDeltaBynderSync and only assets indicated in the setting will be processed. 
  • If RunDeltaBynderSync setting is False, then retrieve all entities from Inriver and execute sync logic. 
  • If RunDeltaBynderSync setting is True, then retrieve updated assets from inbound and outbound connector state queues. And execute sync logic. 
  • While processing the below information: 
  • If any notification fails, increment retry counter and save back into queue 
  • If retry counter excels max retry setting, save into dead letter queue 
  • Media create 
  • Use the media_id to confirm that there is no Resource already existing with the field ResourceBynderMediaId  
  • If there is no Resource entity found, then look up and confirm there is no Resource using filename and ResourceFilename 
  • Compare thumbnail in Inriver with latest binary from Bynder. If different, download the binary from Bynder and replace thumbnail in Inriver 
  • If resource entity not found in Inriver, create entity 
  • Store the URL in the field ResourceBynderUrl 
  • Update fields on entity based on InboundBynder field setting 
  • Link the Resource entity to the correct entities 
  • Using the metadata field [Unique Identifier field to tie to PIM] look up the corresponding [Product/Item] entity with the same [Unique Identifier field to tie to PIM] 
  • Link the new Resource entity to that Product/Item 
  • Add/Update the Inriver URL if needed 
  • Media update 
  • Use the media_id to find the Resource with the field ResourceBynderMediaId 
  • If there is no Resource entity found, then look up the Resource using filename and ResourceFilename 
  • Update the Resource with the new file and metadata if applicable 
  • Using the metadata field [Unique Identifier field to tie to PIM] look up the corresponding [Product/Item] entity with the same [Unique Identifier field to tie to PIM] 
  • Link the new Resource entity to that Product/Item 
  • Add/Update the Inriver URL if needed 
  • Media delete 
  • Use the media_id to find the Resource with the field ResourceBynderMediaId 
  • If there is no Resource entity found, then look up the Resource using filename and ResourceFilename 
  • Delete the Resource from Inriver 
  • Outbound metadata (EntityListener) 
  • For each event in the Outbound queue: 
  • Evaluate outbound fields based on the OutboundBynder setting 
  • If any outbound fields are different than what is in Bynder, update via Bynder RestAPI 
  • If any errors have been identified during the process, create error file and save as a resource in Inriver 
  • Send an email to the email address(es) in the setting EmailAddresses about the errors and link them to the file 

Field Mapping 

  • InboundBynder 
  • ResourceFileId = set after Resource creation 
  • ResourceName = filename 
  • ResourceFilename = filename 
  • ResourceMimeType = GetMimeMapping the same way that we do in WebDAM today 
  • ResourceBynderMediaId = media_id 
  • ResourceBynderUrl = secure_url 
  • Additional metadata fields as needed 

Inriver Status Logging 

  • Error – Something went wrong 
  • Occurs when an uncaught exception is encountered. 
  • Error – Error occurred initializing PIM common data 
  • Occurs when Inriver data or Bynder metaproperties cannot be retrieved. Data will not be processed. 
  • Error – Error occurred syncing asset 
  • Occurs when an individual asset cannot be processed. 
  • Error – Error retrieving inbound connector states 
  • Occurs when the queued inbound data cannot be retrieved. 
  • Error – Error occurred parsing connector state – {connectorState.Key} 
  • Occurs when a queued inbound event cannot be parsed. 
  • Error – Unable to retrieve connector states for DAM Id: {damId}. Resource not updated 
  • Occurs when notification events associated to a specific resource entity cannot be retrieved. 
  • Error – Unable to update connector states for DAM Id: {damId} 
  • Occurs when notification events associated to a specific resource entity cannot be updated after processing. Deleted or increment retry count. 
  • Error – Error occurred while attempting to delete BynderAsset Id: {bynderAssetId} from Inriver 
  • Occurs when a delete event is received but deletion fails for the resource entity. 
  • Error – No matching SKUs found in PIM for Bynder Id: {bynderId}. SKUs: {skuValues} Bypassing this Resource. 
  • Occurs when an event is received for an asset without a matching SKU  in Inriver. 
  • Error – Failed to delete asset from PIM 
  • Occurs when an asset is determined not to belong in PIM but exists in PIM and deletion fails for the resource entity. 
  • Error – Error occurred processing Bynder asset ID: {bynderId} 
  • Occurs when an uncaught exception happens for a specific asset. 
  • Error – Unable to delete file {fileId} when replacing on resource {resourceFilename} 
  • Occurs when the thumbnail is replaced and the old thumbnail could not be deleted 
  • Error – Error occurred downloading thumbnail to Inriver for {resourceFilename} 
  • Occurs when the thumbnail fails to download at all. 
  • Error – Error retrieving outbound connector states 
  • Occurs when the queued outbound data cannot be retrieved. 
  • Error – Error occurred parsing connector state – {connectorState.Key} 
  • Occurs when a queued outbound event cannot be parsed. 
  • Error – Unable to retrieve connector states for DAM Id: {damId}. Resource not updated 
  • Occurs when notification events associated to a specific resource entity cannot be retrieved. 
  • Error – Unable to update outbound connector states for DAM Id: {damId} 
  • Occurs when notification events associated to a specific resource entity cannot be updated after processing. Deleted or increment retry count. 
  • Error – Resource Id: {resourceId} has been deleted from Inriver. Deleting associated connector states 
  • Occurs when additional notifications are processed for a deleted resource entity. 
  • Error – Error occurred processing resource filename: {resourceFilename} 
  • Occurs when outbound changes cannot be processed for a specific resource entity. 
  • Error – Error occurred processing Bynder MetaOption id: {metaOptionId} 
  • Occurs when a configured field mapping cannot be processed into a Bynder metaproperty or metaproperty option. 
  • Error – Mapping CVL Value: {splitValue} not found in CVL: {cvlId}. Bypassing this value 
  • Occurs when a valid Bynder value does not exist in the configured mapping CVL. 
  • Error – Mapping CVL: {cvlId} configured on PIM Field: {field.FieldType.Id} not found. Bypassing this field 
  • Occurs when the mapping CVL is not configured or does not exist. 
  • Error – Message exceeded retry count. DAM Id: {bynderId} – Notification Type: {bynderNotificationType} Moving to DLQ 
  • Occurs when retry count is exceeded.