Oracle Eloqua AppCloud Developer Framework Developer Guide
Publicité
Publicité
http://docs.oracle.com
Oracle Eloqua AppCloud Developer
Framework
Developer Guide
©2017 Oracle Corporation. All rights reserved 20-Sep-2017
Contents
1 Oracle Eloqua AppCloud Developer Framework
1.3 First Steps with the Oracle Eloqua AppCloud
1.4.1 Oracle Eloqua AppCloud Actions
1.4.2 Oracle Eloqua AppCloud Decisions
1.4.3 Oracle Eloqua AppCloud Feeders
1.4.4 Oracle Eloqua AppCloud Content
1.4.5 Oracle Eloqua AppCloud Menus
1.4.6 Oracle Eloqua AppCloud Firehose
1.5 Introduction to URL Templating
1.6 AppCloud Frequently Asked Questions
1.6.2 Oracle Eloqua AppCloud Services and Operations
2.1 Instantiation-Execution Model
2.3 Develop an Oracle Eloqua AppCloud Action Service
©2017 Oracle Corporation. All rights reserved
2 of 146
2.4 Develop an Oracle Eloqua AppCloud Decision Service
2.5 Develop an Oracle Eloqua AppCloud Content Service
2.5.1 Content Service Flow Diagrams
2.6 Develop an Oracle Eloqua AppCloud Feeder Service
2.7 Develop an Oracle Eloqua AppCloud Menu Service
2.8 Develop an Oracle Eloqua AppCloud Firehose Service
3.1.3 Authentication to Eloqua
3.4 Register an Action Service
©2017 Oracle Corporation. All rights reserved
3 of 146
3.5 Register a Decision Service
3.6 Register a Content Service
3.9 Register a Firehose Service
4.1.2 Publish To A Specific Site
4.4 AppCloud Installation Flow
4.4.1 No Additional Information Needed
4.4.2 Additional Information Needed
4.5 Respond When Eloqua Calls the Status URL
©2017 Oracle Corporation. All rights reserved
4 of 146
4.6 Respond When a Marketer Copies a Service Instance
4.6.1 Sample Copy URL Call and Response
4.6.2 Persistent Settings and Data
4.9 App Icon Design Guidelines
4.9.4 Canvas apps (Action, Decision, and Feeder services)
4.10 Viewing an App's Outbound Logs
4.11 Update or Check your App's Status Using the Cloud API
4.11.1 To Check the App's Status
4.11.2 To Update the App's Status
5.1 Service level URL template parameters
5.2 App level URL template parameters
5.2.3 PUT /api/cloud/1.0/actions/instances/{id}
5.2.4 PUT /api/cloud/1.0/contents/instances/{id}
5.2.5 PUT /api/cloud/1.0/decisions/instances/{id}
5.2.6 PUT /api/cloud/1.0/feeders/instances/{id}
5.2.7 POST /api/cloud/1.0/actions/instances
5.2.8 POST /api/cloud/1.0/decisions/instances
5.2.9 GET /api/cloud/1.0/apps/{id}/configurations
5.2.10 PUT /api/cloud/1.0/apps/{id}/configurations
©2017 Oracle Corporation. All rights reserved
5 of 146
5.2.11 GET /api/cloud/1.0/apps/{id}/logs 145
©2017 Oracle Corporation. All rights reserved 6 of 146
1 Oracle Eloqua AppCloud Developer
Framework
The Oracle Eloqua AppCloud Developer Framework is a complete development platform where you can easily build, register, and deploy apps for Eloqua. With new and improved service types which take advantage of Eloqua's Bulk API , support for OAuth, and the ability to test your applications with
Eloqua prior to launch, the Oracle Eloqua AppCloud Developer Framework provides the environment needed to put apps first.
The framework allows third parties to register and manage the integrations that they build for Eloqua right from their own Eloqua development instance. It also offers common, repeatable patterns for building Apps that extend the functionality of Eloqua, providing a consistent, seamless experience for the marketing user.
1.1 Features
App Keys and OAuth2
Testing: test your apps inside your development instance before going live
Selective whitelististing, so you can run betas on your Apps before release
Improved processing speeds with the Bulk API
A seamless flow for App installation and configuration
6 Oracle Eloqua AppCloud service types to support your different goals. Read about the
for more information.
1.2 Flow
Getting started with the Oracle Eloqua AppCloud Developer Framework follow a three step flow: first, you need to
in your Eloqua development instance. This gives you provider
©2017 Oracle Corporation. All rights reserved 7 of 146
credentials that you can use to develop apps that interact with Eloqua. Then, you need to develop an app, and register it with Eloqua. When you register an app, you provide Eloqua with a series of
templated URLs
that Eloqua uses to call out to your app. The
guides provide guidance on what URL parameters you should include in each templated URL so that you will receive the data you need to do whatever your app does. Finally, you can
publish the app , either to specific
Eloqua instances, or as a general release. Once you whitelist a site, you can share your app's install
URL so that the site's administrator can install the app and let marketers start using it.
1.3 First Steps with the Oracle Eloqua AppCloud
The Oracle Eloqua AppCloud Developer Framework is designed to make it easy to start working with the framework with minimal setup effort required. Once you have registered as a provider and ensured that your Eloqua user has sufficient permissions, you are ready to start developing an app!
1.3.1 Requirements
A development Eloqua instance in which you have registered as a provider
Sufficient user permissions: the user making calls against Eloqua's APIs must have
Advanced Users - Marketing permissions granted in the Security Groups section of the user management area of Eloqua.
1.3.2 Create a Provider
Learn more by watching the video
Register As A Provider
To register as a Provider, log in to your Eloqua instance, and click Settings > AppCloud Developer.
©2017 Oracle Corporation. All rights reserved 8 of 146
Enter your company’s information in the welcome page:
Name: your Provider name. You might want to use your company name.
Website URL: your company website. This is optional.
Support Email Address: the email address users should use to contact you if there are issues with your app.
Support Phone Number: a phone number where you can be contacted if there are problems with your app.
Click Create Provider > Save, and you’re all set up as a provider. Your unique GUID-based provider
External ID is displayed.
Edit Provider Information
You can easily edit this information by clicking Edit Provider.
©2017 Oracle Corporation. All rights reserved 9 of 146
The Edit Provider Profile page lists your provider information.
1.3.3 Next Steps
Once you've registered as a provider, read the
to determine which ones you want to implement in your app, read about
URL templating , and then consider the
1.4 Service Descriptions
1.4.1 Oracle Eloqua AppCloud Actions
Actions allow a marketer to add an action step to a campaign or program that is performed by an external system. For example, an action service could send contacts SMS messages, trigger a direct mailing, or register a contacts for a webinar. When contacts enter an action step, Eloqua calls out to the app, and the app responds by performing an action in an external system. The app then informs
Eloqua that the process is complete and the contact moves on in the workflow. Read more about
Actions in the
and
service registration instructions .
Learn more by watching the video
©2017 Oracle Corporation. All rights reserved 10 of 146
1.4.2 Oracle Eloqua AppCloud Decisions
Decisions allow a marketer to delegate a decision-making step in a campaign to an external system without having to bring the system's data into Eloqua. Decision services evaluate contacts using externally-held data, and determine whether the contacts meet the criteria. The service responds with
'yes' or 'no' to determine which path the contact should take through the campaign or program workflow. For example, a decision service could check if a contact exists in a CRM system, and sort the contacts accordingly. With AppCloud Decisions, the data used in the decision never needs to be brought into Eloqua. Read more about Decisions in the
and
service registration instructions .
Learn more by watching the video
1.4.3 Oracle Eloqua AppCloud Feeders
With Feeders, developers can build apps that use data in third-party services to drive campaign and program membership. Feeders allow marketers to populate a campaign or program with contacts/custom objects from an external system, automatically importing the contacts or custom objects into Eloqua and adding them to a campaign or program. Read more about Feeders in the
and
service registration instructions .
Note: For marketers using Eloqua's campaign canvas, feeder services are referred to as
AppCloud Audiences.
Learn more by watching the video
1.4.4 Oracle Eloqua AppCloud Content
Content allows marketers to source pieces of content in Eloqua emails and Landing Pages from an external source. This is the new and improved version of Eloqua’s Cloud Components framework, and it includes many improvements such as asynchronous bulk processing (for emails), the ability to fully
©2017 Oracle Corporation. All rights reserved 11 of 146
test the content service within Eloqua, and design-time interaction with the Email and Landing Page editors. Read more about Content in the
and
service registration instructions .
1.4.5 Oracle Eloqua AppCloud Menus
The AppCloud Menus service is all about
context
. AppCloud Menus enable a marketer to launch an externally-hosted application from within Eloqua via a menu dock. This menu dock floats on the right side of the screen in the Campaign Canvas or asset editor screens. Read more about Menus in the
and
service registration instructions .
1.4.6 Oracle Eloqua AppCloud Firehose
The Firehose service, acts as a web hook, and notifies an external system when a marketer performs an action in Eloqua. For example, when a marketer creates a campaign or edits an email, Eloqua can call out to the third-party with the update. Read more about the Firehose service in the
and
service registration instructions
.
1.5 Introduction to URL Templating
The Oracle Eloqua AppCloud Developer Framework supports
URL Templating
to enable you to configure the service URIs that Eloqua calls out to. Any acceptable template parameter is substituted with the appropriate value before the call is made.
Common URL parameters include
} , the unique identifier for the user whose actions triggered the call,
} , the GUID-based ID that identifies an instance of a service, and
, which provides campaign status information (Created, Activated, Draft, and so on). These URL parameters enable you to configure the service URLs that Eloqua calls out to, specifying the information that you need for your application.
1.5.1 Example
Consider this templated URL:
©2017 Oracle Corporation. All rights reserved 12 of 146
https://awesomeapp.example.com/create/instance=
{InstanceId}&asset={AssetId}&site={SiteName}
When Eloqua calls the URL, the templated parameters are replaced with the appropriate values: https://awesomeapp.example.com/create/instance=b5fc25ce-9709-
42c4-a57d-caa00e23f658&asset=45&site=DocsExampleSite
1.5.2 Recommendations
Choose the URL parameters to include in your templated URLs based on your use case. These parameters provide contextual information: your application design will determine which parameters you need. The full list of parameters is available. The
provides a description for each parameter. You should familiarize yourself with the supported URL parameters when designing your templated URLs.
The service registration guides also include suggestions for parameters to include for specific URLs.
These recommendations are the minimum you will likely need. Include additional parameters if you require them.
1.6 AppCloud Frequently Asked Questions
1.6.1 General
Why should I develop apps for the Oracle Eloqua AppCloud?
The AppCloud Developer Framework is a complete development platform where you can easily build, register, and deploy apps for Eloqua. With new and improved service types which take advantage of
Eloqua's Bulk API , support for OAuth, and the ability to test your applications with Eloqua prior to launch, the AppCloud Developer Framework provides the environment needed to put apps first.
What permissions do I need to start developing apps for the Oracle Eloqua
AppCloud?
At the minimum, you need access to an Eloqua instance. If you are not currently an Eloqua user, you can sign up as a technology partner to obtain a development instance. As a user, you will also need the
©2017 Oracle Corporation. All rights reserved 13 of 146
Advanced Users - Marketing permissions.
When and how does my app get listed on the Oracle Eloqua AppCloud site?
See the Building Apps for the Oracle Marketing AppCloud page on Topliners for detailed instructions.
How do marketers find my app to start using it?
Registered apps are listed on the Oracle Cloud Marketplace . Users are linked to this page through the
"Get more Apps" link in Eloqua's AppCloud Catalog section.
Is there an Oracle Eloqua AppCloud certification program?
Yes there is! Check out the Oracle Marketing AppCloud Certification Program on Topliners.
1.6.2 Oracle Eloqua AppCloud Services and Operations
Which service should I develop?
It depends on what you're trying to achieve! See the
for an overview of each service and the use cases it supports.
What's the difference between Oracle Eloqua AppCloud services and
Cloud Connectors or Components?
Eloqua Oracle Eloqua AppCloud services greatly extend the functionality provided by
Cloud Connectors and Cloud Components. Cloud Content replaces Cloud Components, allowing you to process emails in bulk and test the service within Eloqua. Unlike Cloud Connectors and
Components, the Oracle Eloqua AppCloud services use Eloqua's Bulk API for processing, greatly improving performance and throughput.
Can I include Campaign, Email, Landing Page, Form (etc) fields in my record definition?
No. The Oracle Eloqua AppCloud exclusively supports Contact, Account, Activity and Custom Object fields in its record definition fields. You must use the correct Eloqua Markup Language statement to reference each field.
Can I include static values in my record definition?
No. You can only specify the Eloqua Markup Language for Eloqua fields.
©2017 Oracle Corporation. All rights reserved 14 of 146
1.6.3 Managing Your Apps
What happens if contacts encounter an error in an Action or Decision step? What happens if the service is unavailable when contacts flow into a step on the canvas?
The contacts remain in the step until the marketer manually pushes them into the next step on the canvas.
Does Eloqua notify me when someone uninstalls or deletes my app from their
Eloqua instance?
If you set an
it will be called when a user uninstalls the app.
Why has my app been shut down?
If in the last five minutes, there were more than 100 calls, and 25% of them failed, the app will be shut down. All the pending and future requests will be marked as failed. See the
for more information.
Will Eloqua retry my contacts if my app doesn't respond?
If Eloqua calls out to your app and receives five consecutive failures, the contacts in a step will be marked as "Errored". If the marketer has configured a default path for the contacts to flow through, then the contacts will flow into the next step.
Why does my app prompt the error "502 Error: App Provider not Available"?
This error message will appear if a URL has been configured with a non-standard port. Eloqua only supports the standard ports 80 and 443. If a URL is not configured with port 80 or port 443, requests to this URL will fail.
1.6.4 Limits
Are there limits that I should be aware of?
The AppCloud Developer Framework relies on the Bulk API. The Bulk API has limits on the size of the staging area for imports and exports, on the amount of data you can import at one time, and on the
©2017 Oracle Corporation. All rights reserved 15 of 146
number of fields you can include in a record definition. There is also a daily limit on the number of syncs you can perform.
What happens if I reach the daily sync limits?
The daily sync limit is not currently enforced, but syncs are logged and monitored.
©2017 Oracle Corporation. All rights reserved 16 of 146
2 Develop an App
The Oracle Eloqua AppCloud Developer Framework provides 6 service types that you can develop to extend Eloqua's functionality. Some services create steps that a marketer can add to the campaign canvas, or to an email or landing page, another service type enables marketers to launch third-party applications directly from within Eloqua's UI, while another yet creates a web hook that calls out to a third-party service when a marketer performs an action within Eloqua.
These services make it easy for developers to extend Eloqua's capabilities, providing new opportunities for marketers to harness both Eloqua data and external services to better serve their goals.
Before you start developing Oracle Eloqua AppCloud services, familiarize yourself with the
instantiation-execution model , which Actions, Decisions, Feeders, and Content follow. Then, you can
read the development guides:
2.1 Instantiation-Execution Model
With the exception of Menus and the Firehose, Oracle Eloqua AppCloud Services follow an instantiation-execution model. When you add an Decision or Action step to a campaign in the
Campaign Canvas, a new instance of that Decision or Action service is created. When that campaign or program reaches the Decision or Action stage, the service is executed. Similarly, when Content is added to an email or landing page, a new instance of that Content service is created.
©2017 Oracle Corporation. All rights reserved 17 of 146
2.1.1 Service Instantiation
1. A Marketer drags the service onto a campaign or program canvas or onto an email or landing page asset. This triggers a call from the Eloqua UI to an internal Eloqua API that will interact with your servers.
2. The internal Eloqua API calls out to your service using the templated Create URL you configured when registering your App. This is a POST request, authenticated with OAuth, which contains an empty JSON object. The call provides you with the new instance’s GUID.
For example, AwesomeApp has an AppCloud Decision service whose Create URL is: https://example.com/awesomeapp/decide/create?instance=
{instanceId}
Eloqua calls out to this URL with an empty JSON object, replacing the templated parameters with the service instance ID and app installation ID.
Your application should respond with default details in a Record Definition Data Transfer Object
(DTO). For example, for a Decision service, the response might resemble:
{
"EmailAddress" : "{{Contact.Field(C_
EmailAddress)}}"
}
}
"recordDefinition":
{
"ContactID" : "{{Contact.Id}}",
This tells Eloqua to send the contacts’ Contact ID and email address when the service is executed. For detailed instructions, see the documentation specific to each
.
©2017 Oracle Corporation. All rights reserved 18 of 146
3. The Marketer can then configure the instance using your service’s UI by clicking on the “Edit” button on the service instance. Eloqua opens a browser window to the Configure URL for the service. Note: this call to the Configure URL comes directly from the marketing user’s browser, rather than from the Eloqua API. If you need to restrict access, you can do so here by requiring the user be on a specific VPN, for example.
4. If the Marketer has made changes, your API should call back to Eloqua using a PUT request with an updated DTO specifying the new record definition. For example, if the Marketer created an AppCloud Decision step that required field1 , field2 , and field3 , the PUT request would resemble:
PUT https://secure.eloqua.com/api/cloud/1.0/decisions/instance
/fddc932a-f27d-40c3-a126-82299b9512c5
{
"recordDefinition":
{
"ContactID" : "{{Contact.Id}}",
"EmailAddress" : "{{Contact.Field(C_
EmailAddress)}}",
"field1" : "{{Contact.Field(C_field1)}}",
"field2" : "{{Contact.Field(C_field2)}}",
"field3" : "{{Contact.Field(C_field3)}}"
}
}
©2017 Oracle Corporation. All rights reserved 19 of 146
2.1.2 Execution
1. When the service is activated, either by contacts flowing through a campaign or a visit to a landing page, this batch of contacts is tagged with an execution ID that tracks its progress.
2. This step varies depending on the service type, but in general, the Eloqua internal API calls out to the Service’s notification URL, and transmits a the information you specified during the configuration phase. In the above example, then, the recordDefinition includes the contact’s ID, email address, field1, field2 and field3. The call to the notification URL would then resemble:
POST https://example.com/awesomeapp/decide/notify?instance=fddc
932a-f27d-40c3-a126-82299b9512c5&asset=456
{
"offset" : 0,
"limit" : 1000,
"totalResults" : 2,
"count" : 2,
"hasMore" : false,
"items" :
[
{
"ContactID" : "1",
"EmailAddress" : "[email protected]",
"field1" : "stuff",
"field2" : "things",
"field3" : "et cetera"
©2017 Oracle Corporation. All rights reserved 20 of 146
}
]
},
{
"ContactID" : "2",
"EmailAddress" : "[email protected]",
"field1" : "more stuff",
"field2" : "other things",
"field3" : "and so on"
}
This follows the format defined during the create URL and configure URL calls during the
Instantiation phase.
3. If your service is unavailable, Eloqua will retry five times. If you specified Maximum Record size of 0 when you configured your App, or the record definition sent during the instantiation phase contains no fields, the DTO contains an empty JSON object. Otherwise, the call sends a
DTO containing contact data, with a maximum limit to the number of records as specified in the service configuration. If there are more records than the maximum limit, Eloqua will keep sending requests until all the data is transmitted.
4. You can then choose to return the same response for all the contacts in the batch, or tailor your responses to each contact.
To individualize your responses for each contact, the desired HTTP response status code is a
204, followed up with an Import call using Eloqua’s Bulk API. You must specify sync actions during the import. The appropriate sync actions vary according to the service type. Refer to the
Bulk API documentation and the service-specific documentation for more information
5. Eloqua receives the import. For service instances associated with a campaign, those contacts flow through to the next stage.
©2017 Oracle Corporation. All rights reserved 21 of 146
2.2 Notification URL Setup
Many AppCloud Services require that you configure a Notification URL when registering the service.
The Notification URL is essentially a webhook: it is the URL that Eloqua should call out to when something happens.
For example, when an Eloqua contact visits a landing page containing an AppCloud Content service instance, Eloqua calls out to the service provider's Notification URL to request the HTML content needed to populate the landing page. Similarly, when contacts flow into an AppCloud Decision or
AppCloud Action step during a campaign, Eloqua calls out to the Notification URL to notify the App that contacts have reached that step.
The Notification URL is a
which supports the common parameters, including
{InstanceId} , {InstallId} , {AssetId} , {AssetName} , {UserName} , {UserId} , {EventType} , and
{UserCulture} . The AppCloud Content Service Notification URL also supports {VisitorId} , which maps to the ID of a visitor when called from a landing page, to enable delivery of visitor-specific content.
When the Notification URL is called for AppCloud Actions, Decisions, Feeders, or Content, Eloqua also sends, as parameters, the fields specified by your app during the Instantiation Phase. For example, AwesomeApp has an AppCloud Decision service. Its notification URL is: https://example.com/awesomeapp/decide/notify?instance={InstanceId}&asset={AssetId}
During Instantiation, ExampleApp specified that it requires the Contact Id, email address, field1, field2, and field3 in the
recordDefinition
field of the service instance data transfer object. The
recordDefinition
field was:
"recordDefinition": {
"contactID": "{{Contact.Id}}",
"email": "{{Contact.Field(C_EmailAddress)}}",
"field1": "{{Contact.Field(C_Field1)}}",
"field2": "{{Contact.Field(C_Field2)}}",
"field3": "{{Contact.Field(C_Field3)}}"
}
©2017 Oracle Corporation. All rights reserved 22 of 146
Suppose that two contacts, [email protected] and [email protected], flowed into an AppCloud
Decision step. Eloqua's call to the Notification URL would then resemble:
POST https://example.com/awesomeapp/decide/notify?instance=
123&asset=456
{
"offset" : 0,
"limit" : 1000,
"totalResults" : 2,
"count" : 2,
"hasMore" : false,
"items" :
[
{
"contactID" : "1",
"email" : "[email protected]",
"field1" : "stuff",
"field2" : "things",
"field3" : "et cetera"
]
}
},
{
"contactID" : "2",
"email" : "[email protected]",
"field1" : "more stuff",
"field2" : "other things",
"field3" : "and so on"
}
©2017 Oracle Corporation. All rights reserved 23 of 146
The appropriate response to the Notification URL call varies slightly depending on which service you're developing. You can see the appropriate responses for each service type in the following documents:
Develop an AppCloud action service
Develop an AppCloud decision service
Develop an AppCloud content service
Develop an AppCloud feeder service
Develop an AppCloud firehose service
2.3 Develop an Oracle Eloqua AppCloud Action Service
Actions are steps on a campaign or program canvas that are delegated to an external system. This allows you to perform actions that you cannot do with Eloqua. Actions are analogous to the existing
Cloud Connectors.
Actions follow
the instantiation-execution model . The following sections describe Action-specific
details and provide the endpoints needed to develop an Action service. If you are not familiar with the general flow for the instantiation-execution model, you should read that first.
Eloqua signs all outgoing calls with OAuth 1.0a so the receiving system can validate that the call was sent by Eloqua. Refer to the OAuth 1.0a spec or OAuth 1.0 RFC for more information.
©2017 Oracle Corporation. All rights reserved 24 of 146
©2017 Oracle Corporation. All rights reserved 25 of 146
2.3.1 Create URL
Eloqua’s call to the CreateURL:
POST https://example.com/awesomeapp/act/create?instance=f82d50cd-
86a9-4fca-b37e-4ec9a98b0339
{}
AwesomeApp’s response is a DTO describing the fields Eloqua should transmit when the service in executed. You can include a maximum of 249 fields in your record definition.
Example response for contacts:
{
}
"recordDefinition": {
"ContactID": "{{Contact.Id}}",
},
"EmailAddress": "{{Contact.Field(C_EmailAddress)}}"
"requiresConfiguration": true
Example response for custom objects:
{
}
"recordDefinition": {
},
"Email": "{{CustomObject[1].Field[4]}}"
"requiresConfiguration": true requiresConfiguration is an optional Boolean parameter which tells Eloqua whether user configuration is required before the app can be used. If set to true , users will be unable to activate a campaign or program containing the unconfigured app service instance. Eloqua will display an error message.
©2017 Oracle Corporation. All rights reserved 26 of 146
Warning: All field names and values in Eloqua data transfer objects are case sensitive. Be sure to reproduce them exactly. For example: {{Contact.id}} would fail if the correct form is
{{Contact.Id}} .
2.3.2 Configure URL
When a user clicks the edit button on the service instance and makes changes through the Configure
URL that require an updated recordDefinition data transfer object (DTO), AwesomeApp must call out to Eloqua’s Cloud API
endpoint with that updated DTO:
Example request for contacts:
PUT https://secure.p03.eloqua.com/api/cloud/1.0/actions/instances/ f82d50cd-86a9-4fca-b37e-4ec9a98b0339
{
"recordDefinition":
{
"ContactID" : "{{Contact.Id}}",
"EmailAddress" : "{{Contact.Field(C_
EmailAddress)}}",
"field1" : "{{Contact.Field(C_field1)}}",
"field2" : "{{Contact.Field(C_field2)}}",
"field3" : "{{Contact.Field(C_field3)}}"
},
"requiresConfiguration": false
}
Example request for custom objects:
PUT https://secure.p03.eloqua.com/api/cloud/1.0/actions/instances/ f82d50cd-86a9-4fca-b37e-4ec9a98b0339
{
"recordDefinition": {
©2017 Oracle Corporation. All rights reserved 27 of 146
}
"Email": "{{CustomObject[1].Field[4]}}"
},
"requiresConfiguration": false requiresConfiguration is an optional Boolean parameter which tells Eloqua whether user configuration is required before the app can be used. If set to true , users will be unable to activate a campaign or program containing the unconfigured app service instance. Eloqua will display an error message.
Use the Configure URL response to set requiresConfiguration to false when your app's configuration acceptance criteria have been met.
Warning: If the campaign or program is not in draft mode, attempting to set requiresConfiguration to true will result in an error.
2.3.3 Notification URL
Eloqua calls the Notification URL when contacts or custom objects arrive in the Action step. This call transmits the requested fields in the items parameter:
POST https://example.com/awesomeapp/act/notify?instance=f82d50cd-
86a9-4fca-b37e-4ec9a98b0339&asset=456
{
"offset" : 0,
"limit" : 1000,
"totalResults" : 2,
"count" : 2,
"hasMore" : false,
"items" :
[
{
"ContactID" : "1",
"EmailAddress" : "[email protected]",
"field1" : "stuff",
©2017 Oracle Corporation. All rights reserved 28 of 146
]
"field2" : "things",
"field3" : "et cetera"
},
{
"ContactID" : "2",
"EmailAddress" : "[email protected]",
"field1" : "more stuff",
"field2" : "other things",
"field3" : "and so on"
}
}
Your app must respond to this call, otherwise Eloqua will think the call has timed out.
Important: If AwesomeApp's Action service is configured to automatically set a contact or custom object record's status to "complete", contacts and custom object records will always move to the next step in the canvas. Eloqua will ignore the details of the response to the notification URL call, even if it is a 400- or 500-level error.
Each batch, delivered through a call to the Notification URL, of Contacts or Custom
Object Records in a step will only remain in the workflow for a maximum of 90 days.
Attempts to operate on them (i.e. set the status to "complete" or "errored”) after 90 days will fail, resulting in the records being stuck in the step, and requiring manual intervention to move them along in the flow. Each batch of records sent through a call to the
Notification URL has an ExecutionId, available as a
, that identifies a unique batch.
If the Action service is not configured to automatically set the status to "complete", AwesomeApp should return a 204 response. This indicates that the response will be asynchronous. AwesomeApp should then create an import to Eloqua using the Bulk API where AwesomeApp specifies a sync action: either “complete” or “errored”.
©2017 Oracle Corporation. All rights reserved 29 of 146
Bulk API Contact Import
1. Create the bulk import definition, setting the status to "complete" to import data.
If there is no data to import, and you only need to update a record's status, you can update a record's status without performing an import by creating a contact sync action definition .
When importing, the "destination" field refers to the Action service's instance - in this example, the instance GUID is f82d50cd-86a9-4fca-b37e-4ec9a98b0339 :
Warning: When referencing service instances, you must transmit the GUID without dashes. The Bulk API will error if you transmit the GUID with the dashes.
POST https://secure.p03.eloqua.com/api/bulk/2.0/contacts/import s
{
"name" : "AwesomeApp Action Response Bulk Import",
"updateRule" : "always",
"fields" : {
"emailAddress" : "{{Contact.Field(C_EmailAddress)}}"
},
"syncActions" : [
{
"destination" : "{{ActionInstance
(f82d50cd86a94fcab37e4ec9a98b0339).Execution[12345]}}",
"action" : "setStatus",
"status" : "
complete"
}
],
"identifierFieldName" : "emailAddress"
}
©2017 Oracle Corporation. All rights reserved 30 of 146
Eloqua’s response will be a 201 Created response that includes a uri parameter, which you can use to identify the import:
{
"name" : "AwesomeApp Action Response Bulk Import",
"updateRule" : "always",
"fields" : {
"emailAddress" : "{{Contact.Field(C_
EmailAddress)}}"
},
"identifierFieldName" : "emailAddress",
"syncActions" : [
{
"destination" : "{{ActionInstance
(f82d50cd86a94fcab37e4ec9a98b0339).Execution[12345]}}",
"action" : "setStatus",
"status" : "complete"
}
],
"isSyncTriggeredOnImport" : false,
"isUpdatingMultipleMatchedRecords" : false,
"uri" : "
/contacts/imports/6",
"createdBy" : "DocsExample",
"createdAt" : "2014-03-06T13:59:00.6600046Z",
"updatedBy" : "DocsExample",
"updatedAt" : "2014-03-06T13:59:00.6600046Z"
}
©2017 Oracle Corporation. All rights reserved 31 of 146
2.
Send Eloqua the data for import as a using the uri :
POST https://secure.p03.eloqua.com/api/bulk/2.0/contacts/i mports/6/data
[
{
},
{
"emailAddress" : "[email protected]"
"emailAddress" : "[email protected]"
}
]
3. Synchronize the data for import:
AwesomeApp’s request:
POST https://secure.p03.eloqua.com/api/bulk/2.0/syncs
{
"syncedInstanceURI":"/contacts/imports/6"
}
Eloqua’s Response:
201 Created
{
"syncedInstanceURI" : "/contacts/imports/6",
"status" : "pending",
"createdAt" : "2014-01-01T13:59:07.1375620Z",
"createdBy" : "DocsExample",
"uri" : "/syncs/6"
}
©2017 Oracle Corporation. All rights reserved 32 of 146
4. You can then use the sync’s uri ( /syncs/6 ) to check the status of the sync:
GET https://secure.p03.eloqua.com/api/bulk/2.0/sync/6
When the sync is complete, Eloqua’s response will resemble:
200 OK
{
"syncedInstanceURI" : "/contacts/imports/6",
"syncStartedAt" : "2014-01-01T13:59:07.1375620Z",
"syncEndedAt" : "2014-01-01T13:59:14.1375620Z",
"status" : "success",
"createdAt" : "2014-01-01T13:59:07.1375620Z",
"createdBy" : "DocsExample",
"uri" : "/syncs/6"
}
Learn more about Bulk API Imports .
©2017 Oracle Corporation. All rights reserved 33 of 146
Bulk API Custom Object Import
1. Create the bulk import definition, setting the status to "complete" to import data.
If there is no data to import, and you only need to update a record's status, you can update a record's status without performing an import by creating a custom object sync action definition .
When importing, the "destination" field refers to the Action service's instance - in this example, the instance GUID is f82d50cd-86a9-4fca-b37e-4ec9a98b0339 :
Warning: When referencing service instances, you must transmit the GUID without dashes. The Bulk API will error if you transmit the GUID with the dashes.
POST https://secure.p03.eloqua.com/api/bulk/2.0/customObjects/9
/imports
{
"name" : "AwesomeApp Action Response Bulk Import",
"updateRule" : "always",
"fields" : {
"email" : "{{CustomObject[9].Field[58]}}"
},
"syncActions" : [
{
"destination" : "{{ActionInstance
(f82d50cd86a94fcab37e4ec9a98b0339).Execution[12345]}}",
"action" : "setStatus",
"status" : "
complete"
}
],
"identifierFieldName" : "email"
}
©2017 Oracle Corporation. All rights reserved 34 of 146
Eloqua’s response will be a 201 Created response that includes a uri parameter, which you can use to identify the import:
HTTP/1.1 201 Created
{
"name" : "AwesomeApp Action Response Bulk Import",
"updateRule" : "always",
"fields" : {
"email" : "{{CustomObject[9].Field[58]}}"
},
"identifierFieldName" : "email",
"syncActions" : [
{
"destination" : "{{ActionInstance
(f82d50cd86a94fcab37e4ec9a98b0339).Execution[12345]}}",
"action" : "setStatus",
"status" : "complete"
}
],
"isSyncTriggeredOnImport" : false,
"isUpdatingMultipleMatchedRecords" : false,
"uri" : " /customObjects/imports/9",
"createdBy" : "DocsExample",
"createdAt" : "2014-03-06T13:59:00.6600046Z",
"updatedBy" : "DocsExample",
"updatedAt" : "2014-03-06T13:59:00.6600046Z"
}
©2017 Oracle Corporation. All rights reserved 35 of 146
2.
Send Eloqua the data for import as a using the uri :
POST https://secure.p03.eloqua.com/api/bulk/2.0/customObje cts/imports/9/data
[
{
},
{
"email" : "[email protected]"
"email" : "[email protected]"
}
]
3. Synchronize the data for import:
AwesomeApp’s request:
POST https://secure.p03.eloqua.com/api/bulk/2.0/syncs
{
"syncedInstanceURI":"/customObjects/imports/9"
}
Eloqua’s Response:
201 Created
{
"syncedInstanceURI" : "/customObjects/imports/9",
"status" : "pending",
"createdAt" : "2014-01-01T13:59:07.1375620Z",
"createdBy" : "DocsExample",
"uri" : "/syncs/9"
}
©2017 Oracle Corporation. All rights reserved 36 of 146
4. You can then use the sync’s uri ( /syncs/9 ) to check the status of the sync:
GET https://secure.p03.eloqua.com/api/bulk/2.0/sync/9
When the sync is complete, Eloqua’s response will resemble:
200 OK
{
"syncedInstanceURI" : "/customObjects/imports/9",
"syncStartedAt" : "2014-01-01T13:59:07.1375620Z",
"syncEndedAt" : "2014-01-01T13:59:14.1375620Z",
"status" : "success",
"createdAt" : "2014-01-01T13:59:07.1375620Z",
"createdBy" : "DocsExample",
"uri" : "/syncs/9"
}
Learn more about Bulk API Imports .
2.3.4 Delete URL
The delete URL is a templated URL pointing to an endpoint for deleting an instance of your service.
The delete URL uses an HTTP DELETE request and there is no content sent in the request body. All common URL template parameters are available (the same as with a create URL). On success, this endpoint should return a 200-level response.
An example delete URL would look something like: https://www.someurl.com/delete/{appId}/{installId}/
{instanceId}/{userName}/{siteName}/{siteId}
©2017 Oracle Corporation. All rights reserved 37 of 146
Note: Delete calls are not sent in real time, but are done in a batch once daily.
Learn more about Bulk API Imports .
2.4 Develop an Oracle Eloqua AppCloud Decision Service
Decisions are steps on a campaign or program canvas that directly control the path a contact or custom object takes as they flow through a canvas. Decision steps delegate the decision making to an external system, which responds with a "yes" or "no" for each object flowing through the canvas, determining which path the contact or custom object should take.
Decisions follow the
. The following sections describe Decision-specific details and provide the endpoints needed to develop a Decision service. If you are not familiar with the general flow for the instantiation-execution model, you should read that first.
Eloqua signs all outgoing calls with OAuth 1.0a so the receiving system can validate that the call was sent by Eloqua. Refer to the OAuth 1.0a spec or OAuth 1.0 RFC for more information.
©2017 Oracle Corporation. All rights reserved 38 of 146
©2017 Oracle Corporation. All rights reserved 39 of 146
2.4.1 Create URL
Eloqua’s call to the CreateURL:
POST https://example.com/awesomeapp/decide/create?instance=9347bfe
1-9c72-409c-a5cd-402ff74f0caa
{}
AwesomeApp’s response is a DTO describing the fields Eloqua should transmit when the service in executed. You can include a maximum of 249 fields in your record definition.
Example response for contacts:
{
}
"recordDefinition": {
"ContactID": "{{Contact.Id}}",
},
"EmailAddress": "{{Contact.Field(C_EmailAddress)}}"
"requiresConfiguration": true
Example response for custom objects:
{
}
"recordDefinition": {
},
"Email": "{{CustomObject[1].Field[4]}}"
"requiresConfiguration": true requiresConfiguration is an optional Boolean parameter which tells Eloqua whether user configuration is required before the app can be used. If set to true , users will be unable to activate a campaign or program containing the unconfigured app service instance. Eloqua will display an error message.
©2017 Oracle Corporation. All rights reserved 40 of 146
Warning: All field names and values in Eloqua data transfer objects are case sensitive. Be sure to reproduce them exactly. For example: {{Contact.id}} would fail if the correct form is
{{Contact.Id}} .
2.4.2 Configure URL
When a user clicks the edit button on the service instance and makes changes through the Configure
URL that require an updated recordDefinition DTO, AwesomeApp must call out to Eloqua’s Cloud API
endpoint with that updated DTO:
Example request for contacts:
PUT https://secure.p03.eloqua.com/api/cloud/1.0/decisions/instance s/9347bfe1-9c72-409c-a5cd-402ff74f0caa
{
"recordDefinition":
{
"ContactID" : "{{Contact.Id}}",
"EmailAddress" : "{{Contact.Field(C_
EmailAddress)}}",
"field1" : "{{Contact.Field(C_field1)}}",
"field2" : "{{Contact.Field(C_field2)}}",
"field3" : "{{Contact.Field(C_field3)}}"
},
"requiresConfiguration": false
}
Example request for custom objects:
PUT https://secure.p03.eloqua.com/api/cloud/1.0/decisions/instance s/9347bfe1-9c72-409c-a5cd-402ff74f0caa
{
"recordDefinition": {
©2017 Oracle Corporation. All rights reserved 41 of 146
}
"Email": "{{CustomObject[1].Field[4]}}"
},
"requiresConfiguration": false requiresConfiguration is an optional Boolean parameter which tells Eloqua whether user configuration is required before the app can be used. If set to true , users will be unable to activate a campaign or program containing the unconfigured app service instance. Eloqua will display an error message.
Use the Configure URL response to set requiresConfiguration to false when your app's configuration acceptance criteria have been met.
Warning: If the campaign or program is not in draft mode, attempting to set requiresConfiguration to true will result in an error.
2.4.3 Notification URL
Eloqua’s call to the Notification URL transmits the requested fields in the items parameter:
POST https://example.com/awesomeapp/decide/notify?instance=9347bfe
1-9c72-409c-a5cd-402ff74f0caa&asset=456
{
"offset" : 0,
"limit" : 1000,
"totalResults" : 2,
"count" : 2,
"hasMore" : false,
"items" :
[
{
"ContactID" : "1",
"EmailAddress" : "[email protected]",
"field1" : "stuff",
"field2" : "things",
"field3" : "et cetera"
},
©2017 Oracle Corporation. All rights reserved 42 of 146
}
]
{
"ContactID" : "2",
"EmailAddress" : "[email protected]",
"field1" : "more stuff",
"field2" : "other things",
"field3" : "and so on"
}
Important: Each batch, delivered through a call to the Notification URL, of Contacts or Custom
Object Records in a step will only remain in the workflow for a maximum of 90 days. Attempts to operate on them (i.e. set the status to "complete" or "errored”) after 90 days will fail, resulting in the records being stuck in the step, and requiring manual intervention to move them along in the flow. Each batch of records sent through a call to the Notification URL has an ExecutionId, available as a
, that identifies a unique batch.
AwesomeApp responds with a 204 response, indicating that the response will be asynchronous, followed by an import to Eloqua's Bulk API, where AwesomeApp specifies a sync action. For
Decisions, the sync action is either "yes", "no", or "errored". AwesomeApp will need to create multiple imports for the different statuses, with contacts or custom objects that should follow the "no" path in one import and then contacts and custom objects that should follow the "yes" path in another.
Note that the maximum import size per batch is 5,000: if you have more than 5,000 contacts or custom objects, break your data up into multiple imports.
Bulk API Contact Import
1. Create the bulk import definition, setting the status to "yes" to import data.
If there is no data to import, and you only need to update a record's status, you can update a record's status without performing an import by creating a contact sync action definition .
When importing, the "destination" field refers to the AppCloud Decision service's instance - in this example, the instance ID is 9347bfe1-9c72-409c-a5cd-402ff74f0caa :
©2017 Oracle Corporation. All rights reserved 43 of 146
Warning: When referencing service instances, you must transmit the GUID without dashes. The Bulk API will error if you transmit the GUID with the dashes.
POST https://secure.p03.eloqua.com/api/bulk/2.0/contacts/import s
{
"name" : "AwesomeApp Decision Response Bulk Import",
"updateRule" : "always",
"fields" : {
"emailAddress" : "{{Contact.Field(C_EmailAddress)}}"
}
"syncActions" : [
{
"destination" : "{{DecisionInstance
(9347bfe19c72409ca5cd402ff74f0caa).Execution[12345]}}",
"action" : "setStatus",
"status" : " yes"
}
],
"identifierFieldName" : "emailAddress"
}
Eloqua’s response will be a 201 Created response that includes a uri parameter, which you can use to identify the import:
{
"name": "AwesomeApp Decision Response Bulk Import",
©2017 Oracle Corporation. All rights reserved 44 of 146
"updateRule": "always",
"fields": {
"emailAddress": "{{Contact.Field(C_EmailAddress)}}"
},
"identifierFieldName": "emailAddress",
"syncActions": [
{
"destination": "{{DecisionInstance
(9347bfe19c72409ca5cd402ff74f0caa).Execution[12345]}}",
"action": "setStatus",
"status": "yes"
}
],
"isSyncTriggeredOnImport": false,
"isUpdatingMultipleMatchedRecords": false,
"uri": "
/contacts/imports/6",
"createdBy": "DocsExample",
"createdAt": "2014-03-06T13:59:00.6600046Z",
"updatedBy": "DocsExample",
"updatedAt": "2014-03-06T13:59:00.6600046Z"
}
2.
Send Eloqua the data for import as a using the uri :
POST https://secure.p03.eloqua.com/api/bulk/2.0/contacts/i mports/6/data
[
©2017 Oracle Corporation. All rights reserved 45 of 146
{
"emailAddress" : "[email protected]"
},
{
"emailAddress" : "[email protected]"
}
]
3. Synchronize the data for import:
AwesomeApp’s request:
POST https://secure.p03.eloqua.com/api/bulk/2.0/syncs
{
"syncedInstanceURI":"/contacts/imports/6"
}
Eloqua’s Response:
201 Created
{
"syncedInstanceURI" : "/contacts/imports/6",
"status" : "pending",
"createdAt" : "2014-01-01T13:59:07.1375620Z",
"createdBy" : "DocsExample",
"uri" : "/syncs/6"
}
4. You can then use the sync’s uri ( /syncs/6 ) to check the status of the sync:
GET https://secure.p03.eloqua.com/api/bulk/2.0/sync/6
©2017 Oracle Corporation. All rights reserved 46 of 146
When the sync is complete, Eloqua’s response will resemble:
200 OK
{
"syncedInstanceURI" : "/contacts/imports/6",
"syncStartedAt" : "2014-01-01T13:59:07.1375620Z",
"syncEndedAt" : "2014-01-01T13:59:14.1375620Z",
"status" : "success",
"createdAt" : "2014-01-01T13:59:07.1375620Z",
"createdBy" : "DocsExample",
"uri" : "/syncs/6"
}
Bulk API Custom Object Import
1. Create the bulk import definition, setting the status to "yes" to import data.
If there is no data to import, and you only need to update a record's status, you can update a record's status without performing an import by creating a custom object sync action definition .
When importing, the "destination" field refers to the Decision service's instance - in this example, the instance GUID is f82d50cd-86a9-4fca-b37e-4ec9a98b0339 :
Warning: When referencing service instances, you must transmit the GUID without dashes. The Bulk API will error if you transmit the GUID with the dashes.
POST https://secure.p03.eloqua.com/api/bulk/2.0/customObjects/9
/imports
{
"name" : "AwesomeApp Decision Response Bulk Import",
©2017 Oracle Corporation. All rights reserved 47 of 146
"updateRule" : "always",
"fields" : {
"email" : "{{CustomObject[9].Field[58]}}"
},
"syncActions" : [
{
"destination" : "{{DecisionInstance
(f82d50cd86a94fcab37e4ec9a98b0339).Execution[12345]}}",
"action" : "setStatus",
"status" : "
yes"
}
],
"identifierFieldName" : "email"
}
Eloqua’s response will be a 201 Created response that includes a uri parameter, which you can use to identify the import:
HTTP/1.1 201 Created
{
"name" : "AwesomeApp Decision Response Bulk
Import",
"updateRule" : "always",
"fields" : {
"email" : "{{CustomObject[9].Field[58]}}"
},
"identifierFieldName" : "email",
"syncActions" : [
{
©2017 Oracle Corporation. All rights reserved 48 of 146
"destination" : "{{DecisionInstance
(f82d50cd86a94fcab37e4ec9a98b0339).Execution[12345]}}",
"action" : "setStatus",
"status" : "yes"
}
],
"isSyncTriggeredOnImport" : false,
"isUpdatingMultipleMatchedRecords" : false,
"uri" : " /customObjects/imports/9",
"createdBy" : "DocsExample",
"createdAt" : "2014-03-06T13:59:00.6600046Z",
"updatedBy" : "DocsExample",
"updatedAt" : "2014-03-06T13:59:00.6600046Z"
}
2.
Send Eloqua the data for import as a using the uri :
POST https://secure.p03.eloqua.com/api/bulk/2.0/customObje cts/imports/9/data
[
{
},
{
"email" : "[email protected]"
"email" : "[email protected]"
}
]
3. Synchronize the data for import:
©2017 Oracle Corporation. All rights reserved 49 of 146
AwesomeApp’s request:
POST https://secure.p03.eloqua.com/api/bulk/2.0/syncs
{
"syncedInstanceURI":"/customObjects/imports/9"
}
Eloqua’s Response:
201 Created
{
"syncedInstanceURI" : "/customObjects/imports/9",
"status" : "pending",
"createdAt" : "2014-01-01T13:59:07.1375620Z",
"createdBy" : "DocsExample",
"uri" : "/syncs/9"
}
4. You can then use the sync’s uri ( /syncs/9 ) to check the status of the sync:
GET https://secure.p03.eloqua/api/bulk/2.0/sync/9
When the sync is complete, Eloqua’s response will resemble:
200 OK
{
"syncedInstanceURI" : "/customObjects/imports/9",
"syncStartedAt" : "2014-01-01T13:59:07.1375620Z",
"syncEndedAt" : "2014-01-01T13:59:14.1375620Z",
©2017 Oracle Corporation. All rights reserved 50 of 146
"status" : "success",
"createdAt" : "2014-01-01T13:59:07.1375620Z",
"createdBy" : "DocsExample",
"uri" : "/syncs/9"
}
Learn more about Bulk API Imports .
2.4.4 Delete URL
The delete URL is a templated URL pointing to an endpoint for deleting an instance of your service.
The delete URL uses an HTTP DELETE request and there is no content sent in the request body. All common URL template parameters are available (the same as with a create URL). On success, this endpoint should return a 200-level response.
An example delete URL would look something like: https://www.someurl.com/delete/{appId}/{installId}/
{instanceId}/{userName}/{siteName}/{siteId}
Note: Delete calls are not sent in real time, but are done in a batch once daily.
2.5 Develop an Oracle Eloqua AppCloud Content Service
Content allows marketers to source pieces of content in Eloqua emails and Landing Pages, from an external source. This is the new and improved version of Eloqua's Cloud Components framework, and it includes many improvements such as asynchronous bulk processing (for emails), the ability to fully test the content service within Eloqua, and design-time interaction with the Email and Landing Page editors.
©2017 Oracle Corporation. All rights reserved 51 of 146
Content follows the
instantiation-execution model .The following sections describe Content-specific
details and provide the endpoints needed to develop a Content service. If you are not familiar with the general flow for the instantiation-execution model, you should read that first.
Eloqua signs all outgoing calls with OAuth 1.0a so the receiving system can validate that the call was sent by Eloqua. Refer to the OAuth 1.0a spec or OAuth 1.0 RFC for more information.
©2017 Oracle Corporation. All rights reserved 52 of 146
2.5.1 Content Service Flow Diagrams
©2017 Oracle Corporation. All rights reserved 53 of 146
For Emails
©2017 Oracle Corporation. All rights reserved 54 of 146
©2017 Oracle Corporation. All rights reserved 55 of 146
For Landing Pages
2.5.2 Create URL
Eloqua’s call to the CreateURL:
POST https://example.com/awesomeapp/content/create?instance=f82d50c d-86a9-4fca-b37e-4ec9a98b0339
{}
©2017 Oracle Corporation. All rights reserved 56 of 146
For a Content service, AwesomeApp's response must include height , width , and default editorImageUrl , as well as the recordDefinition parameter. You can include a maximum of 250 fields in your record definition.
The height and width parameters define the size of the content instance when rendered, while editorImageUrl specifies the URL for an image that Eloqua will display in the editor's design surface.
editorImageUrl is not a templated URL.
{
}
"recordDefinition": {
"ContactID": "{{Contact.Id}}"
},
"height": 256,
"width": 256,
"editorImageUrl": "https://example.com/image.png",
"requiresConfiguration": true requiresConfiguration is an optional Boolean parameter which tells Eloqua whether user configuration is required before the app can be used. If set to true
, users will be unable to save an email or landing page asset containing the unconfigured app service instance. Eloqua will display an error message.
Warning: All field names and values in Eloqua data transfer objects are case sensitive. Be sure to reproduce them exactly. For example: {{Contact.id}} would fail if the correct form is
{{Contact.Id}} .
2.5.3 Configure URL
When a user clicks the edit button on the service instance and makes changes through the Configure
URL that require an updated recordDefinition DTO, AwesomeApp must call out to Eloqua’s Cloud API
endpoint with that updated DTO:
PUT
©2017 Oracle Corporation. All rights reserved 57 of 146
https://secure.eloqua.com/api/cloud/1.0/contents/instances/f82 d50cd-86a9-4fca-b37e-4ec9a98b0339
{
"recordDefinition": {
"ContactID": "{{Contact.Id}}",
"EmailAddress": "{{Contact.Field(C_EmailAddress)}}",
},
"height": 256,
"width": 256,
"editorImageUrl": "https://example.com/image.png",
"requiresConfiguration": false
} requiresConfiguration is an optional Boolean parameter which tells Eloqua whether user configuration is required before the app can be used. If set to true
, users will be unable to save an email or landing page asset containing the unconfigured app service instance. Eloqua will display an error message.
Use the Configure URL response to set requiresConfiguration to false when your app's configuration acceptance criteria have been met.
Warning: If the email or landing page asset is not in draft mode, attempting to set requiresConfiguration to true will result in an error.
2.5.4 Notification URL
Eloqua’s call to the Notification URL transmits the requested fields in the items parameter:
POST https://example.com/awesomeapp/content/notify?instance=f82d50c d-86a9-4fca-b37e-4ec9a98b0339&asset=456
{
"offset": 0,
"limit": 1000,
"totalResults": 2,
"count": 2,
"hasMore": false,
"items":
©2017 Oracle Corporation. All rights reserved 58 of 146
[
]
{
},
{
"ContactID": "1",
"EmailAddress": "[email protected]"
"ContactID": "2",
"EmailAddress": "[email protected]"
}
}
For Content services, AwesomeApp's response will depend on whether the content is for an Email or a
Landing Page:
For Landing Pages, the response is a 200 status code with text/html content inline. If the response takes too long, Eloqua uses the default content for that contact.
For Email, AwesomeApp can respond in one of two ways:
Inline Response
: A 200 status code with text/html content inline, in which case Eloqua uses the same content for each contact (this is the same response type as used for landing pages), or
Asynchronous Response
: A 204 status code, indicating that the call was accepted, but there is no content to return directly. The service should process asynchronously and then call the Bulk
API.
Important: Emails deployments will fail if emails contain empty text or empty html content.
Inline Response
The inline response for landing pages and email is a 200 status code, followed by the text/html content.
For example:
{
<div>
<h1>External Content</h1>
<p>This content is used for all recipients for this request.</p>
</div>
©2017 Oracle Corporation. All rights reserved 59 of 146
}
Asynchronous Response
For the asynchronous response, AwesomeApp responds with a 204 status code, indicating that the response will be asynchronous, followed by one or more imports to Eloqua's Bulk API, where contactspecific content is updated with the ContactId and the instance Id, mapping the contact to the new html content.
Note: The maximum import size per batch is 5,000. If you have more than 5,000 contacts, break your data up into multiple imports.
1. Create the bulk import definition, including a Content parameter whose value is the service instance ID and execution ID. Including the execution ID enables you to differentiate between different uses of the asset, for example, when multiple campaigns use the same email template that contains the service instance:
POST https://secure.eloqua.com/api/bulk/2.0/contacts/imports
{
"name": "AwesomeApp Content Response Bulk Import",
"updateRule": "always",
"fields": {
"EmailAddress": "{{Contact.Field(C_
EmailAddress)}}",
"Content": "{{ContentInstance
(f82d50cd86a94fcab37e4ec9a98b0339).Execution[21]}}"
},
"identifierFieldName": "EmailAddress"
}
©2017 Oracle Corporation. All rights reserved 60 of 146
Eloqua’s response will be a 201 Created response that includes a uri parameter, which you can use to identify the import:
HTTP/1.1 201 Created
{
"name" : "AwesomeApp Content Response Bulk Import",
"updateRule" : "always",
"fields" : {
"EmailAddress" : "{{Contact.Field(C_
EmailAddress)}}",
"Content" : "{{ContentInstance
(f82d50cd86a94fcab37e4ec9a98b0339).Execution[21]}}"
},
"identifierFieldName" : "EmailAddress",
"isSyncTriggeredOnImport" : false,
"isUpdatingMultipleMatchedRecords" : false,
"uri" : " /contacts/imports/6",
"createdBy" : "DocsExample",
"createdAt" : "2014-03-06T13:59:00.6600046Z",
"updatedBy" : "DocsExample",
"updatedAt" : "2014-03-06T13:59:00.6600046Z"
}
2. Send Eloqua the data for import, using the Content parameter with the content the Eloqua should use for each contact:
POST https://secure.eloqua.com/api/bulk/2.0/contacts/imports/6/ data
[
©2017 Oracle Corporation. All rights reserved 61 of 146
]
{
},
{
"EmailAddress" : "[email protected]",
"Content" : "<p>This is the content for Sylvie</p>"
}
"EmailAddress" : "[email protected]",
"Content" : "<p>This is the content for Fred</p>"
3. Synchronize the data for import:
AwesomeApp’s request:
POST https://secure.p03.eloqua.com/api/bulk/2.0/syncs
{
"syncedInstanceURI":"/contacts/imports/6"
}
Eloqua’s Response:
201 Created
{
"syncedInstanceURI" : "/contacts/imports/6",
"status" : "pending",
"createdAt" : "2014-01-01T13:59:07.1375620Z",
"createdBy" : "DocsExample",
"uri" : "/syncs/6"
}
©2017 Oracle Corporation. All rights reserved 62 of 146
4. You can then use the sync’s uri ( /syncs/6 ) to check the status of the sync:
GET https://secure.p03.eloqua.com/api/bulk/2.0/sync/6
When the sync is complete, Eloqua’s response will resemble:
200 OK
{
"syncedInstanceURI" : "/contacts/imports/6",
"syncStartedAt" : "2014-01-01T13:59:07.1375620Z",
"syncEndedAt" : "2014-01-01T13:59:14.1375620Z",
"status" : "success",
"createdAt" : "2014-01-01T13:59:07.1375620Z",
"createdBy" : "DocsExample",
"uri" : "/syncs/6"
}
Note: If you want your content service hyperlinks to take advantage of Eloqua's dynamic link tracking features, it will not do so automatically. To enable Eloqua tracking for a link within your content service:
If the destination page has an Eloqua tracking script installed you should append s=<span class=eloquaemail>siteid</span>&elq=<span class=eloquaemail>recipientid</span> to the URL.
If the destination page does not have an Eloqua tracking script installed you should append elqtrack=true to the URL.
©2017 Oracle Corporation. All rights reserved 63 of 146
2.5.5 Delete URL
The delete URL is a templated URL pointing to an endpoint for deleting an instance of your service.
The delete URL uses an HTTP DELETE request and there is no content sent in the request body. All common URL template parameters are available (the same as with a create URL). On success, this endpoint should return a 200-level response.
An example delete URL would look something like: https://www.someurl.com/delete/{appId}/{installId}/
{instanceId}/{userName}/{siteName}/{siteId}
Note: Delete calls are not sent in real time, but are done in a batch once daily.
2.6 Develop an Oracle Eloqua AppCloud Feeder Service
Feeders allow external systems to determine and control which contacts or custom objects enter into a campaign or program canvas, and when. Developers can now build apps that utilize data in thirdparty systems to drive campaign or program membership.
Feeders follows the
instantiation-execution model . The following sections describe Feeder-specific
details and provide the endpoints needed to develop a Feeder service. If you are not familiar with the general flow for the instantiation-execution model, you should read that first.
Eloqua signs all outgoing calls with OAuth 1.0a so the receiving system can validate that the call was sent by Eloqua. Refer to the OAuth 1.0a spec or OAuth 1.0 RFC for more information.
©2017 Oracle Corporation. All rights reserved 64 of 146
©2017 Oracle Corporation. All rights reserved 65 of 146
2.6.1 Create URL
Eloqua’s call to the CreateURL:
POST https://example.com/awesomeapp/feeders/create?siteid=123instan ce=9347bfe1-9c72-409c-a5cd-402ff74f0caa
{}
AwesomeApp’s response is a 200-level HTTP response:
HTTP/1.1 200 Ok
{
"requiresConfiguration": true
} requiresConfiguration is an optional Boolean parameter which tells Eloqua whether user configuration is required before the app can be used. If set to true , users will be unable to activate a campaign or program containing the unconfigured app service instance. Eloqua will display an error message.
2.6.2 Configure URL
When a user clicks the edit button on the service instance and makes changes through the Configure
URL, AwesomeApp must call out to Eloqua’s Cloud API
endpoint:
PUT https://secure.eloqua.com/api/cloud/1.0/feeders/instances/93
47bfe1-9c72-409c-a5cd-402ff74f0caa
{
}
"requiresConfiguration": false
©2017 Oracle Corporation. All rights reserved 66 of 146
requiresConfiguration is an optional Boolean parameter which tells Eloqua whether user configuration is required before the app can be used. If set to true , users will be unable to activate a campaign or program containing the unconfigured app service instance. Eloqua will display an error message.
Use the Configure URL response to set requiresConfiguration to false when your app's configuration acceptance criteria have been met.
Warning: If the campaign or program is not in draft mode, attempting to set requiresConfiguration to true will result in an error.
2.6.3 Notification URL
Eloqua's call to the Campaign Status Notification URL tells AwesomeApp that the campaign or program is active and ready to receive contacts or custom object records. These calls are made using
to differentiate the call out. For example, the notification call for activating a campaign would resemble:
POST https://example.com/awesomeapp/feeders/notify?instance=9347bfe
1-9c72-409c-a5cd-402ff74f0caa&asset=456&status=Activated
When the campaign or program is deactivated, Eloqua's call to the Campaign Status Notification
URL tells AwesomeApp to stop sending contacts or custom object records. The deactivate notification would resemble:
POST https://example.com/awesomeapp/feeders/notify?instance=9347bfe
1-9c72-409c-a5cd-402ff74f0caa&asset=456&status=Draft
After the campaign or program is activated, AwesomeApp responds with a 204 response, indicating that the response will be asynchronous, followed by an import to Eloqua's Bulk API, where
AwesomeApp specifies a sync action. For AppCloud Feeders, the sync action sets the AppCloud
©2017 Oracle Corporation. All rights reserved 67 of 146
Feeder instance's status to complete. Note that the maximum import size per batch is 5,000: if you have more than 5,000 records, break your data up into multiple batches.
Bulk API Contact Import
1. Create the bulk import definition, setting the status of the AppCloud Feeder instance to complete. The "destination" field refers to the AppCloud Feeders service's instance - in this example, the instance ID is 9347bfe1-9c72-409c-a5cd-402ff74f0caa :
Warning: When referencing service instances, you must transmit the GUID without dashes. The Bulk API will error if you transmit the GUID with the dashes.
POST https://secure.p03.eloqua.com/api/bulk/2.0/contacts/imp orts
{
"name" : "AwesomeApp Feeder Bulk Import",
"updateRule" : "always",
"fields" : {
"emailAddress" : "{{Contact.Field(C_
EmailAddress)}}"
}
"syncActions" : [
{
"destination" : "{{FeederInstance
(9347bfe19c72409ca5cd402ff74f0caa)}}",
"action" : "setStatus",
"status" : " complete"
}
],
©2017 Oracle Corporation. All rights reserved 68 of 146
}
"identifierFieldName" : "emailAddress"
Warning: All field names and values in Eloqua data transfer objects are case sensitive.
Be sure to reproduce them exactly. For example: {{Contact.id}} would fail if the correct form is {{Contact.Id}} .
Eloqua’s response will be a 201 Created response that includes a uri parameter, which you can use to identify the import:
{
"name": "AwesomeApp Feeder Bulk Import",
"updateRule": "always",
"fields": {
"emailAddress": "{{Contact.Field(C_EmailAddress)}}"
},
"identifierFieldName": "emailAddress",
"syncActions": [
{
"destination": "{{FeederInstance
(9347bfe19c72409ca5cd402ff74f0caa)}}",
"action": "setStatus",
"status": "complete"
],
}
"isSyncTriggeredOnImport": false,
"isUpdatingMultipleMatchedRecords": false,
©2017 Oracle Corporation. All rights reserved 69 of 146
}
"uri": " /contacts/imports/6",
"createdBy": "DocsExample",
"createdAt": "2014-03-06T13:59:00.6600046Z",
"updatedBy": "DocsExample",
"updatedAt": "2014-03-06T13:59:00.6600046Z"
2.
Send Eloqua the data for import as a using the uri :
POST https://secure.p03.eloqua.com/api/bulk/2.0/contacts/i mports/6/data
[
{
},
{
"emailAddress" : "[email protected]"
"emailAddress" : "[email protected]"
}
]
3. Synchronize the data for import:
AwesomeApp’s request:
POST https://secure.p03.eloqua.com/api/bulk/2.0/syncs
{
"syncedInstanceURI":"/contacts/imports/6"
}
Eloqua’s Response:
201 Created
©2017 Oracle Corporation. All rights reserved 70 of 146
{
"syncedInstanceURI" : "/contacts/imports/6",
"status" : "pending",
"createdAt" : "2014-01-01T13:59:07.1375620Z",
"createdBy" : "DocsExample",
"uri" : "/syncs/6"
}
4. You can then use the sync’s uri ( /syncs/6 ) to check the status of the sync:
GET https://secure.p03.eloqua.com/api/bulk/2.0/sync/6
When the sync is complete, Eloqua’s response will resemble:
200 OK
{
"syncedInstanceURI" : "/contacts/imports/6",
"syncStartedAt" : "2014-01-01T13:59:07.1375620Z",
"syncEndedAt" : "2014-01-01T13:59:14.1375620Z",
"status" : "success",
"createdAt" : "2014-01-01T13:59:07.1375620Z",
"createdBy" : "DocsExample",
"uri" : "/syncs/6"
}
Bulk API Custom Object Import
1. Create the bulk import definition, setting the status to yes. The "destination" field refers to the
Feeder service's instance - in this example, the instance GUID is f82d50cd-86a9-4fca-b37e-
©2017 Oracle Corporation. All rights reserved 71 of 146
4ec9a98b0339 :
Warning: When referencing service instances, you must transmit the GUID without dashes. The Bulk API will error if you transmit the GUID with the dashes.
POST https://secure.p03.eloqua.com/api/bulk/2.0/customObjects/9
/imports
{
"destination" : "{{FeederInstance
(f82d50cd86a94fcab37e4ec9a98b0339)}}",
"action" : "setStatus",
"status" : " complete"
}
],
"identifierFieldName" : "email"
}
"name" : "AwesomeApp Feeder Response Bulk Import",
"updateRule" : "always",
"fields" : {
"email" : "{{CustomObject[9].Field[58]}}"
},
"syncActions" : [
{
Eloqua’s response will be a 201 Created response that includes a uri parameter, which you can use to identify the import:
HTTP/1.1 201 Created
©2017 Oracle Corporation. All rights reserved 72 of 146
{
"name" : "AwesomeApp Feeder Response Bulk Import",
"updateRule" : "always",
"fields" : {
"email" : "{{CustomObject[9].Field[58]}}"
},
"identifierFieldName" : "email",
"syncActions" : [
{
"destination" : "{{FeederInstance
(f82d50cd86a94fcab37e4ec9a98b0339)}}",
"action" : "setStatus",
"status" : "complete"
}
],
"isSyncTriggeredOnImport" : false,
"isUpdatingMultipleMatchedRecords" : false,
"uri" : " /customObjects/imports/9",
"createdBy" : "DocsExample",
"createdAt" : "2014-03-06T13:59:00.6600046Z",
"updatedBy" : "DocsExample",
"updatedAt" : "2014-03-06T13:59:00.6600046Z"
}
2.
Send Eloqua the data for import as a using the uri :
POST
©2017 Oracle Corporation. All rights reserved 73 of 146
https://secure.p03.eloqua.com/api/bulk/2.0/customObje cts/imports/9/data
[
{
},
{
"email" : "[email protected]"
"email" : "[email protected]"
}
]
3. Synchronize the data for import:
AwesomeApp’s request:
POST https://secure.p03.eloqua.com/api/bulk/2.0/syncs
{
"syncedInstanceURI":"/customObjects/imports/9"
}
Eloqua’s Response:
201 Created
{
"syncedInstanceURI" : "/customObjects/imports/9",
"status" : "pending",
"createdAt" : "2014-01-01T13:59:07.1375620Z",
"createdBy" : "DocsExample",
"uri" : "/syncs/9"
}
4. You can then use the sync’s uri ( /syncs/9 ) to check the status of the sync:
©2017 Oracle Corporation. All rights reserved 74 of 146
GET https://secure.p03.eloqua.com/api/bulk/2.0/sync/9
When the sync is complete, Eloqua’s response will resemble:
200 OK
{
"syncedInstanceURI" : "/customObjects/imports/9",
"syncStartedAt" : "2014-01-01T13:59:07.1375620Z",
"syncEndedAt" : "2014-01-01T13:59:14.1375620Z",
"status" : "success",
"createdAt" : "2014-01-01T13:59:07.1375620Z",
"createdBy" : "DocsExample",
"uri" : "/syncs/9"
}
Learn more about Bulk API Imports .
2.6.4 Delete URL
The delete URL is a templated URL pointing to an endpoint for deleting an instance of your service.
The delete URL uses an HTTP DELETE request and there is no content sent in the request body. All common URL template parameters are available (the same as with a create URL). On success, this endpoint should return a 200-level response.
An example delete URL would look something like: https://www.someurl.com/delete/{appId}/{installId}/
{instanceId}/{userName}/{siteName}/{siteId}
Note: Delete calls are not sent in real time, but are done in a batch once daily.
©2017 Oracle Corporation. All rights reserved 75 of 146
2.7 Develop an Oracle Eloqua AppCloud Menu Service
The Menus service is all about Context. With Menus, you can build an App that enables a marketer to launch an externally-hosted application from within Eloqua via a menu dock. This menu dock floats on the right side of the screen in the Eloqua's Campaign Canvas or the asset editor screens. When a marketer clicks on your Menu App, Eloqua calls out to your service via the action URL, passing along context-specific data to your App.
Suppose AwesomeApp has a Menu service. When a marketing user clicks on AwesomeApp, they’re directed to the callout URL: https://example.com/awesome/callout . The call can include contextual information for your app to use. Available attributes include: siteId and siteName : these describe the Eloqua "site", generally the company or organization of the user userId and userName : the Eloqua username and id for the user who selected the Menu service userCulture : the linguistic profile of the user. Eloqua uses Microsoft’s CultureInfo class to define culture. For example, for English (United States), the code is en-US ; for French
(Canada), fr-CA assetId and assetName : the ID and name of the asset that the user was viewing when they opened the Menu assetType : the type of asset, that the user was viewing when they opened the Menu. Assets include “Account”, “Campaign”, “Contact”, “Landing Page”, “Template”, and so on.
The actual call to AwesomeApp would then resemble:
GET https://example.com/awesome/callout?siteId=123&siteName=Eloqua
&userId=1234&userName=Docs.Example&userCulture=en-
US&assetId=4&assetName=Docs%20Example%20Campaign&assetType=Cam paign
Eloqua signs all outgoing calls with OAuth 1.0a so the receiving system can validate that the call was sent by Eloqua. Refer to the OAuth 1.0a spec or OAuth 1.0 RFC for more information.
©2017 Oracle Corporation. All rights reserved 76 of 146
2.8 Develop an Oracle Eloqua AppCloud Firehose Service
Eloqua’s Firehose service type enables third-parties to build a service that receives a notification when a marketer performs an action in Eloqua. When a marketer creates a campaign or edits an email, for example, Eloqua can call out to the third-party with the update.
Firehose supports subscriptions to a wide variety of events for the different asset types:
Email: Created, Updated, Deleted
LandingPage: Created, Updated, Deleted
ContactSegment: Created, Updated, Deleted
Form: Created, Updated, Deleted
Campaign: Created, Updated, Deleted, Draft, DraftApproved, DraftWaitingApproval,
ActivatedBySchedule, CampaignLandingPageAdded, CampaignEmailAdded,
CampaignLandingPageRemoved, CampaignEmailRemoved
Program: Created, Updated, Deleted, Draft, Activated, Paused
When you configure your App, you specify which events to subscribe to in the pattern. Then, when a marketer triggers one of those events, Eloqua calls out to the configured notification URL with the data specified in the Firehose pattern.
For example, AwesomeApp has a Firehose service and is configured to request all campaign-related events. The call to its notification URL would then resemble:
POST https://example.com/firehose
{
"siteId": "123",
"assetId": "9999",
"assetType": "Campaign",
"eventDate": "12/12/2014 12:00:01 AM",
"eventType": "Updated",
"userId": "1234",
"userName": "Docs.Example",
"msgAttributes": {
"name": "name_of_updated_asset",
"statuschangedby": "1234",
"statuschangedat": "12/12/2014 12:00:00 AM"
©2017 Oracle Corporation. All rights reserved 77 of 146
},
"oath_consumerkey": "stuff"
}
Eloqua signs all outgoing calls with OAuth 1.0a so the receiving system can validate that the call was sent by Eloqua. Refer to the OAuth 1.0a spec or OAuth 1.0 RFC for more information.
Note: If a Firehose service is configured to receive form-related or segment-related events, App providers should expect to see two events whenever a form or segment is created or saved.
When a form is created, Eloqua sends a POST request (for the creation) and a PATCH request (for the update). App providers should expect to see two events in these scenarios.
©2017 Oracle Corporation. All rights reserved 78 of 146
3 Register Your App
When you have developed an app and are ready to start testing it, you need to register it with Eloqua.
By now, you will have already
in your Eloqua development instance.
Now, you need to register your app and services.
Once registered, you can test your Apps within your instance to make sure they work as expected, and release the apps selectively or to the general public.
3.1 Step 1: Register the App
To register your app, select Settings > AppCloud Developer.
If you have not yet registered any Apps, you will see a “You currently have no apps” message, and the
Create App button.
If you have already registered an App, it will be listed alongside the Create App button. To register your App, click Create App.
3.1.1 App information
The
Create App
screen prompts you to fill in a number of fields that describe your App. Complete these fields with the relevant information. Current fields include Name, Description, and Icon.
Warning: the Name field is limited to 100 characters and the Description field is limited to
4000 characters.
©2017 Oracle Corporation. All rights reserved 79 of 146
3.1.2 Lifecycle fields
Enable URL:The URL called when the App is first installed or when it is reconfigured. This is a templated URL which should include, at a minimum, the {
} ,
} , and
} parameters. WIthout the callback URL you will not be able to complete the installation flow if your app requires configuring (for example, to use OAuth).
Configure URL: The URL called when the app is configured.
Status URL:The URL called when a user checks the App’s connection.
Learn how to respond when Eloqua calls the Status URL
.
Uninstall URL: The URL called when a user uninstalls the app. This allows Eloqua to notify the app provider when someone uninstalls their app from the appcloud catalog. This URL supports templated parameters such as
} ,
} , etc.
3.1.3 Authentication to Eloqua
Apps for the AppCloud use OAuth for authentication.
OAuth Callback URL: the URL that the users should be redirected to after installing the app and authenticating with Eloqua.
©2017 Oracle Corporation. All rights reserved 80 of 146
To use OAuth, you'll need the following information which is displayed after you click Save:
Client ID (App id): Eloqua creates and assigns the App ID when you save your App.
Client Secret: Eloqua generates the secret access token when you save your App. Click Show to view it.
When you’ve filled in all fields, click Save to finish configuring the app, or click Add Services to start registering services.
3.2 Step 2: Register Services
Finally, you should register any service your app uses. The AppCloud Developer Platform currently supports 6 services: Menus, Firehose, Content, Actions, Decisions, and Feeders.
Apps can include zero services, as in the case of a portal app or if the integration not directly tied to one of the service types, or if it's tied to many services.
To define your app's services within Eloqua, navigate to Settings > AppCloud Developer then click on your app (see step 1 above for setup instructions) and select Add Services.
A modal opens listing the available service types. Select the service type you wish to register.
©2017 Oracle Corporation. All rights reserved 81 of 146
Then, fill out the service’s details: you will have different information you need to supply depending on the service you are implementing. For example, for a Menu, you need to provide the Action URL, specify the areas it supports and how Eloqua should present it, and provide the service’s icon URL, name, and description; for Content, you will need to fill out instance configuration details, as well as configure content and notification settings, as well as the general service details. The following documents describe the service configuration page for each service type:
When you are done configuring your service, click Save. A green alert message will appear at the top of the page indicating the Service has been successfully saved.
©2017 Oracle Corporation. All rights reserved 82 of 146
3.3 Step 3: View the App
You can view the App information by clicking its name in the list. Here is an example of the App Details page for
Docs Example App
:
The App page shows all of the App information, including
Services
. When you register an App, it immediately becomes available in your instance of Eloqua so you can test it before releasing it to any other prospective users. When you’re ready to release your App, or just to share it with a select few, check out the
.
3.4 Register an Action Service
With Actions, developers can build apps that control an external action that occurs when contacts enter a step on the campaign canvas. Examples of this could include sending contacts SMS messages, a direct mail piece, or registering them for webinars. When contacts enter an action step,
Eloqua will call out to the app, and the app can respond by performing an action in an external system, then informing Eloqua that the process is complete. The contact will then move on in the workflow.
Actions are the next generation of Eloqua’s popular Cloud Connectors framework.
When you set up an Action service, you will need to provide the usual Oracle Eloqua AppCloud
Developer framework service details, as well as the Instance Configuration and Action Settings.
©2017 Oracle Corporation. All rights reserved 83 of 146
3.4.1 Service Details
These fields are present for all services:
Name: the name of the service. Max length: 100 characters.
Description: describes what the service does. Max length: 4000 characters.
16x16px Icon: the URL of the icon Eloqua displays when your service is displayed on a canvas. The icon will be 16px by 16px when displayed. It must be a secure URL. See
for more information on designing app icons.
32x32px Icon: the URL of the icon that Eloqua should display for your service. The icon will be
32px by 32px when displayed. It must be a secure URL. See
for more information on designing app icons.
3.4.2 Instance Configuration
This section defines the URLs for creating, configuring, copying, and deleting an instance of your service. The installation tutorial details the instance creation flow when a marketer drags an Action step onto the canvas, and selects your app.
Each URL is a
templated URL
that uses common URL template parameters and some Eloqua Markup
Language parameters. Eloqua replaces these paramters with their appropriate values when it makes a call. For more about URL templating, see our
Introduction to URL Templating
.
Create URL: A templated URL pointing to a web portal for creating an instance of this service as an HTTP POST request. All common URL template parameters are available.
©2017 Oracle Corporation. All rights reserved 84 of 146
You should be sure to include, at a minimum, the
} parameter so that you will be able to identify the service in the future. On success, this endpoint should return a 200-level response with the created instance.
Configure URL: A templated URL pointing to an endpoint for configuring an instance of this service as an HTTP GET request. All common URL template parameters are available.
You should be sure to include, at a minimum, the
} parameter so that you will be able to identify the service in the future.
Modal size configuration window: Select a modal size for your configuration window. The configuration page displays when marketers configure your service.
Large: 950px x 550px
Small: 650px x 550px
Delete URL: A templated URL pointing to an endpoint for deleting an instance of this service using an HTTP DELETE request. All common URL template parameters are available. On success, this endpoint should return a 200-level response.
Copy URL: A templated URL pointing to an endpoint for creating an instance of this service as an HTTP POST request. All common URL template parameters are available in addition to
} ,
,
} , and
} .
You should be sure to include, at a minimum, the
} and
parameters so that you can identify the original and newly created instances. On success, this endpoint should return a 200-level response with the created instance. Learn how to
When a Marketer Copies a Service Instance
.
©2017 Oracle Corporation. All rights reserved 85 of 146
3.4.3 Service Settings
User Access: Specify if your service supports campaign contacts, program contacts, and/or program custom objects.
Step Response: Specify whether Eloqua should call out to your service when a member arrives in an Action Step, or whether you will poll for members periodically.
Notification URL: This url will be called (HTTP POST) when actions are taken on an instance of this service. This endpoint should return a 2xx level response with an empty body on success. If this property is not specified, the system will fall back to a polling style approach without notification. Note that this url can be used along with the recordDefinition property of the instance to send data.
Records per Notification: Max number of records to push per HTTP request (between 0 and
5,000)
Status on Notification: Specifies what the member’s status should be set to when a notification is set. This is only valid if Max Records per Notification is greater than 0. If you set the Status on Notification to Complete, Eloqua will call out to the notification URL when contacts flow into the action step, and will then push the contacts directly into the next step. If you set it to Active, you will need to call back into Eloqua to set each contact's status to
complete so they will flow into the next step. See: Develop an Action Service
for more information.
©2017 Oracle Corporation. All rights reserved 86 of 146
When you’re done configuring your service, click Save. A green alert message will appear at the top of the page indicating the service has been successfully saved.
3.5 Register a Decision Service
With Decisions, developers can build apps that directly control the path a contact takes as they flow through a campaign. For instance, you could build an App that Eloqua calls out to when contacts reach a Decision step. This App might interact with an external system, and evaluate rules against that set of external data. The App then responds, telling Eloqua whether the contacts should flow through the step’s “yes” or “no” path. With Decisions, the data used in the decision never needs to be brought into
Eloqua.
When you set up a Decision service, you will need to provide the usual AppCloud Developer framework service details, as well as the Instance Configuration, Content-Type of the notification
POST call and Decision Settings.
3.5.1 Service Details
These fields are present for all services:
Name: the name of the service. Max length: 100 characters.
Description: describes what the service does. Max length: 4000 characters.
16x16px Icon: the URL of the icon Eloqua displays when your service is displayed on a canvas. The icon will be 16px by 16px when displayed. It must be a secure URL. See
for more information on designing app icons.
32x32px Icon: the URL of the icon that Eloqua should display for your service. The icon will be
32px by 32px when displayed. It must be a secure URL. See
for more information on designing app icons.
©2017 Oracle Corporation. All rights reserved 87 of 146
3.5.2 Instance Configuration
This section defines the URLs for creating, configuring, copying, and deleting an instance of your service. The installation tutorial details the instance creation flow when a marketer drags an Decision step onto the canvas, and selects your app.
Each URL is a
templated URL
that uses common URL template parameters and some Eloqua Markup
Language parameters. Eloqua replaces these paramters with their appropriate values when it makes a call. For more about URL templating, see our
Introduction to URL Templating
.
Create URL: A templated URL pointing to a web portal for creating an instance of this service as an HTTP POST request. All common URL template parameters are available.
You should be sure to include, at a minimum, the
} parameter so that you will be able to identify the service in the future. On success, this endpoint should return a 200-level response with the created instance.
Configure URL: A templated URL pointing to an endpoint for configuring an instance of this service as an HTTP GET request. All common URL template parameters are available.
You should be sure to include, at a minimum, the
} parameter so that you will be able to identify the service in the future.
Modal size configuration window: Select a modal size for your configuration window. The configuration page displays when marketers configure your service.
©2017 Oracle Corporation. All rights reserved 88 of 146
Large: 950px x 550px
Small: 650px x 550px
Delete URL: A templated URL pointing to an endpoint for deleting an instance of this service using an HTTP DELETE request. All common URL template parameters are available. On success, this endpoint should return a 200-level response.
Copy URL: A templated URL pointing to an endpoint for creating an instance of this service as an HTTP POST request. All common URL template parameters are available in addition to
} ,
,
} , and
} .
You should be sure to include, at a minimum, the
} and
parameters so that you can identify the original and newly created instances. On success, this endpoint should return a 200-level response with the created instance. Learn how to
When a Marketer Copies a Service Instance
.
3.5.3 Service Settings
User Access: Select the Eloqua services for which your app should be available.
Step Response: Specify whether Eloqua should call out to your service when a member arrives in the decision step, or whether your application will poll for members periodically.
Notification URL: A templated URL to an endpoint for notifying the external service, during execution, to get the decision result of the configured instance. If this property is not specified,
©2017 Oracle Corporation. All rights reserved 89 of 146
the system will fall back to a polling style approach without any notification.
Records per Notification: max number of records to push per HTTP request (between 0 and
5,000).
When you’re done configuring your service, click Save. A green alert message will appear at the top of the page indicating the service has been successfully saved.
3.6 Register a Content Service
Content allows marketers to source pieces of content in Eloqua emails and Landing Pages, from an external source. This is the new and improved version of Eloqua’s Cloud Components framework, and it includes many improvements such as asynchronous bulk processing (for emails), the ability to fully test the content service within Eloqua, and design-time interaction with the Email and Landing Page editors. For instance, you can now re-size content in real time!
When you set up a Content service, you will need to provide the usual AppCloud Developer framework service details, as well as the Instance Configuration and Content Settings.
3.6.1 Service Details
These fields are present for all services:
Name: the name of the service
Description: describes what the service does
32x32px Icon: the URL of the icon that Eloqua should display for your service. The URL must be https://
3.6.2 Instance Configuration
This section defines the URLs for creating, configuring, copying and deleting an instance of your service. The installation tutorial details the instance creation flow when a creates a Landing Page or
©2017 Oracle Corporation. All rights reserved 90 of 146
Email populated with Content.
Each URL is a
templated URL
that uses common URL template parameters and some Eloqua Markup
Language parameters. Eloqua replaces these paramters with their appropriate values when it makes a call. For more about URL templating, see our
Introduction to URL Templating
.
Create URL: A templated URL pointing to a web portal for creating an instance of this service as an HTTP POST request. All common URL template parameters are available.
You should be sure to include, at a minimum, the
} parameter so that you will be able to identify the service in the future. On success, this endpoint should return a 200-level response with the created instance.
Configure URL: A templated URL pointing to an endpoint for configuring an instance of this service as an HTTP GET request. All common URL template parameters are available.
You should be sure to include, at a minimum, the
} parameter so that you will be able to identify the service in the future.
Modal size configuration window: Select a modal size for your configuration window. The configuration page displays when marketers configure your service.
Large: 950px x 550px
Small: 650px x 550px
Delete URL: A templated URL pointing to an endpoint for deleting an instance of this service using an HTTP DELETE request. All common URL template parameters are available. On
©2017 Oracle Corporation. All rights reserved 91 of 146
success, this endpoint should return a 200-level response.
Copy URL: A templated URL pointing to an endpoint for creating an instance of this service as an HTTP POST request. All common URL template parameters are available in addition to
} ,
,
} , and
} .
You should be sure to include, at a minimum, the
} and
parameters so that you can identify the original and newly created instances. On success, this endpoint should return a 200-level response with the created instance. Learn how to
When a Marketer Copies a Service Instance
.
3.6.3 Service Settings
User Access: Select the Eloqua asset types for which your app should be available.
Landing Page Notification (HTML) URL: templated URL that Landing Page engines should call out to during render to retrieve the HTML content for the configured instance.
In addition to the common HTML template parameters, the Notification (HTML) URL supports the
{
,
{Fragment}
,
{Host}
,
{Query} and
{Url} parameters. Be sure to include, at a minimum, the the
} and
parameters so that you will be able to call back in to Eloqua.
Email Notification (HTML) URL: templated URL that the Email engine should call out to during render to retrieve the HTML content for the configured instance. Be sure to include, at a minimum, the the
and
parameters so that you will be able to call back in to Eloqua.
©2017 Oracle Corporation. All rights reserved 92 of 146
Max Records per Notification: max number of records to push per HTTP request (between 0 and 5,000)
3.6.4 Content Settings
Default Content: the HTML content the system should use if the external service is not accessible. This is a required field and cannot be empty.
Content Layout: choose from flow or fixed. If you choose flow, the external content is input into your landing page or email with no constraints (except width). If you choose fixed, the external content will be constrained in height and width, as specified by the content instance, and will not be configurable from within Eloqua.
If the landing page or email notification URL is not specified and a Landing Page or Email rendering is required, the default content is used instead.
When you’re done configuring your service, click Save. A green alert message will appear at the top of the page indicating the service has been successfully saved.
3.7 Register a Feeder Service
With Feeders, developers can build apps that use data in third-party services to drive campaign membership. When you set up a Feeder service, you will need to provide the usual AppCloud
Developer framework service details, as well as the Instance Configuration and Feeder Settings.
3.7.1 Service Details
These fields are present for all services:
©2017 Oracle Corporation. All rights reserved 93 of 146
Name: the name of the service. Max length: 100 characters.
Description: describes what the service does. Max length: 4000 characters.
16x16px Icon: the URL of the icon Eloqua displays when your service is displayed on a canvas. The icon will be 16px by 16px when displayed. It must be a secure URL. See
for more information on designing app icons.
32x32px Icon: the URL of the icon that Eloqua should display for your service. The icon will be
32px by 32px when displayed. It must be a secure URL. See
for more information on designing app icons.
3.7.2 Instance Configuration
This section defines the URLs for creating, configuring, copying, and deleting an instance of your service. The installation tutorial details the instance creation flow when a marketer drags an Feeder step onto the canvas, and selects your app.
Each URL is a
templated URL
that uses common URL template parameters and some Eloqua Markup
Language parameters. Eloqua replaces these paramters with their appropriate values when it makes a call. For more about URL templating, see our
Introduction to URL Templating
.
Create URL: A templated URL pointing to a web portal for creating an instance of this service as an HTTP POST request. All common URL template parameters are available.
You should be sure to include, at a minimum, the
} parameter so that you will be able to identify the service in the future. On success, this endpoint should return a 200-level response with the created instance.
©2017 Oracle Corporation. All rights reserved 94 of 146
Configure URL: A templated URL pointing to an endpoint for configuring an instance of this service as an HTTP GET request. All common URL template parameters are available.
You should be sure to include, at a minimum, the
} parameter so that you will be able to identify the service in the future.
Modal size configuration window: Select a modal size for your configuration window. The configuration page displays when marketers configure your service.
Large: 950px x 550px
Small: 650px x 550px
Delete URL: A templated URL pointing to an endpoint for deleting an instance of this service using an HTTP
DELETE request. All common URL template parameters are available. On success, this endpoint should return a 200-level response.
Copy URL: A templated URL pointing to an endpoint for creating an instance of this service as an HTTP POST request. All common URL template parameters are available in addition to
} ,
,
} , and
} .
You should be sure to include, at a minimum, the
} and
parameters so that you can identify the original and newly created instances. On success, this endpoint should return a 200-level response with the created instance. Learn how to
When a Marketer Copies a Service Instance
.
3.7.3 Feeder Settings
©2017 Oracle Corporation. All rights reserved 95 of 146
User Access: Select the Eloqua services for which your app will be available.
Notification URL: This URL is called (HTTP POST ) when a campaign containing an instance of the service’s status changes, such as when it is activated.
Be sure to include the
} and
} parameters in the templated URL.
AssetId describes the campaign whose status has changed, and EventType defines the status. When a campaign is activated, for example EventType will be “Active”. Otherwise, you will not be able to identify what the incoming call references.
When you’re done configuring your service, click Save. A green alert message will appear at the top of the page indicating the service has been successfully saved.
3.8 Register a Menu Service
Eloqua’s Menus service is all about
context
. With Menus, you can build an App that enables a marketer to launch an externally-hosted application from within Eloqua via a menu dock. This menu dock floats on the right side of the screen in the Eloqua’s Campaign Canvas or the asset editor screens. When a marketer clicks on your Menu App, Eloqua calls out to your service on the specified endpoint URL, passing along information about the asset or area from which your App was launched.
When setting up a Menu service, you will need to provide basic service details, as well as the Menu
Extension Service Details.
3.8.1 Service Details
These fields are present for all services:
Name: the name of the service
Description: describes what the service does
32x32px Icon: the URL of the icon that Eloqua should display for your service. The URL must be https://
©2017 Oracle Corporation. All rights reserved 96 of 146
3.8.2 Service Settings
Action URL: A templated URL that defines where users are redirected to when they select the menu item. For example, a new tab with an external page showing information on a Campaign.
User Access: Select the assets/areas within Eloqua that your app will appear to the Marketer.
Default View: Specify how your service will appear.
Always visible: Display the menu service in two areas: within the selected area of the interface and within the editor for the asset.
Example: If this option is selected along with
Campaign
access, a user will see the menu service when they navigate to Orchestration > Campaigns, and when they open a campaign.
Only visible for a selected asset: Display the menu service only for the selected assets under User Access.
Example: If this option is selected along with
Campaign
access, a user will only see the menu service when they open a campaign.
Content Display Layout: Select a layout option for your content display.
©2017 Oracle Corporation. All rights reserved 97 of 146
Drawer: Content will open within the AppCloud Menu dock.
Window: Content will open in a new window or tab.
When you’re done configuring your service, click Save. A green alert message will appear at the top of the page indicating the service has been successfully saved.
3.9 Register a Firehose Service
Firehose enables third-parties to build a service that receives a notification when a marketer performs an action in Eloqua. This is essentially a web-hook that will be triggered when a marketer does things like creating or editing a campaign, or creating or updating an email etc.
3.9.1 Service Details
These fields are present for all services:
Name: the name of the service
Description: describes what the service does
32x32px Icon: the URL of the icon that Eloqua should display for your service. The URL must be https://
3.9.2 Firehose Settings
©2017 Oracle Corporation. All rights reserved 98 of 146
Notification URL: the URL that Eloqua will call out to with the notification. This is a templated
URL.
Subscribed Events: defines which events trigger a call out to the external application. The service configuration page includes a list of valid asset types and the event types supported for each asset, as well as examples of valid patterns.
When you’re done configuring your service, click Save. A green alert message will appear at the top of the page indicating the service has been successfully saved.
©2017 Oracle Corporation. All rights reserved 99 of 146
4 Publish Your App
The final step in the App configuration lifecycle is publishing your App. The publishing flow has two components: whitelisting users so that they are permitted to install the App, and retrieving the link that those users need in order to add the App to their catalog.
4.1 Grant Access
By default, when you register an App with Eloqua, only your instance of Eloqua has access to it. This makes it easy for you to test your App to ensure it is behaving as expected.
To allow other people access to the App, you have to grant access from the App Configuration page, by clicking Edit Availability in the Availability section.
You can choose between granting access to all Eloqua instances, or select Eloqua instances.
©2017 Oracle Corporation. All rights reserved 100 of 146
4.1.1 Publish to All Sites
If your app is available to all Eloqua instances, all sites are immediately whitelisted. At present, this cannot be undone. Nevertheless, a Customer Admin will need the install URL before they can actually install the App.
4.1.2 Publish To A Specific Site
To make your app available to specific Eloqua instances, enter the name of the site you want to add and click Add Client. All Eloqua Instances with that site name will now be able to install the App.
Note: You cannot remove a Site from your app's whitelist if that Site has your app installed. To remove a Site from your app's whitelist, you must first contact the appropriate client and have them uninstall your app. This a security measure in place to prevent broken assets and campaigns.
4.2 Share the URL
Having published your App, giving sites the ability to install it, you now need to share the URL so that users can add the App to their Eloqua instance’s App Catalog, giving marketers the ability to use it.
Eloqua automatically creates the installation URL when you register your App.
Many developers send the link by email to the Sites they have authorized. When an authorized user clicks the link, the App is added to their catalog. The link will not work for users who are not authorized, so you don’t need to worry about people passing around the installation link to sites you did not whitelist.
©2017 Oracle Corporation. All rights reserved 101 of 146
The number of sites which have installed your app is listed in the App details page.
Click Logs to see catalog install details.
4.3 Next Steps
When a customer admin installs an app on a new site, Eloqua calls out to the App's install URL. Refer to the
tutorial for more information.
4.4 AppCloud Installation Flow
When a Customer Admin installs an app, Eloqua calls out to the configured enable URL with a POST request. The call will resemble the following: https://example.com/awesomeapp/api/enable?enableurl&oauth_ consumerkey=XXX-XXX-XXX-XXX-XXX
&oauth_nonce=nonce&oauth_signature_method=SIG-METH&oauth_ timestamp=111111111
&oauth_version=1.0&oauth_ signature=signature&callback=https%3A%2F%2Fsecure.eloqua.com%2
FApps%2FCloud%2FAdmin%2FInstall%2FCallback%2Fa1b2c3d4%3Fguid%3
Dz9y8x7w6
The app must respond in one of two ways: if the app does not require configuring by the user, it can return an HTTP 200 OK response. Otherwise, it should respond with an HTTP 302 redirect to another page. The following sections detail each option.
©2017 Oracle Corporation. All rights reserved 102 of 146
4.4.1 No Additional Information Needed
In this scenario, there is no need to obtain OAuth authorization for the installing user's instance, nor any other configuration information. The appropriate response is then:
HTTP/1.1 200 OK
The app install status will be set to the "Ready" and marketers will be able to use it.
4.4.2 Additional Information Needed
If you need to have the user configure the application or provide OAuth authorization for their instance, you should respond with an HTTP 302 redirect to another page. When the app is configured, you need to call back in to the callback URL.
1. Respond with a redirect:
HTTP/1.1 302 Redirect
If your app needed to go through the OAuth flow, the redirect might point to login.eloqua.com/auth/oauth2/authorize , Eloqua’s OAuth endpoint. If you needed users to configure options in the app when they install it, the redirect might point to a configure page within your app.
2. Call in to the callback URL when the user has finished configuring the application. Using the above example, the call would look like: https://secure.eloqua.com/Apps/Cloud/Admin/Install/Callbac k/a1b2c3d4?guid=z9y8x7w6
Eloqua provides the callback URL when you request it as a template in your templated enable URL. Calling the callback URL tells Eloqua that the install status should be set to
"Ready" so that marketers can start using the application.
3. When the app provider calls back in to complete the installation, it can optionally append a
©2017 Oracle Corporation. All rights reserved 103 of 146
redirect URL: https://secure.eloqua.com/Apps/Cloud/Admin/Install/Callbac k/{installId}?guid={guid}&redirect={redirectUrl}
Replace parameters in {} with desired values, and the redirect URL must be in HTTP or HTTPS.
The redirect URL supports
. You must URL encode the redirect URL to ensure that template parameters are returned back to you. If no redirect URL is given, or if the redirect URL given is not acceptable, then the user is redirected to Eloqua’s catalog.
4.5 Respond When Eloqua Calls the Status URL
When you register an App in Eloqua, you are able to specify a Status URL. This URL is an endpoint which Eloqua can call to verify that your app is up and running.
Eloqua calls the Status URL when a user clicks the Check Connection button for that App from the
AppCloud Catalog.
Important: Applications have an “application status” associated with them. This status is either
“up”, “down”, or “maintenance”. Calls to the Status URL do not update the application status: they merely display the application’s response to the user who clicked the “Status” button.
4.5.1 Example
Suppose the user clicked the Check Connection button for AwesomeApp. The call resembles:
©2017 Oracle Corporation. All rights reserved 104 of 146
GET https://example.com/awesomeapp/status
If AwesomeApp is operating normally, the appropriate response is an 200-level response:
HTTP/1.1 200 OK
Eloqua then displays the Status to the user in a modal window.
Otherwise, if AwesomeApp is down and responds with a 400 or 500-level message, Eloqua indicates that it was unable to connect to the application. Or that the application is in
.
4.6 Respond When a Marketer Copies a Service Instance
Marketers often create new campaigns, landing pages, and emails from existing resources. When a marketer creates a campaign, landing page, or email using the Save As option in the Campaign
Canvas and Landing Page or Email editors all of the objects in that resource are duplicated. For most items on a canvas, this is straightforward. For services that follow the
, however, each instance has its own unique identifier. Thus, when an Action, Decision, Feeder, or
Content service instance is copied, a new GUID needs to be assigned to the copy. The Oracle Eloqua
AppCloud Developer Framework uses the Copy URL to communicate with the service’s provider to configure and update the new service instance when a service is copied.
4.6.1 Sample Copy URL Call and Response
Eloqua’s call to the Copy URL is similar to the call to the CreateURL when a service is first created.
The following section provides step-by-step instructions for properly handling calls to the Copy URL.
This example uses a Decision service, but the process is the same for Actions, Content, and Feeders.
©2017 Oracle Corporation. All rights reserved 105 of 146
1. A marketing user copies a campaign that includes an AwesomeApp Decision Service whose templated Copy URL is: example.com/awesomeapp/decide/copy?instanceId=
{InstanceId}&originalId={OriginalInstanceId}
2. Eloqua calls out to the Copy URL, replacing the templated parameters with the original service’s GUID, and the new GUID of the copy. AwesomeApp can use the original service’s
GUID to determine the appropriate configuration options for the copy:
POST example.com/awesomeapp/decide/copy?instanceId=bcbdff6a-
74dd-41c9-b716-825e4049b776
&originalId=d155213e-cd30-422b-984c-acb33093cb5b
3. AwesomeApp responds in one of two ways: either it replies with an HTTP 200 Ok response, and no content, in which case Eloqua will use the original service’s configuration for the new service, or, AwesomeApp replies with a 200-level HTTP response along with a DTO specifying how the new service should be configured, as in the following:
HTTP/1.1 200 OK
{
"recordDefinition":
{
"ContactId": "{{Contact.Id}}",
"EmailAddress": "{{Contact.Field(C_
EmailAddress)}}"
}
}
©2017 Oracle Corporation. All rights reserved 106 of 146
Internally, Eloqua then updates the references in the campaign to the new service instance
GUID, and the new campaign is created.
4.6.2 Persistent Settings and Data
As an App provider, you have control over what data and settings are persisted when a service is copied: if you wish to retain the configuration of the original service, simply return a blank DTO when
Eloqua calls out to the Copy URL. Conversely, if you wish to update the configuration of the new service, you can do so by replying with a new DTO.
Once a service has been copied, and the new service has been configured, there is
no link
between the original and new services: changing the configuration in one does not affect the other.
4.7 Scheduled Maintenance
If you need to perform maintenance on your app, and wish to put it into maintenance mode, you can do so directly from the app's App Details page from within your Eloqua instance by clicking the Stop App button.
When an app is in maintenance mode,
Eloqua will not send any calls to the app
Marketers should not be able to add the app's services to a campaign, email, or landing page
When a user
checks the app's status , Eloqua will inidcate the app is undergoing maintenance
App Shutdown is not equivalent to deactivating or deleting an app. It is, however, ideal if you wish to suspend the app while performing an upgrade.
©2017 Oracle Corporation. All rights reserved 107 of 146
4.8 App Shutdown
If your app is not operating properly, Oracle Eloqua can shut down your app. This prevents marketers from creating new campaigns that use your app's services. Marketers can also configure a default path for contacts to follow in the event that a service is unavailable while a campaign is in progress.
See: Configuring Cloud Action and Decision Elements in the Eloqua product documentation for more information. When an app is shutdown, any contacts in the app's service's steps will flow down the default path, if it is configured.
4.8.1 Shutdown
Eloqua will shut down your app if there were more than 100 calls in the last five minutes, and 25% of them failed. Eloqua will automatically send an email message to the
and future requests are marked as "failed".
4.8.2 Reactivate Your App
To reactivate your app, simply click on the link in the notification email that Eloqua has sent.
Alternately, you can log into your development instance, and click the Start App button on the App
Details page in the AppCloud Developer Framework area of Eloqua.
You can also programatically start or stop your app using the
GET /apps/{appid}/configurations
and
PUT /apps/{appid}/configurations
endpoints. See:
Programmatically Update your App's
for more information.
4.9 App Icon Design Guidelines
When designing your app's icon, it's important to follow the recommended design guidelines to ensure your app icon displays correctly for your users. Each app requires:
©2017 Oracle Corporation. All rights reserved 108 of 146
AppCloud Catalog icon
App specific icon (the size requirement depends on where the App appears in the Eloqua interface)
Each app has different size guidelines and will appear in different areas of the Eloqua interface:
AppCloud Catalog icons
Size requirement:
96x96px
An icon to represent your App will be displayed in the AppCloud Catalog and on the App Details page.
©2017 Oracle Corporation. All rights reserved 109 of 146
4.9.1 Menu apps
Size requirement:
96x96px
Menu apps are accessed from the Cloud menu tab, located at the top right of the screen. These apps should be context specific.
The Menu app icon appears within the Cloud menu tab and in AppCloud catalog.
©2017 Oracle Corporation. All rights reserved 110 of 146
4.9.2 Content apps
Size requirement:
96x96px
Content apps are accessible from the Cloud Content popup in the Email and Landing Page editors. The content apps icon appears on this popup and in the AppCloud catalog.
4.9.3 Firehose apps
Size requirement:
96x96px
Firehose apps only require an icon in the AppCloud catalog.
©2017 Oracle Corporation. All rights reserved 111 of 146
4.9.4 Canvas apps (Action, Decision, and Feeder services)
Size requirement:
32x32px
16x16px
©2017 Oracle Corporation. All rights reserved 112 of 146
Canvas apps are accessible from the Campaign Canvas and the Program Canvas left Canvas Palette.
Two icons are needed for Canvas apps:
The 32x32px icon appears in the left campaign/program step on the canvas
The 16x16px icon appears in the left canvas palette
Recommendation:
White icon with transparent background
Important: Because color is used to differentiate between Audience (green), Decision (red) and
Action (purple) steps and unpopulated state steps (grey), it is strongly recommended that App
Providers use white icons with transparent backgrounds for Canvas Apps.
Migrating existing apps to the new interface
In the new interface, your existing apps will be modified accordingly:
Menu apps: Unchanged, but scale in size.
Content apps: Unchanged, but scale in size.
©2017 Oracle Corporation. All rights reserved 113 of 146
Firehose apps: Unchanged, but scale in size.
Canvas apps: The dotted line shows placement of the icon within the step:
Left palette:
4.10 Viewing an App's Outbound Logs
The logs page records all the outbound requests made from Eloqua to your app's
(the
URLs an app calls when the app is configured, uninstalled, and so on). The records in the outbound log are useful for determining if Eloqua is calling your app's lifecycle URLs successfully.
Example: You can review the logs to determine if Eloqua is successfully calling the
Enable
URL
by searching the logs page for the URL and viewing the response body to ensure a 200
©2017 Oracle Corporation. All rights reserved 114 of 146
level response code is returned.
If Eloqua fails to call a URL, a 400 level response code is returned.
The logs page only displays outbound requests for your instance and other clients on your pod, to pull logs from another pod, use the
To view an app's outbound logs:
1. Navigate to Settings > AppCloud Developer.
2. Select your app and click Logs.
Expand the chevron to see the request and response body for the requests made to the lifecycle URLs.
Click Log Details to view details about the request.
©2017 Oracle Corporation. All rights reserved 115 of 146
The Log Details display how long the request took to execute, as well as the full request and response body.
4.11 Update or Check your App's Status Using the Cloud API
From time to time, you may wish to update your App's status. While it is possible to start or stop your app from the App Details page in the AppCloud Developer Framework area of your Eloqua development instance, you can also do so programmatically using a Cloud API endpoint. The endpoint also enables you to check the status of your App. You will need to know your App's ID in order to call out to the Cloud API endpoints. The App ID is listed on the App Details page in your Eloqua development instance, and is a GUID.
The Cloud API URL is https://<eloqua base url>.com/api/cloud/1.0/<endpoint> . All calls to the API must be authenticated using OAuth. Learn more about configuring and authenticating with
OAuth .
©2017 Oracle Corporation. All rights reserved 116 of 146
4.11.1 To Check the App's Status
Retrieve your app's status using the
endpoint:
GET /apps/a0f6779e-8263-4bfb-a292-9714cd10d1e7/configurations
The response should resemble:
HTTP/1.1 200 OK
{
"uri": "/apps/a0f6779e-8263-4bfb-a292-
9714cd10d1e7/configurations",
"clientSecret":
"a1ba63f9aae1cc84d91544f15b0af27ab6ced4e42c6145b9cc0425742ec f2a0da1ba63f9aae1cc84d91544f15b0af27ab6ce",
"name": "Call Example",
"description": "This is a test",
"shortDescription": "This is a test",
"iconUrl": "https://www.example.com/logo.png",
"enableUrl": "http://example.com/enable/{appId}/
{installId}/{userName}/{siteName}/{siteId}",
"statusUrl": "http://example.com/status/{installId}",
"callbackUrl": "http://example.com/callback/
{installId}",
"makeAvailableUrl": "https://example.com",
"publishedSites": [
"AwesomeCompany"
],
"status": "Up"
}
The status field indicates the app's current status, either "Up", "Down", or "Maintenance".
4.11.2 To Update the App's Status
Update the status by sending a request to the
endpoint.
©2017 Oracle Corporation. All rights reserved 117 of 146
Important: You must include all of the fields in the configuration document in the PUT request.
You cannot merely specify a value for the status field.
The status can be "Up", "Down", or "Maintenance":
PUT /apps/a0f6779e-8263-4bfb-a292-
9714cd10d1e7/configurations
{
"uri": "/apps/a0f6779e-8263-4bfb-a292-
9714cd10d1e7/configurations",
"clientSecret":
"a1ba63f9aae1cc84d91544f15b0af27ab6ced4e42c6145b9cc0425742ec f2a0da1ba63f9aae1cc84d91544f15b0af27ab6ce",
"name": "Call Example",
"description": "This is a test",
"shortDescription": "This is a test",
"iconUrl": "https://www.example.com/logo.png",
"enableUrl": "http://example.com/enable/{appId}/
{installId}/{userName}/{siteName}/{siteId}",
"statusUrl": "http://example.com/status/{installId}",
"callbackUrl": "http://example.com/callback/
{installId}",
"makeAvailableUrl": "https://example.com",
"publishedSites": [
"AwesomeCompany"
],
"status": "Maintenance"
}
If successful, Eloqua will respond with an HTTP/1.1 204 No Content .
If you GET the /apps/{id}/configurations endpoint again, the response should reflect the updated status.
©2017 Oracle Corporation. All rights reserved 118 of 146
5 Reference
The following pages provide detailed reference for the parameters and endpoints used in the
Oracle Eloqua AppCloud Developer Framework.
Cloud API endpoints
PUT /api/cloud/1.0/actions/instances/{id}
PUT /api/cloud/1.0/contents/instances/{id}
PUT /api/cloud/1.0/decisions/instances/{id}
PUT /api/cloud/1.0/feeders/instances/{id}
POST /api/cloud/1.0/actions/instances
POST /api/cloud/1.0/decisions/instances
GET /api/cloud/1.0/apps/{id}/configurations
PUT /api/cloud/1.0/apps/{id}/configurations
GET /api/cloud/1.0/apps/{id}/logs
Bulk API v2.0 documentation
Warning: For PUT or POST requests, you must specify application/json in the Content-
Type header. If the Content-Type header is not included, data persisted in Eloqua will be corrupted, resulting in your App not functioning correctly.
The Content-Type header is not required for GET or DELETE requests, since these do not accept data inputs.
©2017 Oracle Corporation. All rights reserved 119 of 146
5.1 Service level URL template parameters
The Oracle Eloqua AppCloud Developer Framework supports
URL Templating
, enabling the configuration of service URIs Eloqua calls out to. Any acceptable
template parameter
is substituted with the appropriate value before the call is made. See the
Introduction to URL Templating
for more information.
There are different
template parameters
available for different calls in different AppCloud service types:
To look up individual parameters, please see the below
.
5.1.1 Service parameters
Action Services
URL
Available parameters
,
} ,
,
,
}
,
}
,
,
{
,
,
}
,
} ,
,
} ,
}
,
}
,
,
{
,
,
,
}
Conditional
Parameters
} and
{
} are available only if the campaign has been
©2017 Oracle Corporation. All rights reserved 120 of 146
URL
Available parameters
,
}
,
}
,
,
,
}
,
,
, {
} ,
} ,
} ,
} ,
, {
,
,
} ,
} ,
,
,
}
,
}
,
}
,
,
,
,
,
,
}
,
}
,
,
,
}
,
}
,
,
{
Conditional
Parameters saved with the referencing asset.
Decision Services
URL
Available parameters
,
} ,
,
,
}
,
}
,
,
{
,
,
}
}
,
,
,
}
,
}
,
}
,
{
,
,
} ,
,
,
} ,
} ,
,
,
} ,
,
, {
} ,
} ,
} ,
} ,
, {
,
,
}
,
}
,
,
,
} ,
} ,
} ,
,
,
,
,
Conditional
Parameters
} and
{
} are available only if the campaign has been saved with the referencing asset.
©2017 Oracle Corporation. All rights reserved 121 of 146
URL
Available parameters
,
}
,
} ,
,
,
} ,
} ,
, {
Conditional
Parameters
Feeder Services
URL
Available parameters
,
} ,
,
,
} ,
} ,
, {
,
,
}
} ,
,
,
} ,
}
,
}
, {
,
,
} ,
,
,
}
,
}
,
,
,
}
,
,
, {
} ,
} ,
} ,
} ,
, {
,
,
} ,
} ,
,
,
}
,
}
,
}
,
,
} ,
} ,
} ,
,
}
,
} ,
,
,
} ,
} ,
, {
Conditional
Parameters
} and
{
} are available only if the campaign has been saved with the referencing asset.
Content Services
URL
Available parameters
,
} ,
,
,
} ,
} ,
, {
,
}
,
,
,
}
,
}
,
,
{
Conditional
Parameters
} ,
©2017 Oracle Corporation. All rights reserved 122 of 146
URL Available parameters
,
}
,
}
,
,
,
}
,
,
, {
} ,
} ,
} ,
} ,
, {
,
,
} ,
} ,
,
,
} ,
} ,
,
,
}
,
,
}
,
}
,
} ,
} ,
,
,
} ,
} ,
} ,
,
,
,
}
,
}
,
,
,
}
,
}
,
,
{
Conditional
Parameters
{
} and
{
} are available only if the email or landing page has been saved with the referencing asset.
Menu Services
URL
Available parameters
} ,
, {
} ,
, {
} ,
} ,
} ,
} ,
} ,
, {
Firehose Services
URL
Available parameters
} , {
,
} ,
,
} ,
,
, {
,
} ,
} ,
5.1.2
Parameter descriptions
©2017 Oracle Corporation. All rights reserved 123 of 146
InstanceId is a templated parameter used in AppCloud service apps. Its value is the GUID for the specific instance of the AppCloud service being used. For instance, when a user drags and drops an action or decision service onto a campaign canvas this is considered a distinct instance and a new InstanceId is created.
InstallId is a templated parameter used in AppCloud service apps. Its value is the GUID for the user's installation of the AppCloud App. Whenever a user installs an app, a new InstallId is created.
AssetId is a templated parameter used in AppCloud service apps. Its value is the referencing asset's ID. Each instance of an asset will have a unique AssetId .
AssetName is a templated parameter used in AppCloud service apps. Its value is the referencing asset's filename.
AssetType is a templated parameter used in AppCloud service apps. Its value is the referencing asset's type. Possible asset types include campaign, form, landing page, program, etc.
AssetPath is a templated parameter used in AppCloud service apps. Its value is the referencing asset's directory path.
OriginalInstanceId is a templated parameter used in AppCloud service apps. It is specific to a service's Copy URL and its value is the original service's InstanceId (as opposed to the copied service's InstanceId ).
OriginalInstallId is a templated parameter used in AppCloud service apps. It is specific to a service's Copy URL and its value is the original service's installId (as opposed to the copied service's InstallId ).
©2017 Oracle Corporation. All rights reserved 124 of 146
OriginalAssetId is a templated parameter used in AppCloud service apps. It is specific to a service's Copy URL and its value is the original service's AssetId (as opposed to the copied service's AssetId ).
OriginalAssetName is a templated parameter used in AppCloud service apps. It is specific to a service's Copy URL and its value is the original service's AssetName (as opposed to the copied service's AssetName ).
UserName is a templated parameter used in AppCloud service apps. Its value is the name of the user who triggered the call.
UserId is a templated parameter used in AppCloud service apps. Its value is the ID of the user who triggered the call.
UserCulture is a templated parameter used in AppCloud service apps. Its value is the linguistic profile of the user of the user that triggered the call. Eloqua uses Microsoft’s
CultureInfo class to define culture. For example, for English (United States), the code is "en-
US", for French (Canada) it's "fr-CA".
SiteName is a templated parameter used in AppCloud service apps. Its value is the name of the user's Eloqua instance.
SiteId is a templated parameter used in AppCloud service apps. Its value is the GUID-based
ID for the user's Eloqua instance.
AppId is a templated parameter used in AppCloud service apps. Its value is the GUID-based ID of the app making the service call. Each AppCloud app has a single unique AppId .
©2017 Oracle Corporation. All rights reserved 125 of 146
EventType is a templated parameter used in AppCloud service apps. Its value is the status change that triggered the call (Created, Activated, Draft, etc.)
List of EventType values: Created , Updated , Deleted , Activated , ActivatedBySchedule ,
Scheduled
,
Draft
,
DraftWaitingApproval
,
DraftApproved
,
CampaignAssetAdded
,
CampaignAssetRemoved , CampaignLandingPageAdded , CampaignLandingPageRemoved ,
CampaignFormAdded , CampaignFormRemoved , CampaignEmailAdded , CampaignEmailRemoved ,
CampaignSegmentAdded , CampaignSegmentRemoved , MembersAdded , ContentRequired ,
Completed
.
VisitorId is a templated parameter used in AppCloud content service apps. Its value is an integer and represents the ID of the visitor for whom you wish to construct a landing page.
RenderType is a templated parameter used in AppCloud content service apps. Its value specifies the different types of email renderings. Possible values are:
0 : No render -- no content is being assembled.
1 : EmailSend -- content is being assembled for sending an email.
2 : LiveWeb -- content is being assembled to render a live landing page.
3 : EmailPreview -- content is being assembled to render an email preview.
4 : WebPreview -- content is being assembled to render a preview of a landing page.
5 : EmailSaved -- content is being assembled to render the web version of a sent email.
IsPreview is a templated parameter used in AppCloud content service apps. Its value specifies whether the referencing email is in preview mode. Possible values are:
0 : False
1 : True
©2017 Oracle Corporation. All rights reserved 126 of 146
ExecutionId is a templated parameter used in AppCloud content service apps. Its value is an integer and identifies a unique email send execution.
EntityType is a templated parameter used in AppCloud service apps. The value specifies the entity type the campaign or program is set to. Possible values are Contacts or
CustomObjectRecords .
For instance, if a user drags a decision step onto a custom object program, the
EntityType would be CustomObjectRecords because the program's entity type is set to custom objects.
Alternatively, if that decision step was dragged onto a contact program, the EntityType would be Contacts .
Note that campaigns only support the contact entity type, but programs can support contacts or custom objects. Use the
parameter to determine if the asset is a campaign or a program.
CustomObjectId is a templated parameter used in AppCloud action, decision, and feeder service apps for programs. It's value is the ID of the custom object associated with the program when CustomObjectRecords is specified for
. Must be an integer.
5.2 App level URL template parameters
The Oracle Eloqua AppCloudDeveloper Framework supports
URL Templating
, enabling the configuration of service URIs Eloqua calls out to. Any acceptable
template parameter
is substituted with the appropriate value before the call is made. See the
Introduction to URL Templating page
for more information.
To look up individual parameters, please see the below
.
©2017 Oracle Corporation. All rights reserved 127 of 146
5.2.1 App level parameters
Lifecycle parameters
URL Description Parameters
Enable
URL
The URL called when the App is first installed or when it is reconfigured. This is a templated URL which should include, at a minimum, the
,
, and
} parameters. WIthout the callback URL you will not be able to complete the installation flow if your app requires configuring (for example, to use OAuth).
}
,
,
,
,
} ,
} ,
,
Configure
URL
The URL called when clicking Configure (Gear icon next to
}
,
,
Check Connection) for the App within the AppCloud Catalog.
,
,
} ,
} ,
Status URL The URL called when a user checks the App’s connection.
Learn how to respond when Eloqua calls the Status URL
.
} ,
,
,
,
} ,
} ,
Uninstall
URL
The URL called when a user uninstalls the app. This allows
Eloqua to notify the app provider when someone uninstalls their app from the appcloud catalog. This URL supports templated parameters such as
,
, etc.
} ,
,
,
,
}
,
}
,
OAuth parameters
URL
Callback
URL
Description
Your App’s registered redirection endpoint. Its value should
Parameters be the same as the redirect_uri used when requesting initial authorization for OAuth. Learn more about
, {
,
} ,
,
} ,
,
} authentication with OAuth .
5.2.2
Parameter descriptions
InstanceId is a templated parameter used in AppCloud service apps. Its value is the GUID for the specific instance of the AppCloud service being used. For instance, when a user drags and drops an action or decision service onto a campaign canvas this is considered a distinct instance and a new InstanceId is created.
©2017 Oracle Corporation. All rights reserved 128 of 146
InstallId is a templated parameter used in AppCloud service apps. Its value is the GUID for the user's installation of the AppCloud App. Whenever a user installs an app, a new InstallId is created.
AssetId is a templated parameter used in AppCloud service apps. Its value is the referencing asset's ID. Each instance of an asset will have a unique AssetId .
AssetName is a templated parameter used in AppCloud service apps. Its value is the referencing asset's filename.
AssetType is a templated parameter used in AppCloud service apps. Its value is the referencing asset's type. Possible asset types include campaign, form, landing page, program, etc.
AssetPath is a templated parameter used in AppCloud service apps. Its value is the referencing asset's directory path.
CallbackURL is the Eloqua URL an app calls into when configuration is complete during installation.Example:<base url>/Apps/Cloud/Admin/Install/Callback/{1}?guid={2}
Where {1} is the installId and {2} is a guid generated by Eloqua. Note: this parameter is separate and distinct from the OAuth Callback URL.
OriginalInstanceId is a templated parameter used in AppCloud service apps. It is specific to a service's Copy URL and its value is the original service's InstanceId (as opposed to the copied service's InstanceId ).
OriginalInstallId is a templated parameter used in AppCloud service apps. It is specific to a service's Copy URL and its value is the original service's installId (as opposed to the copied service's InstallId ).
©2017 Oracle Corporation. All rights reserved 129 of 146
OriginalAssetId is a templated parameter used in AppCloud service apps. It is specific to a service's Copy URL and its value is the original service's AssetId (as opposed to the copied service's AssetId ).
OriginalAssetName is a templated parameter used in AppCloud service apps. It is specific to a service's Copy URL and its value is the original service's AssetName (as opposed to the copied service's AssetName ).
UserName is a templated parameter used in AppCloud service apps. Its value is the name of the user who triggered the call.
UserId is a templated parameter used in AppCloud service apps. Its value is the ID of the user who triggered the call.
UserCulture is a templated parameter used in AppCloud service apps. Its value is the linguistic profile of the user of the user that triggered the call. Eloqua uses Microsoft’s
CultureInfo class to define culture. For example, for English (United States), the code is "en-
US", for French (Canada) it's "fr-CA".
SiteName is a templated parameter used in AppCloud service apps. Its value is the name of the user's Eloqua instance.
SiteId is a templated parameter used in AppCloud service apps. Its value is the GUID-based
ID for the user's Eloqua instance.
AppId is a templated parameter used in AppCloud service apps. Its value is the GUID-based ID of the app making the service call. Each AppCloud app has a single unique AppId .
©2017 Oracle Corporation. All rights reserved 130 of 146
EventType is a templated parameter used in AppCloud service apps. Its value is the status change that triggered the call (Created, Activated, Draft, etc.)
List of EventType values: Created , Updated , Deleted , Activated , ActivatedBySchedule ,
Scheduled
,
Draft
,
DraftWaitingApproval
,
DraftApproved
,
CampaignAssetAdded
,
CampaignAssetRemoved , CampaignLandingPageAdded , CampaignLandingPageRemoved ,
CampaignFormAdded , CampaignFormRemoved , CampaignEmailAdded , CampaignEmailRemoved ,
CampaignSegmentAdded , CampaignSegmentRemoved , MembersAdded , ContentRequired ,
Completed
.
VisitorId is a templated parameter used in AppCloud content service apps. Its value is an integer and represents the ID of the visitor for whom you wish to construct a landing page.
RenderType is a templated parameter used in AppCloud content service apps. Its value specifies the different types of email renderings. Possible values are:
0 : No render -- no content is being assembled.
1 : EmailSend -- content is being assembled for sending an email.
2 : LiveWeb -- content is being assembled to render a live landing page.
3 : EmailPreview -- content is being assembled to render an email preview.
4 : WebPreview -- content is being assembled to render a preview of a landing page.
5 : EmailSaved -- content is being assembled to render the web version of a sent email.
IsPreview is a templated parameter used in AppCloud content service apps. Its value specifies whether the referencing email is in preview mode. Possible values are:
0 : False
1 : True
©2017 Oracle Corporation. All rights reserved 131 of 146
ExecutionId is a templated parameter used in AppCloud content service apps. Its value is an integer and identifies a unique email send execution.
5.2.3
PUT
/api/cloud/1.0/actions/instances/{id}
Updates an Oracle Eloqua AppCloud Action service instance.
Warning: For
PUT requests, you must specify application/json in the Content-Type header. If the Content-Type header is not included, data persisted in Eloqua will be corrupted, resulting in your App not functioning correctly.
URL parameters
name id
Request Body
name requiresConfiguration recordDefinition type
GUID description
Unique identifier for that service instance type boolean
Dictionary of strings description requiresConfiguration is an optional Boolean parameter which tells Eloqua whether user configuration is required before the app can be used. If set to true , users will be unable to activate a campaign or program containing the unconfigured app service instance. Eloqua will display an error message.
Defines the mapping between your fields and Eloqua's fields
Example
Update the record definition and configuration setting of the AppCloud action instance with GUID 7b95fe48-6598-43e8-8fd1-dcb40cf83ef6
©2017 Oracle Corporation. All rights reserved 132 of 146
PUT /api/cloud/1.0/actions/instances/7b95fe48-6598-43e8-
8fd1-dcb40cf83ef6
{
"recordDefinition" :
{
"ContactID" : "{{Contact.Id}}",
"EmailAddress" : "{{Contact.Field(C_
EmailAddress)}}"
}
"requiresConfiguration": true
}
5.2.4
PUT
/api/cloud/1.0/contents/instances/{id}
Updates an Oracle Eloqua AppCloud Content service instance.
Warning: For
PUT requests, you must specify application/json in the Content-Type header. If the Content-Type header is not included, data persisted in Eloqua will be corrupted, resulting in your App not functioning correctly.
URL parameters
name id
Request Body
name requiresConfiguration recordDefinition type
GUID description
Unique identifier for that service instance type boolean description requiresConfiguration is an optional Boolean parameter which tells Eloqua whether user configuration is required before the app can be used. If set to true , users will be unable to activate a campaign or program containing the unconfigured app service instance. Eloqua will display an error message.
Dictionary Defines the mapping between your fields and Eloqua's
©2017 Oracle Corporation. All rights reserved 133 of 146
name height width editorImageUrl type description of strings fields
Integer Height of the image
Integer Width of the image
URL URL of the image to display in the Landing Page and Email editor
Example
Update the record definition of the AppCloud content instance with GUID 7b95fe48-6598-
43e8-8fd1-dcb40cf83ef6
PUT /api/cloud/1.0/contents/instances/7b95fe48-6598-43e8-
8fd1-dcb40cf83ef6
{
"recordDefinition": {
"ContactID": "{{Contact.Id}}",
"EmailAddress": "{{Contact.Field(C_EmailAddress)}}",
},
"height": 256,
"width": 256,
"editorImageUrl": "https://example.com/image.png"
}
5.2.5
PUT
/api/cloud/1.0/decisions/instances/{id}
Updates an Oracle Eloqua AppCloud decision service instance.
Warning: For
PUT requests, you must specify application/json in the Content-Type header. If the Content-Type header is not included, data persisted in Eloqua will be corrupted, resulting in your App not functioning correctly.
URL parameters
name id type
GUID description
Unique identifier for that service instance
©2017 Oracle Corporation. All rights reserved 134 of 146
Request Body
name requiresConfiguration recordDefinition type boolean description requiresConfiguration is an optional Boolean parameter which tells Eloqua whether user configuration is required before the app can be used. If set to true , users will be unable to activate a campaign or program containing the unconfigured app service instance. Eloqua
Dictionary of strings will display an error message.
Defines the mapping between your fields and Eloqua's fields
Example
Update the record definition and configuration setting of the AppCloud decision instance with GUID 7b95fe48-6598-43e8-8fd1-dcb40cf83ef6
PUT /api/cloud/1.0/decisions/instances/7b95fe48-6598-43e8-
8fd1-dcb40cf83ef6
{
"recordDefinition" :
{
"ContactID" : "{{Contact.Id}}",
"EmailAddress" : "{{Contact.Field(C_
EmailAddress)}}"
}
"requiresConfiguration": true
}
5.2.6
PUT
/api/cloud/1.0/feeders/instances/{id}
Updates an Oracle Eloqua AppCloud feeder service instance.
Warning: For PUT requests, you must specify application/json in the Content-Type header. If the Content-Type header is not included, data persisted in Eloqua will be corrupted, resulting in your App not functioning correctly.
©2017 Oracle Corporation. All rights reserved 135 of 146
URL parameters
name id
Request Body
name requiresConfiguration type
GUID description
Unique identifier for that service instance type boolean description requiresConfiguration is an optional Boolean parameter which tells Eloqua whether user configuration is required before the app can be used. If set to true , users will be unable to activate a campaign or program containing the unconfigured app service instance. Eloqua will display an error message.
Example
Update the feeder service instance of the AppCloud action instance with GUID 7b95fe48-
6598-43e8-8fd1-dcb40cf83ef6
PUT /api/cloud/1.0/feeders/instances/7b95fe48-6598-43e8-
8fd1-dcb40cf83ef6
{
"requiresConfiguration": true
}
5.2.7
POST
/api/cloud/1.0/actions/instances
Retrieves information for up to 200 action service instances, searched by service instance GUID.
Important: Request header 'X-HTTP-Method-Override' needs to be set with value 'SEARCH'.
Request parameters
Name Type Description ids array The unique identifiers for the service instances to retrieve. Maximum
Possible value
(s)
©2017 Oracle Corporation. All rights reserved 136 of 146
Name Type Description of
GUIDs of 200 GUIDs per request.
If a GUID does not exist, or has been deleted, the result will be excluded from the response.
Possible value
(s)
If the array contains duplicate GUIDs, or exceeds the 200 limit, a 400 Bad Request will be returned.
Response parameters
Name recordDefinition
Type
Dictionary of strings requiresConfiguration boolean statement string dependentAssetType string dependentAssetId string uri createdBy string string
Description
The field mapping used in the service instance.
Whether or not user configuration is required before the service can be used.
The markup language statement used for referencing.
The asset type for which the service instance is being used. Possible values include: Campaign or
Program . For example, if the service is on a campaign canvas, the dependentAssetType would be
Campaign
.
The asset Id for the asset for which the service instance is being used in.
System-generated unique resource identifier.
The login id of the user who created the service instance.
©2017 Oracle Corporation. All rights reserved 137 of 146
Name createdAt updatedBy updatedAt string string string
Type Description
The date and time the service instance was created, expressed in
Unix time.
The login id of the user that last updated the service instance.
The date and time the service instance was last updated, expressed in Unix time.
Example
Retrieve 2 action service instances:
POST api/cloud/1.0/actions/instances
X-HTTP-Method-Override: SEARCH
Content-Type: application/json
Request body:
{
}
"ids": [
"d7a34c94-c370-4958-8a88-b56d5621e68a",
"1869b464-56f2-4334-923a-e631849d3cc8"
]
Response:
{
"items": [
{
"recordDefinition": {
"Id": "{{Contact.Id}}",
"field2": "{{Contact.Field(C_FirstName)}}"
},
"requiresConfiguration": false,
"statement": "{{ActionInstance
(d7a34c94c37049588a88b56d5621e68a)}}",
©2017 Oracle Corporation. All rights reserved 138 of 146
"dependentAssetType": "Campaign",
"dependentAssetId": 49251,
"uri":
"/actions/618068/instances/d7a34c94c37049588a88b56d5621e68a",
"createdBy": "Admin.User",
"createdAt": "2017-03-03T15:31:32.8930000Z",
},
{
"updatedBy": "Admin.User",
"updatedAt": "2017-03-03T15:31:33.4000000Z"
"recordDefinition": {
"Email": "{{CustomObject[1].Field[4]}}"
},
"requiresConfiguration": false,
"statement": "{{ActionInstance
(1869b46456f24334923ae631849d3cc8)}}",
"dependentAssetType": "Program",
"dependentAssetId": 49252,
"uri":
"/actions/618068/instances/1869b46456f24334923ae631849d3cc8",
"createdBy": "Admin.User",
"createdAt": "2017-03-03T15:31:33.8930000Z",
"updatedBy": "Admin.User",
"updatedAt": "2017-03-03T15:31:34.2170000Z"
}
]
}
5.2.8
POST
/api/cloud/1.0/decisions/instances
Retrieves information for up to 200 decision service instances, searched by service instance GUID.
Important: Request header 'X-HTTP-Method-Override' needs to be set with value 'SEARCH'.
Request parameters
Name Type Description ids array The unique identifiers for the service instances to retrieve. Maximum of
GUIDs of 200 GUIDs per request.
Possible value
(s)
©2017 Oracle Corporation. All rights reserved 139 of 146
Name Type Description
If a GUID does not exist, or has been deleted, the result will be excluded from the response.
If the array contains duplicate GUIDs, or exceeds the 200 limit, a 400 Bad Request will be returned.
Possible value
(s)
Response parameters
Name recordDefinition
Type
Dictionary of strings requiresConfiguration boolean statement string dependentAssetType string dependentAssetId string uri createdBy createdAt string string string
Description
The field mapping used in the service instance.
Whether or not user configuration is required before the service can be used.
The markup language statement used for referencing.
The asset type for which the service instance is being used. Possible values include: Campaign or
Program . For example, if the service is on a campaign canvas, the dependentAssetType would be Campaign .
The asset Id for the asset for which the service instance is being used in.
System-generated unique resource identifier.
The login id of the user who created the service instance.
The date and time the service instance was
©2017 Oracle Corporation. All rights reserved 140 of 146
Name updatedBy updatedAt string string
Type Description created, expressed in
Unix time.
The login id of the user that last updated the service instance.
The date and time the service instance was last updated, expressed in Unix time.
Example
Retrieve 2 decision service instances:
POST api/cloud/1.0/decisions/instances
X-HTTP-Method-Override: SEARCH
Content-Type: application/json
Request body:
{
}
"ids": [
"c8b0a315-4bb1-412f-b6d1-9c82f91cd6c2",
"214e200f-7997-40fa-8329-5bdd847d7b60"
]
Response:
{
"items": [
{
"recordDefinition": {
"Id": "{{Contact.Id}}",
},
"field2": "{{Contact.Field(C_FirstName)}}"
"requiresConfiguration": false,
"statement": "{{DecisionInstance
(c8b0a3154bb1412fb6d19c82f91cd6c2)}}",
"dependentAssetType": "Campaign",
©2017 Oracle Corporation. All rights reserved 141 of 146
"dependentAssetId": 49254,
"uri":
"/decisions/618074/instances/c8b0a3154bb1412fb6d19c82f91cd6c
2",
"createdBy": "Admin.User",
"createdAt": "2017-03-03T15:34:38.3470000Z",
},
{
"updatedBy": "Admin.User",
"updatedAt": "2017-03-03T15:34:38.9670000Z"
"recordDefinition": {
"Email": "{{CustomObject[1].Field[4]}}"
},
"requiresConfiguration": false,
"statement": "{{DecisionInstance
(214e200f799740fa83295bdd847d7b60)}}",
"dependentAssetType": "Program",
"dependentAssetId": 49255,
"uri":
"/decisions/618074/instances/214e200f799740fa83295bdd847d7b6
0",
"createdBy": "Admin.User",
"createdAt": "2017-03-03T15:34:39.3330000Z",
"updatedBy": "Admin.User",
"updatedAt": "2017-03-03T15:34:39.5930000Z"
}
]
}
5.2.9
GET
/api/cloud/1.0/apps/{id}/configurations
Retrieves an Oracle Eloqua AppCloud App configuration.
URL parameters
name id
Request Body
None.
type
GUID description
The AppId of the app configuration you are retrieving
©2017 Oracle Corporation. All rights reserved 142 of 146
Example
Retrieve the App configuration file for the App with GUID 7b95fe48-6598-43e8-8fd1dcb40cf83ef6
GET /api/cloud/1.0/apps/7b95fe48-6598-43e8-8fd1dcb40cf83ef6/configurations
5.2.10
PUT
/api/cloud/1.0/apps/{id}/configurations
Updates an Oracle Eloqua AppCloud App configuration.
Warning: changes to the configuration file directly affect the app. Accidentally changing the enableUrl
, for example, will result in people being unable to install your app. Ensure that any changes you push out are intentional.
URL parameters
name id
Request Body
name requiresConfiguration type
GUID type boolean description
The AppId of the app configuration you are updating uri clientSecret name description
URI token string string description requiresConfiguration is an optional Boolean parameter which tells Eloqua whether user configuration is required before the app can be used. If set to true , users will be unable to activate a campaign or program containing the unconfigured app service instance. Eloqua will display an error message.
specific URI that describes the app
Eloqua-generated OAuth token name of the app description of the app
©2017 Oracle Corporation. All rights reserved 143 of 146
name shortDescription iconUrl enableUrl statusUrl callbackUrl makeAvailableUrl publishedSites status type string
URL description a brief description of the app
URL pointing to the icon that Eloqua should display for the app templated URL templated URL templated URL
URL called when the App is first installed or when it is reconfigured
URL called when a user checks the app’s status
URL that the users should be redirected to after installing an app
URL Eloqua-generated URL used to add the app to a user's catalogue dictionary of strings lists the sites where the app is installed string Describes the status of the App - either "Up",
"Down", or "Maintenance".
Example
Set the status for the App with GUID 7b95fe48-6598-43e8-8fd1-dcb40cf83ef6 to Down.
PUT /api/cloud/1.0/apps/7b95fe48-6598-43e8-8fd1dcb40cf83ef6/configurations
{
"uri": "/apps/a0f6779e-8263-4bfb-a292-
9714cd10d1e7/configurations",
"clientSecret":
"a1ba63f9aae1cc84d91544f15b0af27ab6ced4e42c6145b9cc042574
2ecf2a0da1ba63f9aae1cc84d91544f15b0af27ab6ce",
"name": "Call Example",
"description": "This is a test",
"shortDescription": "This is a test",
"iconUrl": "https://www.example.com/logo.png",
"enableUrl": "http://example.com/enable/{appId}/
{installId}/{userName}/{siteName}/{siteId}",
"statusUrl": "http://example.com/status/{installId}",
"callbackUrl": "http://example.com/callback/
{installId}",
"makeAvailableUrl": "https://example.com",
"publishedSites": [
"AwesomeCompany"
],
"status": "Down"
}
©2017 Oracle Corporation. All rights reserved 144 of 146
5.2.11
GET
/api/cloud/1.0/apps/{id}/logs
Retrieves an app's outbound logs. This endpoint can be used to retrieve logs for apps across different pods, while the
logs page in the Eloqua interface
is limited only to displaying outbound requests for your instance and other clients on your pod.
This endpoint orders results by the request date, where the latest outbound requests are ordered first.
The outbound logs returned in the request will differ depending on the authentication used to access the endpoint.
If authenticated using oAuth:
The outbound logs for a provider's apps are displayed. Attempting to access logs for other apps will return a 403 forbidden response code.
If authenticated using basic authentication:
You can access logs for each app within your instance.
URL parameters
name id serviceInstanceId startDate endDate limit offset totalResults type
GUID
GUID description
The AppId of the app log you are retrieving.
The service instance Id of the app you are retrieving.
dateTime (10 digit integer
Unix time) dateTime (10 digit integer
Unix time) integer
The start date to filter outbound logs.
The end date to filter outbound logs.
integer boolean
A URL parameter that specifies the maximum number of records to return.
Specifies an offset that allows to retrieve the next batch of records.
A URL parameter that captures the total number of records that satisfy the request. This is not the count returned in the current response, but total count on the server side.
©2017 Oracle Corporation. All rights reserved 145 of 146
Request Body
None.
Example
Retrieve the outbound logs for the App configuration with GUID 7b95fe48-6598-43e8-8fd1dcb40cf83ef6
GET /api/cloud/1.0/apps/7b95fe48-6598-43e8-8fd1dcb40cf83ef6/logs
©2017 Oracle Corporation. All rights reserved 146 of 146
Télécharger
Publicité