---
title: #3 - Geolocation
slug: one-adobe/3-geolocation
docTags: 
createdAt: 2025-03-17T16:00:13.193Z
---

:::hint{type="info"}
**Focus area**
Adobe Journey Optimizer

**Features**
Journeys, events, geolocation, contextual data, custom actions (Bloomreach)

**Difficulty**
Moderate
:::

![](https://api.archbee.com/api/optimize/dbeKUZjDrzT2_E01NuH_J-kXZOWdHLPaQPiQDumrNCU-20250321-161606.png)

## Use case description

What is the best time to try and sell travel insurance? Right before the customer leaves for a vacation ofcourse!

We want to use our mobile app's geolocation capabilities to contact customers when they arrive at the airport and give them the opportunity to get travel insurance last-minute if they don't have it already.

The content and texts for this campaign were already created in **Bloomreach** beforehand, so you'll need to use Bloomreach's API to get this content for your push notification.

When they leave the airport and they purchased travel insurance we want to bid them farewell, whilst thanking them for making the right decision.

***

## Requirements

- When the customer **arrives at the airport&#x20;**&#x77;e want to send them a **push notification**
- Content for the push notification needs to be requested from **Bloomreach**
- The content template should vary based on whether or not the customer has **travel insurance**
- When the customer **leaves the airport** and they purchased travel insurance, send them another **push notification**
- Customers can only enter this journey **one time every 30 days&#x20;**&#x74;o prevent spamming frequent travelers.
- <font color="#ff6200">**BONUS**</font> Create a Point-of-interest for an airport in the Netherlands



***

## Resources

**Bloomreach API**
The content templates available in the Bloomreach API are:

- `airportEntry` for content targeting customers **with** travel insurance
- `airportEntryNoInsurance` for content targeting customers **without** travel insurance



**Geolocation Points-of-interest**
These are not necessary to run the journey in test mode, but for the purpose of illustration we have prepared a couple of Points-of-interest for airports in the Netherlands. You can find them in [Adobe Places](https://experience.adobe.com/#/@demopotemea/sname\:sandbox06/platform/data-collection/places).

***

:::ExpandableHeading
### Tip 1 - Getting started

If you find yourself having a hard time getting started there's two great questions to ask yourself. They'll help you start to design a journey.



**How would someone enter this journey?&#x20;**&#xA;*There's four common ways for a profile to enter a journey*

1. ***Real-time event*****
   *Any event (action) a profile takes can be used to start or continue a journey in real-time.*
2. ***Audience qualification*****
   *When someone enters or leaves an audience this can be used to trigger a journey.&#x20;*
3. ***Read audience*****
   *This allows you to start the journey from a bulk selection from an audience. It takes all profiles that are currently qualified for the audience.*
4. ***Business event*****
   *In cases where a non-profile specific event affects one or multiple profiles you can trigger a journey for every profile affected.*
   *(for example "A flight being delayed")&#x20;*



**What components do I need to create the journey?**
*Open a notepad and visualize what components you'll need to have to be able to create the journey. In this case:*

- A journey that can only be re-entered after 30 days
- A geolocation event
- Information on the customer's travel insurance (don't worry, this is available on profile)
- A custom action to get content from the Bloomreach API


:::

:::ExpandableHeading
### Tip 2 - Setting up Places

In [Adobe Places](https://experience.adobe.com/#/@demopotemea/sname\:sandbox06/platform/data-collection/places) you can define Points-of-interest (POI) for locations you'd like your mobile app to trigger geolocation events. The technology required on your mobile app is all available in Adobe's mobile SDK. This will generate `location.entry` and `location.exit` event on the profile when they enter or exit the POI.

You can then create a event configuration in Adobe Journey Optimizer to use these events to trigger journeys.

![](https://api.archbee.com/api/optimize/dbeKUZjDrzT2_E01NuH_J-QSINKCI86bbA8XKbprQF_-20250321-173854.png)
:::

:::ExpandableHeading
### Tip 3 - Building the journey

When building a journey it's important to be concious about how customers flow through the journey. Journeys in Adobe Journey Optimizer are per profile, instead of as a group like in most traditional marketing automation systems. This means that every profile runs though the journey alone and therefore every action on the canvas will be considering the individual rather than the mass.

In the past you likely selected a group of customers, then split this group based on some condition, excluded a few and then send an email to the remaining customers. In Adobe Journey Optimizer you'll instead build your journey asking yourself "If a customer does \[something], I want them to \[next step]". It might not sound like a big difference, but just imagine yourself how a "Wait"-activity would work in both of these scenarios.

So based on this change in perspective, how would your journey look?

1. **If a customer \[enters an airport] I want them to \[receive an push notification]**
   We know a customer enters an airport if they trigger the geolocation event. This means we can start the journey with the `airportEntry` **Event.**
2. If the customer \[already has travel insurance] I want them to receive \[different content]. Content needs to come from the Bloomreach API
   It looks like we're going to have to split the path based on whether the customer has travel insurance. You can use the **Condition**-activity to create multiple paths in your journey. You should have a path for "customers **with** travel insurance" and one for "customers **without** travel insurance".

   Since the content needs to come from the Bloomreach API we can use the **Custom action**-activity `getBloomreachContent` on each path to request the variant of content the path requires.

   The content templates available in the Bloomreach API are:
   1. `airportEntry` for content targeting customers **with** travel insurance
   2. `airportEntryNoInsurance` for content targeting customers **without** travel insurance
3. **If the customer \[leaves the airport] and \[recently bought travel insurance] I want them to \[receive a push notification]**
   This line is only relevant if the customer didn't have travel insurance before, so we can continue this path. You can use the **Condition**-activity to check if they now have travel insurance! For ease of use we won't be using the Bloomreach API for this push notification.
:::

::::ExpandableHeading
### Tip 4 - Getting message content from an API

In Adobe Journey Optimizer you can create custom (API) connections to external systems, these are called **Custom actions**. You can use these Custom actions in your journeys to call the external system to send and receive information in real-time! Some examples include:

- Displaying a personalized message on an ATM
- Requesting message content from an external system, like Bloomreach
- Sending follow-up requests to the call center


Once a Custom action is configured it'll become available as an activity in your journeys in the actions-tab. For this exercise we've already configured a Custom action called **getBloomreachContent**. The API will send responses back based on given input. Additionally this Custom action will write it's responses to a Webhook. On [this website](https://webhook.site/#!/view/34d25231-33ef-431e-a344-47bb24df80c6/f17a554b-d7bb-4d20-abcf-c4b2a53bac1f/1) you'll be able to see all API calls made by custom actions during the Hands-on Lab.

:::CtaButton{label="Open Webhook.site" externalHref="https://webhook.site/#!/view/34d25231-33ef-431e-a344-47bb24df80c6/f17a554b-d7bb-4d20-abcf-c4b2a53bac1f/1" openInNewTab="true"}

:::

###

### How to add the airport name to the API

You might have noticed that one of the request parameters for the API is "Airport name". How do you populate this?

Events in Adobe Journey Optimizer come with contextual data. This is data attached to the event that describes what happened in the event. In our case, with the `airportEntry`, we've added the POI Name to the contextual data. The POI Name is the name given in Adobe Places to the POI. In our case this would be the airport name!

If you want to reference this data (for example in the API request parameter), navigate to `Context > airportEntry > Place context > POI interaction > POI detail > POI name` or use the search bar and search for `POI`.
::::

:::ExpandableHeading
### Tip 5 - Creating the push notification

The content for the push notification is coming from our **Custom action**. When the API called by the Custom action gives a response, this response will automatically be added to **contextual data** and can be used in message personalization.&#x20;

When in the push notification designer, use the :FontAwesome[]{icon="fa-solid fa-user"}**-icon** for the title, body and media to open the advanced editor. You can find your Custom action responses in the **Contextual attributes** tab, navigating to `Journey Orchestration > Actions > Bloomreach API > content` and select the respective field.
:::

:::ExpandableHeading
### Tip 6 - Preventing re-entries from happening to frequently

When creating your journey you'll see the journey properties in the right menu. If you already closed this menu, you can alwas reopen it by clicking on the :FontAwesome[]{icon="fa-solid fa-pencil"} **-icon** next to your journey's name.

In this menu you can define the Entrance configurations. You can choose if the journey can be entered more than once (default: yes) and can define the wait period for reentrance. The value you set here is the time a profile needs to wait before being able to enter this journey again.

This can help you prevent customer dissatisfaction due to overly frequent communication caused by journey reentries.
:::

***

::::ExpandableHeading
## Solution

The resulting journey should look something like the image below. Notice the **reentrance wait period** in the right hand menu is set to `30 days`.

![](https://api.archbee.com/api/optimize/dbeKUZjDrzT2_E01NuH_J-fLAi59EH2Kz9B9WDrKCSC-20250321-190428.png)

You can now run this journey in **test mode**. When you want to run an event-triggered journey in test mode, you'll need to provide all the contextual data. For the airport entry event, you'll have to provide:

- **Event type**: this needs to be `location.entry`
- **Core:** This is your profile identifier. In this case it is the ECID. You can find this in your test profile and copy it in.
- **POI Category:** this needs to be `Airport`
- **POI Name:** You can put the name of the airport you're entering, for example `Schiphol Airport`

As you don't have a mobile app we can push to, you will not be able to receive the push notifications. Luckily, the demo API (Bloomreach) will write it's responses to the a Webhook so you can see what you requested and how the API responded [here](https://webhook.site/#!/view/34d25231-33ef-431e-a344-47bb24df80c6/f17a554b-d7bb-4d20-abcf-c4b2a53bac1f/1).&#x20;

:::CtaButton{label="Open Webhook.site" openInNewTab="true"}

:::

An example of this journey is available, called **\[Example] Geolocation**.

:::CtaButton{label="See example journey" externalHref="https://experience.adobe.com/#/@demopotemea/sname:sandbox06/journey-optimizer/journeys/journey/bba57d35-3977-434d-8d76-1c36c65d191c" openInNewTab="true"}

:::

::Image[]{src="https://api.archbee.com/api/optimize/dbeKUZjDrzT2_E01NuH_J-iJLnPDyBqhBmSpr4HC1Xq-20250321-192019.jpeg" size="30" width="1170" height="2532" position="center" showCaption="false"}
::::

