Hello world,
After years of waiting to integrate Adobe Journey Optimizer (AJO) into aepp, as I was waiting for more capabilties to come into the AJO API before that, I finally did it during the last months.
Unfortunately, AJO was not built with the API-first mindset in mind, it was designed for marketers to create Journeys and Messages through different channels using the UI.
As the implementation and usage of AJO extended, the need for API was really getting to be noticed, but it is a lot of work to make the current workflow compatible with simple REST architecture.
We will also quickly covers the AJO vs JO (Journey Orchestration) setup as I did not integrate the JO API endpoints that were not migrated to AJO capabilities.
Nevertheless, there are some API capabilities offers and there are more to come.
Let’s have a look at what is available and what is not available.
AJO Module
First, the ajo module is its own module in aepp, so you can import it like any other module.
Once you have the ajo module imported, you can simply instantiate the AJO class.
import aepp
prod = aepp.importConfigFile('myConfig_file.json', connectInstance=True, sandbox='prod')
from aepp import ajo
myAjo = ajo.AJO(config=prod)
Like for the other module, you can connect to multiple sandbox at the same time.
import aepp
prod1 = aepp.importConfigFile('myConfig_file.json', connectInstance=True, sandbox='prod-1')
prod2 = aepp.importConfigFile('myConfig_file.json', connectInstance=True, sandbox='prod-2')
from aepp import ajo
myAjo1 = ajo.AJO(config=prod1)
myAjo2 = ajo.AJO(config=prod2)Overall, all methods are documented on the aepp ajo github page
AJO API Capabilities
In this table below, you will see which capabiltities are available in the module, via the API:
| Area | Description |
| Trigger Campaigns | Trigger campaigns from your backend using REST; supports marketing and transactional use cases |
| Campaign, Workflows and Surfaces | Read only – get details of the campaign (version, messages, variant, …), surfaces used and workflow setup |
| Content Templates & Fragments | CRUD for decision items, selection strategies, eligibility rules, item collections, ranking formulas, and placements |
| Simulations | Proof jobs and campaign previews |
| Message Execution | Up to 5000 TPS for supported high-throughput transactional messaging scenarios |
| Capping and Throttling | Setting a limit and threshold on custom action to 3rd party API |
| Suppression | Able to bloc Emails, Domains or jobs to run |
AJO API Missing Capabilities
There are, unfortunately, a lot of capabalities available in AJO that are not covered by API calls today.
Here is a list, and I may miss some elements:
| Area | Description |
| Experience Decisionning | No API for the new decision engine |
| Rule Set / Business Rules | frequency capping per channel or journey |
| Landing Pages | Setting up Landing pages for campaigns |
| Subscription Lists | AJO specific audiences that are whitelisting group of users. It can be handle via the AEP XDM subscriptions setup. |
The JO to AJO migration
At the beginning , the Journey Orchestration (JO) capabilities was a standalone feature focused exclusively on event-triggered, real-time journey orchestration — no native messaging, no campaigns, no decisioning.
As time passed and more needs were uncovered to add these additional features, the AJO offering came and put the JO license back.
Nowadays there are still Journey Orchestration licenses active and supported by Adobe, but as Adobe is planning to expand AJO in the future, I did not migrate some of the JO API capabilities.
They will / are replaced by new AJO capabilities, even though some of them are not yet available through API.
Current and Future of AJO on aepp
As of today, the following use-cases can be covered:
- Backend-triggered transactional messaging
- Campaign inventory and governance
- Cross-sandbox drift detection
- Suppression list sync
As time will go, I am certain that new functionalities will come in the AJO API and therefore, I will take care of loading them in aepp.
As time goes, and new new use-cases will surface and I will be more confortable on AJO use-cases, I will definitely develop further use-cases and do practical examples of these capabilities.