Oracle Responsys
Datafly Signal delivers events to Oracle Responsys Marketing Cloud server-to-server using the Trigger Custom Event REST API (v1.3). Each Signal event triggers a named Responsys custom event for the matched profile-list member, which then runs your Responsys Program logic (for example, entering the contact into a welcome or abandoned-cart journey).
Prerequisites
Before configuring Oracle Responsys in Signal you need:
- A Responsys account with REST API access enabled.
- A Custom Event defined in Responsys (Data > Events). For near-real-time messaging, the event must be of type Real-time.
- A Profile List that already contains the contacts you want to enact, with a match key (email address recommended).
- Responsys API credentials (username + password) to obtain an auth token.
Step 1: Find your API endpoint
- In Responsys, go to Account > Global settings > Account configuration.
- Copy the value of the WS End Point field. For Global Routing accounts this looks like
https://ACCOUNTTOKEN-api.responsys.ocs.oraclecloud.com.
This is your account-specific REST base URL. It is also returned as endPoint in the authentication response.
Step 2: Create the custom event
- Go to Data > Events and create (or note the name of) the custom event you want Signal to trigger.
- Attach that event as the entry trigger of the Program / campaign you want enacted.
Step 3: Obtain an auth token
Responsys uses a two-stage authentication flow. Authenticate with your username and password to receive a token (valid for 2 hours):
curl -X POST "https://login.rsys9.net/rest/api/v1.3/auth/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "user_name=YOUR_USERNAME&password=YOUR_PASSWORD&auth_type=password"The response returns the token and your endpoint:
{
"authToken": "abc123...",
"issuedAt": 1645123456789,
"endPoint": "https://ACCOUNTTOKEN-api.responsys.ocs.oraclecloud.com"
}The authToken expires after 2 hours. Automatic refresh is not yet available in this integration, so provide a token from a long-lived service account and rotate it as part of your operational schedule.
Configure in Signal
Configuration Fields
| Field | Required | Description |
|---|---|---|
api_endpoint | Yes | Account-specific REST base URL (the WS End Point value, e.g. https://ACCOUNTTOKEN-api.responsys.ocs.oraclecloud.com). |
auth_token | Yes | A current Responsys authToken from the auth/token endpoint. |
event_name | Yes | The Custom Event name to trigger (defined under Data > Events). |
folder_name | Yes | The folder containing the target profile list. |
list_name | Yes | The profile list (objectName) whose members are matched. |
Management UI Setup
- Go to Integrations > Add Integration > Oracle Responsys.
- Choose the Default preset.
- Enter your
api_endpoint,auth_token,event_name,folder_name, andlist_name. - Select the consent category that maps to marketing (typically
marketing). - Click Save.
API Endpoint
POST {api_endpoint}/rest/api/v1.3/events/{event_name}
Authorization: {auth_token}
Content-Type: application/jsonThe auth token is sent as the literal value of the Authorization header — there is no Bearer prefix.
A single trigger request is limited to 200 recipients. Signal sends one recipient per event, so this limit is not reached under normal operation.
Identity Signals
Responsys matches the incoming recipient against an existing member of the configured profile list. It uses the first non-null of these keys, in order:
| Key | Signal source | Notes |
|---|---|---|
recipientId | — | Responsys internal ID (not used by this blueprint). |
emailAddress | email trait | Primary match key. Trimmed and lowercased before sending. |
customerId | user_id | Sent as a secondary match key when available. |
mobileNumber | — | Available for SMS-keyed lists (not mapped by default). |
Responsys profile-list matching for the trigger-event recipient uses the raw email address, not a hash. Signal normalises the address (trim + lowercase) before delivery but does not hash it for this match key.
How to send user data
Call datafly.identify() when a user logs in, registers, or submits a form so the email trait is available to match against your profile list:
datafly.identify("user-123", {
email: "jane.doe@example.com"
});Event Mapping
Default preset
| Signal event | Responsys action |
|---|---|
page | Trigger custom event (with page URL/title in optionalData) |
Product Viewed | Trigger custom event (product context) |
Product Added | Trigger custom event (product + quantity) |
Order Completed | Trigger custom event (order ID, total, currency) |
Signed Up | Trigger custom event (signup method) |
Every event triggers the same configured event_name; event-specific context is passed as Responsys optionalData name/value pairs. All other events are dropped (defaults.action: drop).
Example: Order Completed
Datafly.js call:
datafly.identify("user-123", { email: "jane.doe@example.com" });
datafly.track("Order Completed", {
order_id: "ORD-001",
revenue: 129.99,
currency: "USD"
});Responsys payload sent by Signal (POST {api_endpoint}/rest/api/v1.3/events/{event_name}):
{
"recipientData": [
{
"recipient": {
"emailAddress": "jane.doe@example.com",
"customerId": "user-123",
"listName": {
"folderName": "WS_REST_SAMPLE",
"objectName": "CONTACTS_LIST"
},
"emailFormat": "HTML_FORMAT"
},
"optionalData": [
{ "name": "ORDER_ID", "value": "ORD-001" },
{ "name": "ORDER_TOTAL", "value": "129.99" },
{ "name": "CURRENCY", "value": "USD" },
{ "name": "MARKETING_CONSENT", "value": "I" },
{ "name": "ANONYMOUS_ID", "value": "a1b2c3d4..." }
]
}
]
}optionalData names should match the column names you have configured in your Responsys profile list or supplemental table so the values are persisted and available to your campaign content.
Consent
Signal maps the canonical marketing consent state to a Responsys opt flag in optionalData:
| Consent | Value sent |
|---|---|
| Granted | I (opt-in) |
| Denied / unknown | O (opt-out) |
Map this field to your profile list’s opt-in/opt-out column so Responsys respects the contact’s marketing preference.
Testing Your Integration
Trigger a test event
Use a known contact that already exists in your profile list, then trigger an event from your site:
datafly.identify("test-user", { email: "test@example.com" });
datafly.track("Order Completed", { order_id: "TEST-1", revenue: 1, currency: "USD" });Confirm enactment in Responsys
In Responsys, open the Program attached to your custom event and check the enactment / program activity to confirm the recipient entered.
Inspect the payload
Use Signal’s Event Debugger to confirm the recipient match key and optionalData are populated as expected before the request is sent.
Troubleshooting
| Problem | Solution |
|---|---|
401 Unauthorized | The authToken has expired (2-hour lifetime) or is invalid. Generate a fresh token from /rest/api/v1.3/auth/token and update the integration config. |
404 Not Found | Check api_endpoint matches your account’s WS End Point and that event_name is an existing custom event. |
| Recipient not enacted | The email address does not match any member of the configured profile list. Confirm the contact exists and the folder/list names are correct. |
400 Bad Request | Usually a missing match key or malformed optionalData. Review the payload in the Event Debugger. |
| Values not stored | Ensure each optionalData name matches a column in your profile list or supplemental table. |