585
 ,"pyPreviousComponent":"SetDefaultValuesToIHProperties"
,"pyPropensity":"0.25"
,"pyStrategy":"PrepareEmailTreatmentsByChannelManagement"
,"pySubjectID":"MAM-EMAIL-101551-STF"
,"pySubjectType":"VFUK-FW-AOMFW-Data-Subscription"
,"pzADMInputSource":"modelReferences"
,"pzDataFlowRecordContext":null
,"RampUpFlag":"N"
,"RampUpValue":"0"
,"Rank":"2"
,"RankingScore":"0.0"
,"RecommendationID":"N/A"
,"Scenario":"Default"
,"SendIdentifier":"N/A"
,"ServiceId":"447722101551"
,"ServiceProductSetName":"Voice and Email"
,"ShortDescription":"Dummy_AddMobilewithhandset"
,"SMSMarketingConsentFlag":"Y"
,"SocialMediaConsentFlag":"Y"
,"Source":"N/A"
,"StartDate":"20200401T121900.000 GMT"
,"StoreId":"N/A"
,"SubEventType":"Default"
,"SubscriptionDataPlanInBatchNBA":"Limited"
,"SurveyMarketingConsentFlag":"Y"
,"TargetSubChannel":"IMI"
,"TemplateID":"EmailChild"
,"TestGroupExpiry":"20220915T111441.692 GMT"
,"TILResponse":"N/A"
,"TrafficDataConsentFlag":"Y"
,"TreatmentAttributes":"
{\n\"ValueText17\":\"N/A\",\n\"ContractPeriod\":\"N/A\",\n\"TotalLoan\":\"N/A\",\n\"PlanCost\":\"N/A\",\n\"TotalAmount\":\"N/A\",\n\"MobileImageU


RL\":\"N/A\",\n\"SKU\":\"N/A\",\n\"Price\":\"45.9\",\n\"UpfrontPrice\":\"29\",\n\"NormalPrice\":\"54\",\n\"EmailCopy2\":\"Unlimited Calls and
texts\",\n\"EmailCopy1\":\"Good for browsing, catching up on social media\",\n\"EmailCopy\":\"With our <b>Unlimited Lite</b> data
plan\",\n\"imageURL\":\"https://tmw-static.s3-eu-west-1.amazonaws.com/vodafone/AOM-Warm-
Up/VODMODDTAPPLEiPHONE247X247.png\",\n\"ClickThroughURL\":\"N/A\",\n\"EmailSubjectLine\":\"N/A\"\n}"
,"TreatmentDynamicVariable1":"[FirstName], you're eligible for a 15% discount"
,"TreatmentDynamicVariable12":"https://cdn.vodafone.co.uk/en/assets/images/desktop/VOD_MOD_MB_Hero_Image_Order_Confirmed.png
"
,"TreatmentDynamicVariable2":"https://www.vodafone.co.uk/upgrade-and-offers?&tab=ils"
,"TreatmentDynamicVariable4":"https://cdn.vodafone.co.uk/en/assets/images/desktop/VOD_MOD_DT_Hero_Image_Order_Confirmed.png"
,"TreatmentDynamicVariable5":"As an existing customer you are eligible for an exclusive discount when adding an additional plan to your
account. There are a huge range of additional plans including tablets, SIM only plans and mobile broadband devices to use your discount on.
<tr> <tr> Plus you can explore our new Vodafone EVO plans which give you the flexibility to get the phone you want at the price you
choose."
,"TreatmentID":"XSL027-T0002"
,"TreatmentName":"Dummy_AddMobilewithhandset_Email"
,"TreatmentVariant":"AdCons"
,"Type":"Treatments Proposition Import"
,"WhiteMailMarketingConsentFlag":"Y"
}


586
]
}


587
Channel Management Email Seed Test Logic
This Logic change is to enable seed testing for IMI subchannel.
Exisitng strategy : GetPropositionDataForTreatment is updated to map the subchannel to email treatments from
TreatmentToSubchannels DD in separate path for Email treatments.
App calls the data flow ‘PrepareEmailTreatmentsByChannelManagementForSeedTest’ which collects the spine data and calls the
strategy ‘PrepareEmailTreatmentsByChannelManagement’ to find the Parent/child/Independet treatments and associated customer and
template details for each treatments.
The data Parent/Independent treatments will be written to data set
‘EmailCustomersWithParentTreatmentsForChannelManagementSeedTest’ and child treatments will be written to data set
‘EmailCustomersWithChildTreatmentsForChannelManagementSeedTest’ then App uses these data sets for further seed test
processing.


588
T2TV Contact Rules
This functionality introduces new configurations for contact rules at T2TV Level. It applies wherever IdentifyTreatmentVariations is called
and for any T2TV decision data that has new property ApplyT2TVSelfContentionStrategy set to ‘Yes’.
Strategy GetIHAtCustomerLevel is updated and ApplyT2TVSelfContention is created.
Decision Data Changes
T2TV decision data for all issues is updated to include new SR properties:
1. ApplyT2TVSelfContentionStrategy (Text)
2. FallowPeriodForDismissedResponse (Integer)
3. FallowPeriodForEngagedResponse (Integer)
4. ImpressionRatePeriod (Integer)
5. MaximumImpressions(Integer)
FallowPeriodForDismissedResponse gives the number of days the T2TV is unavailable after a dismissed response.
Similarly FallowPeriodForEngagedResponse is the number of days the T2TV is unavailable after an engaged response.
If MaximumImpressions is X and ImpressionRatePeriod Y, then each T2TV is configured to allow X Impressions per Y days. If the
MaximumImpressions has already been met for a customer within the ImpressionRatePeriod then the T2TV will not be available.
PM Tool Screens

PM Tool screens for Treatment To Treatment Variations showing new properties, ApplyT2TVSelfContentionStrategy, ImpressionRatePeriod
and MaximumImpressions.


589
When ApplyT2TVSelfContentionStrategy = Yes, areas for Fallow Period For Engaged Response, and Fallow Period For Dismissed
Response appear.


590
New Channel For GetNBA - TOBi
Introduction
TOBi is a new channel in NBA functionality. AOM to be able to provide personalised recommendations / next best actions to customers via
Tobi Chatbot.  The TOBi channel will be introduced to AoM using GetNBA execution mode with channel as ‘TOBi’ and subchannel as
‘Sales’.
The new channel, sub-channel and templates are configured via PM Tool, explained in the later part of this document.
Extend GetNBA seed testing to include the TOBi channel.
All existing simulation functionality(Customer, Distribution and Funnel) and reporting is available for the TOBi channel.
Business Purpose = As per the available test catalogue for TOBi, it uses  HBB, CrossSell, Renew and Care business purposes.
Execution mode = GetNBA
SubChannel = Sales
Sample GetNBA API request with SubChannel = Sales
{
"Identifier": {
"Account": {
"AccountNumber": "7601XXXX",
"Status": "Existing",
"Type": "Consumer"
},
"ServiceNumber": "445730XXXXXX"
},
"RequestorDetail": {
"Channel": "TOBi",
"SubChannel": "Sales"
},
"Context": {
"PrimaryContext": "",
"SecondaryContext": ""
}
}

For Channel = TOBI in GetNBA API request, the main strategy for TOBi functionality is:
IdentifyBestTOBiTreatmentsForSubscription.
The API request returns:
A List of TOBi eligible NBA offers (treatments) and their priority order.

A sample GetNBA API response for TOBi request is below:


591
{
    "InteractionId": 4266061060749558537,
    "ActionList": [
        {
            "Propensity": 0.25,
            "Actions": [
                {
                    "Type": "Button",
                    "Outcome": "Dismissed",
                    "Id": "AppSalesDismissAction",
                    "Detail": [
                        {
                            "Value": "No Thanks",
                            "Name": "label"
                        },
                        {
                            "Value": "Dismiss",
                            "Name": "action"
                        },
                        {
                            "Value": "2",
                            "Name": "index"
                        }
                    ]
                },
                {
                    "Type": "Button",
                    "Outcome": "Clicked",
                    "Id": "AppSalesClickAction",
                    "Detail": [
                        {
                            "Value": "http://cdn.vodafone.co.uk/en/assets/images/desktop/xsell_NBA_recent_order.png",
                            "Name": "url"
                        },
                        {
                            "Value": "Check my order",
                            "Name": "label"
                        },
                        {
                            "Value": "ReDirect",
                            "Name": "action"
                        },
                        {
                            "Value": "1",
                            "Name": "index"
                        }
                    ]
                }
            ],
            "OfferVariant": "OfferVariantDefault",


592
            "Priority": 3,
            "Channel": "TOBi",
            "SubChannel": "Sales",
            "OfferId": "VFCR0004",
            "OfferName": "TrackYourOrder",
            "TreatmentId": "VFCR0004-01",
            "OfferDescription": "",
            "TreatmentVariant": "TreatmentVariantDefault",
            "Detail": [
                {
                    "Value": "http://cdn.vodafone.co.uk/en/assets/images/desktop/xsell_NBA_recent_order.png",
                    "Name": "imageURL"
                },
                {
                    "Value": "Your recent order",
                    "Name": "title"
                },
                {
                    "Value": "Check the status of your order anytime ",
                    "Name": "body"
                }
            ],
            "TreatmentName": "TrackYourOrder_TOBi"
        },
        {
            "Propensity": 0.25,
            "Actions": [
                {
                    "Type": "Button",
                    "Outcome": "Dismissed",
                    "Id": "AppSalesDismissAction",
                    "Detail": [
                        {
                            "Value": "Not Today",
                            "Name": "label"
                        },
                        {
                            "Value": "Dismiss",
                            "Name": "action"
                        },
                        {
                            "Value": "2",
                            "Name": "index"
                        }
                    ]
                },
                {
                    "Type": "Button",
                    "Outcome": "Clicked",
                    "Id": "AppSalesClickAction",
                    "Detail": [


593
                        {
                            "Value": "https://www.vodafone.co.uk/mobile/brands/samsung/samsung-galaxy-watch",
                            "Name": "url"
                        },
                        {
                            "Value": "Find out more",
                            "Name": "label"
                        },
                        {
                            "Value": "ReDirect",
                            "Name": "action"
                        },
                        {
                            "Value": "1",
                            "Name": "index"
                        }
                    ]
                }
            ],
            "Priority": 9,
            "OfferVariant": "Android",
            "Channel": "TOBi",
            "SubChannel": "Sales",
            "OfferId": "XSL011",
            "OfferName": "AddSmartwatch",
            "TreatmentId": "XSL011-T0004",
            "OfferDescription": "",
            "TreatmentVariant": "AndroidSmartWatch",
            "Detail": [
                {
                    "Value": "https://cdn.vodafone.co.uk/en/assets/images/desktop/Samsung_Watch_Series6_NBA.jpg",
                    "Name": "imageURL"
                },
                {
                    "Value": "Get the Samsung Watch3 ",
                    "Name": "body"
                },
                {
                    "Value": "Treat yourself to a new watch ",
                    "Name": "title"
                }
            ],
            "TreatmentName": "AddSmartwatch_TOBi"
        },
        {
            "Propensity": 0.25,
            "Actions": [
                {
                    "Type": "Button",
                    "Outcome": "Clicked",
                    "Id": "AppSalesClickAction",


594
                    "Detail": [
                        {
                            "Value": "https://www.vodafone.co.uk/gigafast",
                            "Name": "url"
                        },
                        {
                            "Value": "Find out more",
                            "Name": "label"
                        },
                        {
                            "Value": "ReDirect",
                            "Name": "action"
                        },
                        {
                            "Value": "1",
                            "Name": "index"
                        }
                    ]
                },
                {
                    "Type": "Button",
                    "Outcome": "Dismissed",
                    "Id": "AppSalesDismissAction",
                    "Detail": [
                        {
                            "Value": "No thanks ",
                            "Name": "label"
                        },
                        {
                            "Value": "Dismiss",
                            "Name": "action"
                        },
                        {
                            "Value": "2",
                            "Name": "index"
                        }
                    ]
                }
            ],
            "OfferVariant": "AverageSpeed900",
            "Priority": 6,
            "Channel": "TOBi",
            "SubChannel": "Sales",
            "OfferId": "HBB007",
            "OfferName": "AddBroadbandProExtra",
            "TreatmentId": "HBB007-01",
            "OfferDescription": "",
            "TreatmentVariant": "GigafastWithContent",
            "Detail": [
                {
                    "Value": "https://assets.vodafone.co.uk/cs/groups/public/documents/images/mva_offers_august_15.png",


595
                    "Name": "imageURL"
                },
                {
                    "Value": "Full Fibre broadband directly to your home",
                    "Name": "body"
                },
                {
                    "Value": "Vodafone Gigafast Broadband",
                    "Name": "title"
                }
            ],
            "TreatmentName": "AddBroadbandProExtra_TOBi"
        },
        {
            "Propensity": 0.5,
            "Actions": [
                {
                    "Type": "Button",
                    "Outcome": "Clicked",
                    "Id": "AppSalesClickAction",
                    "Detail": [
                        {
                            "Value": "1",
                            "Name": "Index"
                        },
                        {
                            "Value": "myvodafone://UPGRADE_NOW",
                            "Name": "URL"
                        },
                        {
                            "Value": "Upgrade now",
                            "Name": "Label"
                        },
                        {
                            "Value": "ReDirect",
                            "Name": "Action"
                        }
                    ]
                },
                {
                    "Type": "Button",
                    "Outcome": "Clicked",
                    "Id": "AppSalesClickAction",
                    "Detail": [
                        {
                            "Value": "https://www.vodafone.co.uk/upgrade-and-offers",
                            "Name": "URL"
                        },
                        {
                            "Value": "1",
                            "Name": "Index"


596
                        },
                        {
                            "Value": "Find out more",
                            "Name": "Label"
                        },
                        {
                            "Value": "ReDirect",
                            "Name": "Action"
                        }
                    ]
                }
            ],
            "Priority": 12,
            "OfferVariant": "OfferVariantDefault",
            "Channel": "TOBi",
            "SubChannel": "Sales",
            "OfferId": "VFO0015",
            "OfferName": "UpgradeMobile",
            "TreatmentId": "VFO0015-01",
            "OfferDescription": "",
            "TreatmentVariant": "BuyNowIphone",
            "Detail": [
                {
                    "Value": "http://cdn.vodafone.co.uk/en/assets/images/desktop/xsell_NBA_recent_order.png"
                    "Name": "imageURL"
                },
                {
                    "Value": "Grab the latest iPhone in the market ",
                    "Name": "body"
                },
                {
                    "Value": "The new iPhone is out there",
                    "Name": "title"
                }
            ],
            "TreatmentName": "UpgradeMobile_TOBi"
        }
    ],
    "CustomerId": "-XXXXXXXXX"
}

TOBi provide responses to AOM to indicate whether the offer presented on the TOBi Chatbot was 'shown' and how the customer responded
to the offer.
Selected Offer is returned to Channel by AOM GetNBA
Shown Offer is presented on TOBi channel SetNBAResponseResponse/Outcome Description API


597
Shown: when an offer was 'shown' to a customer
Clicked: a customer click on the relevant 'accept' CTA
Dismissed: A customer has clicked on the relevant 'decline' CTA button

Error Scenarios
If no offers are returned from AOM for a given customer, response code (204) would be returned as per the following table:
 Clicked Customer has clicked on Accept button on
TOBi chatbot.SetNBAResponse
Dismissed Customer has rejected the offer on TOBi
chatbot.SetNBAResponse


598
Propositions and PM Tool screens for TOBi
Offers and Treatments are configured by PM Tool: “Offer” and “Treatment” screen respectively.
The existing offers used for TOBi are as mentioned below. More details present in Offer Catalogue.
OfferVariant and TreatmentVariant are as follows:

Channel Screen: New channel ‘TOBi’ is configured.AddBroadbandProExtra TOBi AddBroadbandProExtra_TOBi GetNBA HBB
AddSmartwatch TOBi AddSmartwatch_TOBi GetNBA CrossSell
TrackYourOrder TOBi TrackYourOrder_TOBi GetNBA Care
UpgradeMobile TOBi UpgradeMobile_TOBi GetNBA RenewOffer Name ChannelTreatment OfferExecutionMode Business Purpose
AddBroadbandProExtra_TOBi AverageSpeed900 GigafastWithContent
AddBroadbandProExtra_TOBi AverageSpeed900 TreatmentVariantDefault
AddBroadbandProExtra_TOBi OfferVariantDefault TreatmentVariantDefault
AddSmartwatch_TOBi Apple AppleSmartWatch
AddSmartwatch_TOBi Android AndroidSmartWatch
TrackYourOrder_TOBi OfferVariantDefault TreatmentVariantDefault
UpgradeMobile_TOBi OfferVariantDefault BuyNowIphone
UpgradeMobile_TOBi OfferVariantDefault StandardUpgradePeriodTreatmentName OfferVariationName TreatmentVariationName


599
 SubChannel Screen: New sub channel ‘Sales’ is configured.
  Treatment Screen: The new channel and sub channel is associated with a treatment from the PM Tool ‘Treatment’ screen as below:

Offer Decision Mix Screen
Max and Min value for offers required for decision mix is configured in this screen.


600
 Template Screen
TOBi template is created and template attributes assigned.

Actions Screen
Two button actions are created. One for Click/Accept, one for Dismiss/Reject namely:
Clicked
Dismissed


601

Treatment To Treatment Variations Screen
The above create template and actions are assigned to each treatment to treatment variation.
Template assignment
template json after push in T2TVAttrbutes for Treatment:
Treatment : AddBroadbandProExtra_TOBi-AverageSpeed900-GigafastWithContent
{
"body":"Full Fibre broadband directly to your home",
"title":"Vodafone Gigafast Broadband",
"imageURL":"https://assets.vodafone.co.uk/cs/groups/public/documents/images/mva_offers_august_15.png"
}
The T2TVAttribute CSV :
Action assignment
HBB_T OBi_T2T …
18 Nov 2022, 10:34 AMute.csv


602

Action Json after PM push in T2TVActions DD :
Treatment : AddBroadbandProExtra_TOBi-AverageSpeed900-GigafastWithContent
AppSalesDismissAction :
[
{
"Name":"Index",
"Value":"2"
},
{
"Name":"Action",
"Value":"Dismiss"
},
{
"Name":"Label",
"Value":"No thanks"
}
]
AppSalesClickAction :
[
{
"Name":"URL",
"Value":"https://www.vodafone.co.uk/gigafast"
},
{
"Name":"Label",
"Value":"Find out more"
},
{
"Name":"Action",
"Value":"ReDirect"


603
},
{
"Name":"Index",
"Value":"1"
}
]
T2TVActions CSV:

HBB_T OBi_T2T …
18 Nov 2022, 10:35 AMons.csv


604
TOBi Logic
The primary strategy structure and flow for TOBi is on the same lines as the GetNBA logic.
Main Strategy: IdentifyBestTOBiTreatmentsForSubscription, called from GetNBA when Context(Channel) = "TOBi"

Brief description of the strategy components
1] Strategy: IdentifyEligibleTOBiTreatments
Get offer, offer variation with treatment and treatment variation for TOBi.

2] Strategy: IdentifyTreatmentSubChannel
TOBi offers pass through IdentifyTreatmentSubChannelForGetNBA where TreatmentToSubChannels Decision Data is imported. See PM
tool screens. This strategy checks if .SubChannel from Context = .TargetSubChannel from the decision data and passes those records.

3] Strategy: IdentifyBestTreatmentforSubscription
TOBi treatments pass through strategy: IdentifyBestTreatmentForTOBiOnGetNBA, here it checks the MaxOffers (NoOfActions from
context) and OfferDecisionMix DD. and prioritize TOBi offers based on PriorityScore.
Strategy - IdentifyBestTreatmentForTOBiOnGetNBA


605
4] Strategy: IdentifyTreatmentVariations
Common strategy which finds eligible Treatment Variations.

5] Strategy: PopulateControlGroupPercentage
Populates Offer and Treatment level control group percentages.

6] Strategy: SelectBetweenOfferORTreatmentPotentialControlSplit
Passes through ApplyPotentialControlSplit or ApplyPotentialControlSplitAtTreatmentLevel depending on if .ControlGroupLevel="Offer" or
"Treatment"

7] Strategy PopulateOutputPropertiesForTOBi
When .PotentialControlFlag="Target", strategy: PopulateOutputPropertiesForGetNBA is called to create relevant properties to be sent in
the API response.

8] Strategy: SetIHPropertiesForAllChannels
Populate required IH fields for all channels while writing them to Interaction History. Maps properties for Interaction History and properties
with no value are set to default.
TOBi specific values are set for:
.pyDirection = "Inbound"
.pyOutcome = "Selected"
.InControlGroup = @if(.PotentialControlFlag="Target","N","Y")
 Strategy : SetIHForTOBi


606
9] Switch and Error messages

TOBi Inbound Seed Testing Logic change :
Strategy: PrepareInboundNBAForSeedTest - Exisitng  Filter component ‘Valid Channels’ updated to add filter for TOBi channel, so that it
would allow the TOBi treatments pass through. Apart from this chage GetNBA seeds works ‘AS IS’.
@String.equalsIgnoreCase(SetChannel.Channel,"TOBi")

TOBi GetNBA simulation query
For Funnel simulation to work for TOBi channel, existing GetNBA simulation query has been updated with names of TOBi strategies. Below
is the attached simulation query :

TOBi Capture Response Logic changes :
Response from TOBi will use the existing SetNBAResponse API and there is no logic change required (as the current story does not specify
any additional data to be recorded) other than configuring the OutcomeMapping decision data for TOBi channel.
ErrorMessage - No Decision
Sets .ErrorMessage = "No Decision"SetErrorMessage.ErrorMessage!=""
SetIHPropertiesForAllChannels OtherwiseSelect Component Condition
GetNBA_Funne …
17 Nov 2022, 06:07 AM_V2.txt


607
Outcome mapping DD update:
For more details Confluence page link :
NBA FW - Add New Channel TOBi to GetNBA
The TOBi test catalogue
 Selected Offer is returned to Channel by AOM GetNBA
Shown Offer is presented on TOBi channel SetNBAResponse
Clicked Customer has clicked on ‘Find out More’ button on TOBi SetNBAResponse
Dismissed Customer has clicked on 'Not Today' button on TOBi i.e.
Customer Rejected the offer.SetNBAResponseResponse/Outcome Description API
TOBi Dismissed Dismissed
TOBi Clicked Engaged
TOBi Selected Selected
TOBi Shown PresentedChannel Outcome StandardOutcome
VFUK_T OBi_Of …
17 Nov 2022, 11:02 AM02.xlsx


608
Channel Management Email Part 2 OPTI KT
Objective :
Record email outcomes in Interaction History
The purpose of this document is the introduction to capture response API for Email -IMI channel.
Email Outcomes from IMI will be sent to AOM via existing CaptureResponse API with values as detailed below. All these outcomes will be
written to Interaction History.
Persist email hard bounces for 18 months and make available to logic.
Hard bounce outcomes will be received from IMI for email campaigns. The bouncing email addresses need to be stored for 18 months (in
line with data retention policy) and made available to Pega campaign logic for use in exclusions and eligibility rules.
All email addresses for which we have received a hard bounce outcome are stored in a table for 18 months. The table is available to be
used by campaign logic for exclusions.
The hard bounced email addresses in the email blacklist table are excluded from email communications.
The “HardBounce” response from IMI will be written to separate email_ bounced table
This process will be managed by App
App will provide a new data set on email_ bounced table to be consumed by relevant Data Flows
App will provide a new Page property (of type Email bounced ) on Contact class

Logic Changes
A. New Outcome Mapping in PM tool
The following entries should be added -
Email Delivered Other
Email Opened Other
Email Clicked Engaged
Email HardBounce Failed
Email InvalidEmailAddress FailedChannel Outcome StandardOutcome


609
For capturing response logic using existing implementation for email channel in strategy ‘CaptureResponse’, so no code changes done.
B. New DF - PrepareAccountDataForBatch
Used existing PrepareAccountData DF as PrepareAccountDataForBatch
The new data set EmailBounced as the new secondary data set for the new compose with Contact data set
In the new Compose shape named “Get Email Blacklist”,
The new EmailBlacklist data in to new page property EmailBlacklist on Contact class
Compose on EmailAddress property

C. Update DF - PrepareBatchData
Replace the call to DF PrepareAccountData with new DF PrepareAccountDataForBatchEmail Bounced Failed
Email InvalidRequest Failed


611
Personalised Video
Introduction
AOM now allows for a personalised video to be created for a customer using the customer's unique data for a specific treatment.  When a
customer clicks the URL in the outbound communication, they are directed to an AOM which passes the relevant personalisation data to an
API called Idomoo to generate the personalised video for the customer. AOM makes a call to Idomoo, retrieves the URL for the
personalised video, and then redirects to a landing page, passing the URL, so the landing page can render the video.
Outbound Communication includes Email (Batch - IMI SubChannel), SMS (Batch & Real-time) & AppPush (Batch & Real-time).
Treatments
Treatments will be able to be used for a personalised video depending on if they contain a HandoverAction.
If the Treatment contains a HandoverAction available, Strategy FW will call the existing SaveMetaData function to store Personalised
Video generation metadata in C* dataset and retrieve the Unique Key corresponding to the record stored and make the Key available to
the Treatment data as VideoHandoverActionId.
Strategy FW will generate the Landing Page URL following the existing design pattern for SMS and extend this functionality to Email &
AppPush.
When the Landing Page URL is clicked from the Outbound Communication, the existing Microsite Case will be initiated. The next steps are
as follows:
If the corresponding Customer/Treatment data contains VideoHandoverActionId, the case will retrieve the relevant Personalised Video
generation metadata from C* dataset, retrieve the Personalised Video URL from Idomoo, and redirect to an external site for presenting
the Personalised Video.
If the corresponding Customer/Treatment data does not contain VideoHandoverActionId, the case will execute the Microsite Decisioning
funnel following the as-is process.


funnel following the as-is process.

Each Issue has its own TreatmentoTreatmentVariationHandoverActions Decision Data. They are used to store Personalised Video
generation metadata which can be used in the strategy framework.
T2TVHandoverActions Care T2TVHandoverActions
T2TVHandoverActions CrossSell T2TVHandoverActions
T2TVHandoverActions Engagement T2TVHandoverActions
T2TVHandoverActions HBB T2TVHandoverActions
T2TVHandoverActions Loyalty T2TVHandoverActions
T2TVHandoverActions Renew T2TVHandoverActions
T2TVHandoverActions Retain T2TVHandoverActions
T2TVHandoverActions Retention T2TVHandoverActions
T2TVHandoverActions Service T2TVHandoverActions
T2TVHandoverActions TradeIn T2TVHandoverActionsDecision Data Issue Group


612

The treatments are imported in the strategy ImportAllT2TVHandoverActions. All T2TVHandover actions are imported here from their
respective issues.

 T2TVHandoverActions Upsell T2TVHandoverActions


613
Personalised Video Logic
SetHandoverActions
T2TVHandoverActions are imported and matched with corresponding treatments in the main flow based on TreatmentName, OfferVariant,
and TreatmentVariant, identifying which treatments are eligible for Video Personalisation.
ActionType, ActionAttributes, and TemplateAttributes are mapped.
If treatments match, we will append the HandoverActions Details to the treatment.
o Data tokens in ActionAttributes are replaced
o Data tokens in TemplateAttributes are replaced
o VideoHandoverActionId is set
Treatments that do not match follow the top path and nothing is set.
SetHandoverActions has been added to the main strategies for each of the three Outbound Communication Channels Email, SMS and
AppPush.
Email Outbound Communication Channel
PopulateOutputPropertiesForEmailByChannelManagement
SetHandoverActions sub-strategy added to the strategy.


614

SMS Outbound Communication Channel
PopulateOutputPropertiesForSMSByBatch
SetHandoverActions sub-strategy added to the strategy.

PopulateOutputPropertiesForSMSByTrigger
SetHandoverActions sub-strategy added to the strategy.


615
AppPush Outbound Communication Channel
PopulateOutputPropertiesForAppPushBatch
SetHandoverActions sub-strategy added to the strategy.

PopulateOutputPropertiesForAppPushByTrigger
SetHandoverActions sub-strategy added to the strategy.

GetPropositionDataForTreatment
This strategy has been updated so we can seed test the outbound communication channels.


617
PM Tool screens for T2TVHandoverActions
1. Artifacts -> Channel
Choose the email channel and check the Allow Handover Action check box

2. Templates -> Handover Actions
Put a number as the Action ID, and choose Video as the Action Type

3. Artifacts -> Treatment To Treatment Variations
Choose and email Treatment and scroll down to the Action Type fields.


618
Choose Video and update the Action Attributes and Template Attributes with the required values.


620
Optimisation Artefacts By Release
The pages under this main page will list down artefacts updated/created by VFUK Optimisation team. For each capability release, logic
team should look at the list of artefacts from relevant optimisation release and identify conflicts and prepare list for merge activity (in case of
conflicts).
The VFUK Optimisation team will provide the list of artefacts updated/created before start of their development activity.
The Capability logic team will identify conflicts as they confirm design approach and complete the merge before updating the build log for
build to test team at the end of development cycle.


621
Release 1.7.1
This Optimisation release will go live alongside  Capability release 1.7.
Capability release 1.8 should identify conflicts from the list of artefacts as shared by VFUK Optimisation team for release 1.7.1. Please note
that, all changes being done for this optimisation release is limited to ruleset - AOMFW-Artefacts:01-02-45

 Non geo MMSExtra Proposition
MMSExtra Offer flow
NonGeoExtra Offer flow
NonGeoMMSMKTStrategy Strategy
Spend manager ContactRules2 Strategy
ServiceOfferEligibility Prop filter
Minutes UpsellRules3 Strategy
UpsellRules1 Strategy
TreatmentVariationsEligibility Prop filter
UpsellOfferEligibility Prop filter
SMSTreatmentEligibility Prop filter
PopulateOutputPropertiesForSMSByTriggerStrategyArea Rule Name Rule Type


622
VF-UK AWS - Access via bastion
VF-UK deploys bastion servers to safe-guard access to application and database servers in AWS VPCs.
To access any of the servers (SSH, SFTP) or databases (Oracle, Postgres etc.), a SSH tunnel through the bastion has to be setup. Bastion servers allow access to
specific application / database server(s).
Setup MFA to access Bastion host via SSH
1. Open a terminal window (macOS or Linux. On Windows you will need something similar to Putty) - Please ensure that the terminal window is set to not
close on session end - DO NOT PROCEED if this is not set.
2. Run ssh -i /path/to/your/keyfile/your_keyfile username@bastion-host-name
e.g. ssh -i ~/.ssh/asit-adqura_keyfile asit.ghosh@vf-aom-bastion-euwest1-ec2.1.sharednonprod.svc.vodafoneaws.co.uk
3. Accept the host key verification and enter your ssh-key passphrase, if you have one.
4. Server will respond with a Google Authenticator URL as shown in above screenshot and few other important key and codes. Please copy and safe keep them -
you may need those if your authenticator fails in future.
5. Copy the URL and open it in a browser - it will look similar to below -
e.g. https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/user.name@pega-poc-Bastion-
01%3Fsecret%3DZTXOHXXXXSXWRMXX
6. On your mobile phone download a Google Authenticator compatible app (e.g. Authy, Google Authenticator - I recommend using Authy)


7. After installing the app, follow app instruction to add a new authenticator.
Below screenshots show the steps in Authy (both QR scanning or Manual entry)Pre-requisite
ACCESS TO THE BASTION AND ALL OTHER SERVERS MUST BE APPROVED AND CREATED BY VF-UK ADMINS. PLEASE CONTACT @PIERS KING IF YOU NEED ACCESS.
YOUR SSH PUBLIC KEY MUST BE SUPPLIED TO VF-UK - NO PASSWORD BASED AUTHENTICATION IS ALLOWED. IF YOU DON'T KNOW WHAT SSH PUBLIC KEY IS, PLEASE CONTACT
@ASIT GHOSH


623
8. After authenticator account is setup, go back to terminal window and run ssh -i /path/to/your/keyfile/your_keyfile username@bastion-host-name
e.g. ssh -i ~/.ssh/asit-adqura_keyfile asit.ghosh@vf-aom-bastion-euwest1-ec2.1.sharednonprod.svc.vodafoneaws.co.uk
9. Once you provide your ssh-key passphrase, if you have one, bastion host will prompt for Verification code:
10. Enter the code from authenticator app - similar to 852675 from above screenshot.
Setup tunnel to Application / DB servers via Bastion host
1. Open terminal window (macOS or Linux. On Windows you will need something similar to Putty)
2. Run ssh -i /path/to/your/keyfile/your_keyfile username@bastion-host-name -N -L <local port>:<app/db server hostname>:<app/db server port>
e.g.
SSH:         ssh -i ~/.ssh/asit-adqura_keyfile asit.ghosh@vf-aom-bastion-euwest1-
ec2.1.sharednonprod.svc.vodafoneaws.co.uk -N -L 15022:vf-aom-peganode-euwest1-ec2.2.local:22
Oracle DB:   ssh -i ~/.ssh/asit-adqura_keyfile asit.ghosh@vf-aom-bastion-euwest1-
ec2.1.sharednonprod.svc.vodafoneaws.co.uk -N -L 11521:vf-aom-peganode-euwest1-ec2.2.local:1521
Postgres DB: ssh -i ~/.ssh/asit-adqura_keyfile asit.ghosh@vf-aom-bastion-euwest1-


ec2.1.sharednonprod.svc.vodafoneaws.co.uk -N -L 15432:vf-aom-peganode-euwest1-ec2.2.local:5432
3. Once you provide your ssh-key passphrase, if you have one, bastion host will prompt for Verification code:
4. Enter the code from authenticator app
5. You have successfully setup the tunnel
6. You must open the corresponding tunnel before accessing any server/db
Accessing Server/DB via tunnel
1. Open the usual app you use for accessing application/database
e.g. SQLDeveloper, DBeaver, Terminal, iTerm2
2. Access the required local port setup above on localhost


624
3. You have now successfully setup access/connection
4. Every time you need to access this connection, you must first open the tunnel before access
5. You can save the tunnel config in iTerm2 profile (similar setup available in Putty)
Related articles
VF-UK AWS - Access via bastion




625
Extras Landing Page - Microsite
Introduction
Objective of Offers or Extras Landing Page is to display a web page (developed in Microsite), when customer clicks a link inside SMS. The
web page presents the customer with offers e.g. 1GB or 2GB of extra data.
Pre-requisite: Functionality e.g. NBA Batch or T2S has sent SMS to customers. The SMS body contains a link for Microsite, which customer
needs to click.
When customer clicks on the link, below Microsite pages are displayed for a no-error scenario.
Below screenshot shows a Parent offer with 2 child offers, for 1GB and 2GB.
Each microsite page displayed for a scenario e.g. success, failure etc. is customizable via a template and contents configured in PM Tool.
Parent-Child relationship is configured in a decision data via PM Tool, explained in the ‘Propositions’ section, later in this document.Current implementation has been built and dev tested for NBA Batch, Trigger (TIL) and ProcessEvent (T2S) functionalities but has
the scope to be extended to other execution modes and functionalities that have SMS capability.


626
“Buy Now” button click displays below page i.e. the offer acceptance is being processed.


627
Now, if the customer clicks on the same link, Microsite will not display the accepted offer. Only the remaining eligible offer(s) will be
displayed.

An example of a Parent offer without any child offer is:

This functionality is dev-tested/ST-tested and is available for all squads and can be used by configuring appropriate catalogue: One of the
squad example is:
BusinessPurpose = CrossSell
OfferExecutionMode / ExecutionMode = LandingPages


628
Channel = Microsite

Sample SMS sent to customer
Treat yourself or a loved one to the new Apple Watch Series 7, the most durable Apple Watch ever built. It’s bigger and better, now with 3
free months’s Fitness+ included. Choose your smartwatch contract length (between 12 - 36 months) and your upfront cost, and you can get
our best-ever price for a smartwatch. Visit vodafone.uk/Apple_Watch to find out more. Credit check, eligibility & terms apply. Credit by
Vodafone Ltd. To end texts, send STOP SMS to 9774. https://proactivecare.data.sit.vodafoneaws.co.uk/MS/index.html?
Site=Offers&id=98c1f46ec3184165b97a56ea3b9987b4
Sequence of Events
1. NBA Batch Process sends SMS to customer that has the Microsite link.
2. Customer clicks on the link.
3. App layer will land the customer on Microsite landing page. Microsite is just a Pega Case.
4. Logic layer does re-validation to check if the offer is still available and the customer eligible for the offer.
5. For re-validation sucess scenario, eligible offer (single Parent OR Parent + Child offers) are displayed.
6. Along with success scenario, that writes Shown outcome in IH, Revalidation process also writes to IH for Inactive, Expired and Ineligible
scenarios. Relevant templates are sent to App layer to display the appropriate Microsite page.
7. If interested in the offer, customer clicks “Buy now” button.
8. CSO (Create Sales Order) logic gets invoked by the App layer.
9. The CSO process, if successful, writes Accepted response in Interaction History. Logic notifies the app layer to display a success
Microsite page.


Microsite page.
10. CSO process, if not successful, writes a Failure response in Interaction History. Logic notifies the app layer to display a failure Microsite
page.
 Microsite logic to display the relevant template for a scenario, success, failure etc., is handled at the App layer.
Logic at once sends info about all the Templates to App for all possible scenarios. The metadata is configurable via PM Tool. Two
decision data components play a major role in this, namely, T2TVActions and T2TVAttributes, explained in the ‘Propositions’ section
of this document.
Discussion is on-going on how a customer will see the url when sent from Production. E.g. a short URL showing vodafone domain
and without showing any environment details.
Till the time of preparing this document, Business is work in progress to create the Offers and the associated business rules.
Thus, for the purpose of this document, test offers and treatments are created and they do not have any associated validation or
eligibility rules.


629
Propositions and PM Tool Screens
Offers - created via PM Tool Offer screen.
TestOffer = Parent
TestOffer1 = Child offer for the Parent offer - representing 1GB
TestOffer2 = Child offer for the Parent offer - representing 2GB
ParentChildTreatments decision data
This decision data contains the parent child offer mappings. E.g.
BundleParentTreatment    BundleChildTreatment
TestOffer_Microsite            TestOffer1_Microsite
TestOffer_Microsite            TestOffer2_Microsite

Offer Bundling set up for Landing pages
Offer bundling logic and set up for Landing pages is same as done for other functionalities. Bundling is needed when there is a requirement
of having Parent and Child offer(s) e.g. Parent offer is Extra Data and child offers could be, 1GB data, 2GB data etc.
All offers are configured via PM Tool “Offer” screen and Treatments for the offers are configured in “Treatment” screen.
Step1: Below two fields in Treatment screen needs to be configured for a Parent treatment.Till the time of preparing this document, Business is work in progress to create the Offers and relevant proposition data. Thus, for the
purpose of this document, test offers and treatments are created.
Below screenshots may have a different offer name but the set up is same for all functionalities.


630
Step 2: Parent child offer relationship is done in screen “Parent Child Treatments”.


631
Bundling logic for landing pages is done in Strategy: ApplyBundlingForMicrositeTreatments.

In Strategy: PopulateOutputPropertiesForMicrosite (descibed in ‘Logic’ section of this docuemnt), the Offers Landing Page content is
populated from attributes that are set in below two Decision Data - T2TVAttributes and T2TVActions.
In short,
Decision data: T2TVAttributes - provides content of the page.
Decision data: T2TVActions -  defines actions for buttons on the page.
Data to above decision data is configured in PM Tool (explained in the next section ‘PM Tool Screens’).
T2TVAttributes (Treatment To Treatment Variations Attributes)
Each Microsite screen displayed is based on a scenario e.g. success, failure, inactive etc. For each microsite offer and treatment, this
decision data holds information of the template details that needs to be used for a releavent scenario.
The value set in SectionName determines which of the Offers screens to display.
It also holds info of the template to be displayed when there is a single offer or offers with parent child relationship. E.g. if there is a single
parent offer, SectionName = "SingleActionInformationPage".
Possible scenarios are: SuccessScenario, FailureScenario, Ineligible, Expired, Inactive, Default.
Below is an example of data stored for success scenario.


632
Treatment name = TestOffer_Microsite
TemplateID = Clicked
Scenario = SuccessScenario
TemplateDetails =
{
"HeaderSectionRule": "HeaderAlignRight",
"Header": "Thanks Emma, we're getting your Data Extra ready...",
"Body": "We're just processing your request. When your Data Extra is ready to use, we'll send you a text.",
"SectionName": "NoActionInformationPage",
"BodyHeader": "This is a BodyHeader for testing!!!",
"ExtraLargeImageURL": "sampleurl1",
"LargeImageURL": "sampleurl2",
"MediumImageURL": "sampleurl3",
"BodyHeader": "This is a BodyHeader for testing!!!",
"FooterSectionRule": "FooterDefault"
}
More info on above attributes is present in ‘App layer’ page/section of this document.

T2TVActions (Treatment To Treatment Variations Actions)
This decision data holds information of the Button actions i.e. what needs to be done for a button click based on a scenario.
Possible scenarios are: SuccessScenario, FailureScenario, Ineligible, Expired, Inactive, Default.
Below is an example of data stored for success scenario.
Treatment name = TestOffer_Microsite
ActionTemplateId = ButtonToURLSameWindow
ActionType = RedirectURL
Outcome = Clicked
Scenario = SuccessScenario


633
ActionDetail =
[
{"Name":"ButtonText", "Value":"Explore My Options"},
{"Name":"RedirectURL", "Value":"url"}
]

PM Tool Screens
There are no separate screens for the two main decision data: T2TVAttributes and T2TVActions. Instead data from a combination of
screens in PM Tool is sent to the above mentioned decision data.
Screen: Channel
Below is a screenshot of Channel screen.
1. New channel “Microsite” is created.
2. Possible outcomes are added e.g. “Accepted”.
3. If no subchannel, “Default” value is assigned to the sub channel.
4. Tick, if templates are required for the channel.
5. Tick, if Actions are needed on the template e.g. buttons.
6. Tick, if scenario based templating is needed e.g. change screen templates and content based on scenarios.
7. If Step 6 is checked, scenarios are added e.g. “SuccessScenario”.

Screen: Template
A new template is created from ‘Template’ screen. Microsite_Temp for example. Data is added to the template from Treatment To Treatment
Variations screen.


634

Screen: Template
A new action is created from ‘Actions’ screen. Microsite_Action for example. Data is added to the action from Treatment To Treatment
Variations screen.

Screen: TreatmentToTreatmentVariations
For a specific scenario e.g. “SuccessScenario”, attributes and actions for the template can be configured in PM Tool.


635

SuccessScenario > Templates section:

SuccessScenario > Outcomes section:


637
Logic Components
How the Microsite url, that is sent in the SMS, is formed?
A sample Microsite URL is shown below. It has two parts.
Strategy: SetLandingPageCTA forms the URL and it can be included as a sub-strategy in the main logic while populating the ouput. This
can be done for any functionality, e.g. for Batch, Strategy: PopulateOutputPropertiesForSMSByBatch calls this strategy.
In ‘Treatment to Treatment Variation’ decision data for SMS, configured in PM Tool; property ‘TreatmentDynamicVariable1’ contains the
SMS body text along with a tag [LandingPageCTA], that is replaced in the above strategy with the Mircrosite URL.
Strategy: SetLandingPageCTA: (How the URL is formed and replaces the tag).
1: The first part of the URL configured in AOMConfig is retrieved and saved to attribute MicrositeURL.
.MicrositeURL = D_VFUKFWAOMFWDataAOMConfig[ConfigType:Microsite,ConfigName:OffersURL].ConfigValue
Below screenshot shows where the URL is configured in AOMConfig.
2: Below function is called and property .Metadatacode is set. It forms the second part of the url.
Function SaveOffersMetadata takes Subscription Id, comma-separated list of clipboard page SR properties, and Page (ClipboardPage) as
input. It then invokes the activity SaveOffersMetadata to store the properties in data set OffersMetadata and returns MetadataId as String There is less chance that Optimisation team would need to work on this functionality. Below section provides pointers on how it
works.


638
type. E.g.
.Metadatacode = SaveOffersMetadata(.CustomerID,
"pxInteractionID,Channel,OfferName,OfferVariant,TreatmentName,TreatmentVariant,AOMInteractionId", ClipboardPage)
Above underlined, is a comma-separated list of properties that is stored by the function in the data set: OffersMetadata (see next topic).
Then the function returns a code that is set to .Metadatacode. E.g.  "71b8ce9403724458bd3ffd03d75e7cd".
Above code is the second part of the URL. When customer clicks on the URL in SMS, this code comes back to Pega and is used to look up
information for the customer + offers from the data set.
3: First and second part of the URL is set to property .LandingPageCTA.
.LandingPageCTA = .MicrositeURL + .Metadatacode
4: Tag [LandingPageCTA] in .TreatmentDynamicVariable1 is replaced with the above property .LandingPageCTA
Now the SMS will have the body text along with the formed URL.
Data set: OffersMetadata
SaveOffersMetadata function/activity saves to this Data set (Decision Data Store) in below format.
Pega Case (for information only for Optimisation team)
Microsite is just a Pega Case. This document mainly concentrates on Fetch Offers and Next Best Content which are the new logic
components for this functionality.
Fetch Offers flow calls:
Data Flow: IdentifyBestMicrositeTreatments and Strategy: IdentifyBestMicrositeTreatments
Next Best Content flow calls:
Data Flow: GetNextBestContent and Strategy: GetNextBestContent


639
Fetch Offers step in Pega case calls Data flow: IdentifyBestMicrositeTreatments that in turn calls Strategy:
IdentifyBestMicrositeTreatments. The strategy struncture is as below. Strategies mainly for this functionality are highlighted and described in
the list below:
1. IdentifyEligibleTreatmentsforMicrosite: This strategy is common for all execution modes. For Microsite functionality, it gets treatments
specifically for Microsite. During this logic, while getting the offers, offer expiry is checked. How offer expiry works is explained in a
section below.
2. IdentifyBestTreatmentforSubscription: This strategy is common for all execution modes. For Microsite functionality, it does the logic of
parent child offer bundling.
3. IdentifyTreatmentVariations: This strategy is common for all execution modes. For Microsite functionality, it gets only the treatment
variations for microsite treatments.
4. PopulateOutputPropertiesForMicrosite - Explained below:
5. SetIHPropertiesForAllChannels: This strategy is common for all execution modes. For Microsite functionality, it set the common +
microsite specific Interaction History properties.
6. GetInactiveMicrositeTreatment - Call decision data: T2TVAttributes and T2TVActions and get records for Scenario = Inactive. Set
property .ErrorMessage with the value from AOMBusinessConfig (screenshot below)


640
7. GetExpiredMicrositeTreatment - Call decision data: T2TVAttributes and T2TVActions and get records for Scenario = Expired. Also check
offer expiry. Set property .ErrorMessage with the value from AOMBusinessConfig. How offer expiry works is explained in a section
below.
8. GetIneligibleMicrositeTreatment - Call decision data: T2TVAttributes and T2TVActions and get records for Scenario = Ineligible. Set
property .ErrorMessage with the value from AOMBusinessConfig.

Strategy: PopulateOutputPropertiesForMicrosite
1. Route for Offers with Parent Child combination.
2. 2a and 2b: Route for Offers as Parent only without any children.
3. Set .ResponseType = Action for this route and get data from T2TVAttributes decision data. ResponseType property is used by the App
layer to recognize the relevant data.
4. Set .ResponseType = Action for this route and get data from T2TVActions decision data.
5. Import data from decision data: T2TVAttributes.
6. Import data from decision data: T2TVActions.
7. Join with the primary route and get “TemplateDetails”.
8. Join with the primary route and get “ActionTemplateId”, “ActionType”, “ActionDetail”, “Outcome”.


641

Next Best Content
Data flow and Strategy: Next Best Content
From Microsite landing page, where offers are dispalyed, if customer clicks on ‘Buy Now’, CSO (Create Sales Order) call is made.
Depending on the success of failure of CSO call, the next best content/screen is displayed to customer.
For the Offer in context, strategy gets all the relevant offer variations, treatment and treatment variations assigns attributes and actions from
decision data: T2TVAttributes and T2TVActions.
Similar kind of logic, described above in Strategy: PopulateOutputPropertiesForMicrosite.

How offer expiry works?
Offer expiry logic is present in below two strategy.
Strategy 1: SetExpiryPeriod
This check is done for all execution modes and all channels. While getting eligible offers from proposition data, this strategy is called as a
sub-strategy inside IdentifyEligibleOffers.
Fallow Period
It introduces the concept of Fallow period for offer expiry date. Fallow period for expired offers can be configured against offers in the PM
tool. If the number of days since an expiry date is less than the fallow period then an offer should be unavailable. Expired error status for
microsite should be based on the fallow period status.
Two attributes present in PM Tool Offers screen for this functionality are:
FallowPeriodForOfferExpiry - values e.g. 0, 3, 4 etc.


642
FallowPeriodForOfferExpiryInterval - values e.g. Years, Months, Days.
Fallow period logic is applied against the latest expiry date for the offer from Interaction History.
In PM Tool it is configured in Offers screen, as in the screenshot below.
1. Offer Expiry Interval in Days, Months or Years or a specific date.
2. If the offer has expired, make the offer unavailable for specified number of days.
3. Fallow period interval in Days, Months or Years or a specific date or Indefinite.
4. Number of days for the fallow period.
Strategy 2: OfferExpiry
This check is done for Microsite channel and is called as a sub-strategy inside strategy: IdentifyBestMicrositeTreatments.
For the offer in the request context, get latest expiry date from Interaction History and check against current date.
If offer expiry date is in future, let the logic flow to the next step.
If offer expiry date is in past, set error message configured in AOMBusinessConfig.
Capture Response in Interaction History
At various points during the user journey, customer interactions are captured in Interaction History.
Some scenarios are mentioned below:


643
SMS sent to customer after Batch process Pending - if sent via Pega Marketing
Selected - if sent via TIL servive
Customer clicks on the Microsite link in the SMS Clicked
Microsite is displayed with Offers Shown - for each offer
Customer clicks “Buy Now” button for an offer Accepted
CSO - Create Sales Order failure FailureSenario Outcome in IH


644
Error Scenarios
Currently, all error scenarios display the page/template as below.
Error is written to aom_error database table.
Content shown in the above error page is configured in AOMConfig and is managed at the App layer.
ConfigType: ExceptionTemplateAttributes
ConfigName: OffersMicrosite
 There is a scope in future releases to have customized templates/screens for each error scenario.


645
Error Scenario 1
Once customer clicks on the URL in SMS, AOM tries to look up customer and offer information by using the Metadatacode present in the
URL. If found, pass to the next stage. However, if customer details cannot be found against the URL details, error screen is displayed.
Error Scenario 2
If Metadatacode look up is successful, there are additional validations for GPSL. If call to GPSL fails, error screen is displayed.
GPSL = Get Processed Service List, is a SOAP service exposed by Vodafone TIL (Tibco Interface Layer) which returns the Offers and
Product details for a given Service Number/MSISDN.
Error Scenario 3
On the URL click and other customer activities on the Microsite, Pega needs to write reponses to Interaction History as part of Capture
Response process. If the process fails, error screen is displayed. One possible scenario could be Interaction id mismatch for a sms sent
response and sms clicked response.
Error Scenario 4
Customer clicks on the URL, but the customer data is not present in Subscription table, it corresponds to a failure and error screen is
displayed.

Error Scenario 5
On ‘Buy Now’ button click on Microsite, if CSO = Create Sales Order process fails, error screen is displayed.
Error Scenario 6
Display error screen if the offer has expired.


646
App layer - Extras Landing Page
This page describes the Landing Pages displayed in the Offers Case and how the pages are populated with content. The attributes used to
display the pages are detailed.
In the event of Landing Pages not displaying as expected, please check the relevant attribute(s) on the page and the value(s) returned in
Decision Data.
A. Exception Handling Error Page
This page displays for all flow exceptions and errors in the Offers Case. This page is not offer specific but the content of this page can be
configured as described below.
This page is displayed in case of landing page offer is either Inactive, Expired or Ineligible.
All attributes are set from the following record in AOMConfig (shown here with example ConfigValue):
ConfigType: ExceptionTemplateAttributes
ConfigName: OffersMicrosite
ConfigValue:
{
"PageTitle": "Oops",
"Header": "Sorry, that didn't work",
"Body": "We're sorry, we weren't able to process your request. Please click below to check out your options",
"ExtraLargeImageURL": "url",
"LargeImageURL": "url",
"MediumImageURL": "url",
"ButtonText": "Explore My Options",
"ButtonURL": "url"
}
Troubleshooting
Text content not displaying as expected
(Header or Body)Check AOMConfig entry for individual
attributes - Header & Body
Button text not displaying as expected Check AOMConfig entry - ButtonText
attribute
Button does not redirect to expected url Check AOMConfig entry - ButtonURL
attribute Problem Check Notes


647
B. Offers pages
The Offers Landing Pages content is populated from attributes that are set in Decision Data - T2TVAttributes and T2TVActions. These are
returned from logic data flows in the Offers Case.
The attributes used to display each screen are detailed below. If any screens do not display as expected, the attribute values should be
checked first.
The value set in T2TVAttributes - TreatmentAttributes.SectionName determines which of the Offers screens to display.
The pages below are used to display the offers on Landing page - as Default scenario (when the offer is loaded on Landing Page)
as well as CSO Success/Failure Scenarios.
B1. Parent Single Action page
TreatmentAttributes.SectionName = "SingleActionInformationPage" (set in T2TVAttributes)
Page content is populated from the following name/value properties in TreatmentAttributes set in T2TVAttributes.Background image not displaying as
expectedCheck AOMConfig entries -
ExtraLargeImageURL, LargeImageURL,
MediumImageURLThe different size images are used
depending on the screen size.
HeaderSectionRule Header shown with Vodafone logo. This should be a valid Section rule name.
Existing Section name with VF logo should
be H e a d e r A l i g n R i g h t
Header Hello Emma. Here’s a data offer just for you. Text
Body It’s great to see you’ve been making the most of your data
allowance…………..Text
ExtraLargeImageURL Background image shown URL of image.
LargeImageURL Background image when screen size is reduced to large URL of image.
MediumImageURL Background image when screen size is reduced to medium URL of image.
FooterSectionRule Footer shown with ‘Terms & Conditions’ | ‘Privacy policy’ links


FooterSectionRule Footer shown with ‘Terms & Conditions’ | ‘Privacy policy’ links
and @ 2022 Vodafone text.This should be a valid Section rule name.
Existing Section name should be TreatmentAttributes
attributeExample in screen above Notes


648
Action buttons are populated from T2TVActions Decision Data attributes - ActionTemplateType & ActionTemplateDetail.
There are currently 2 types of Action button - Product Add On button and Redirect button.

The above pattern of template is used for Default scenario (single offer) as well as CSO Failure scenario.
B2. Parent with Child page

TreatmentAttributes.SectionName = "ParentWithCardChildren" (set in T2TVAttributes)
Page content is populated from the following name/value properties in TreatmentAttributes set in T2TVAttributes.F o o t e r D e f a u l t .
Product Add
OnProductAddOn "[{"Name": "ButtonText", "Value": "<<Set to
button label>>"}]"eg. "[{"Name": "ButtonText", "Value": "Buy Now"}]"
Redirect RedirectURL "[{"Name": "ButtonText", "Value": "<<Set to
button label>>"}, {"Name": "RedirectURL",
"Value": "<<Set to url to redirect to>>"}]"eg. "[{"Name": "ButtonText", "Value": "Explore My
Options"}, {"Name": "RedirectURL", "Value": "url"}]"Button type ActionTemplate
TypeActionTemplateDetail attributes Notes
HeaderSectionRule Header shown with Vodafone logo. This should be a valid Section rule name.
Existing Section name with VF logo should
be H e a d e r A l i g n R i g h t
Header Hello Emma. Here’s a data offer just for you. Text
Body It’s great to see you’ve been making the most of your data
allowance…………..TextTreatmentAttributes
attributeExample in screen above Notes


649
For each Child, the card sections on the page are populated from the following name/value properties in the Child’s TreatmentAttributes :
For this page, there are no Action buttons for the Parent section. Action buttons can be defined for the Child card sections.
Action buttons are populated from T2TVActions Decision Data attributes - ActionTemplateType & ActionTemplateDetail.
There are currently 2 types of Action button - Product Add On button and Redirect button.
The above pattern of template is used for Default scenario (Multiple offers - Parent & Child).ExtraLargeImageURL Background image shown URL of image.
LargeImageURL Background image when screen size is reduced to large URL of image.
MediumImageURL Background image when screen size is reduced to medium URL of image.
BodyHeader Get your extra Text
FooterSectionRule Footer shown with ‘Terms & Conditions’ | ‘Privacy policy’ links
and @ 2022 Vodafone text.This should be a valid Section rule name.
Existing Section name should be
F o o t e r D e f a u l t .
ImageSashText 50% discount Text
Header 1GB of data for only £XX a month Text
Body Your Data Extra will automatically renew each month…… Text
LargeImageURL Child card image - For 1GB and For 2GB URL of image.
MediumImageURL Child card image for medium screen size - For 1GB and For
2GBURL of image.
Footer This Data Extra will be added to mobile number…………… TextTreatmentAttributes
attributeExample in screen above Notes
Product Add
OnProductAddOn "[{"Name": "ButtonText", "Value": "<<Set to
button label>>"}]"eg. "[{"Name": "ButtonText", "Value": "Buy Now"}]"
Redirect RedirectURL "[{"Name": "ButtonText", "Value": "<<Set to


Redirect RedirectURL "[{"Name": "ButtonText", "Value": "<<Set to
button label>>"}, {"Name": "RedirectURL",
"Value": "<<Set to url to redirect to>>"}]"eg. "[{"Name": "ButtonText", "Value": "Explore My
Options"}, {"Name": "RedirectURL", "Value": "url"}]"Button type ActionTemplate
TypeActionTemplateDetail attributes Notes


651
B3. No Action Information Page


652
TreatmentAttributes.SectionName = "NoActionInformationPage" (set in T2TVAttributes)
Page content is populated from the following name/value properties in TreatmentAttributes set in T2TVAttributes.
There are no Action buttons for this page.
The above pattern of template is used for Default scenario (Single offer with no CTA) as well as CSO Success scenario.
 HeaderSectionRule Header shown with Vodafone logo. This should be a valid Section rule name.
Existing Section name with VF logo should
be H e a d e r A l i g n R i g h t
Header Hello Emma. Here’s a data offer just for you. Text
Body It’s great to see you’ve been making the most of your data
allowance…………..Text
ExtraLargeImageURL Background image shown URL of image.
LargeImageURL Background image when screen size is reduced to large URL of image.
MediumImageURL Background image when screen size is reduced to medium URL of image.
FooterSectionRule Footer shown with ‘Terms & Conditions’ | ‘Privacy policy’ links
and @ 2022 Vodafone text.This should be a valid Section rule name.
Existing Section name should be
F o o t e r D e f a u l t .TreatmentAttributes
attributeExample in screen above Notes


653
AOM Simulation


654
How to Create a Segment
Switch to the AOM Framework v3 Pega Marketing Manager
In the top left corner switch from App studio back to Dev studio
From the Launch portal open Customer Decision Hub
Create a Segment
In the left panel go to Audience → Segment →  Create (top right)
Name the simulation Should Start with SIM _
Context: Create in AOM Framework v3 and the testing ruleset.


655

In the Design tab, add criteria to filter the customers as required.
Properties from the subscription, Interaction History, Account, Contact, Subscription Flex attributes and
SubscriptionCampaignFlags tables can be added.
For each chosen property, a value and comparator are set. This checks the customers property value meets the required condition:


656
A logic string is used to determine the combination of conditions that need to be met. Above, the logic string is A AND B, but it could be A
OR B, or A AND !B etc.

In the Options and Schedule tab, Sampled Segment Options are configured. This sets the maximum number of customers to be used in the
segment, or selects a percentage of the total population of customers to be used in the segment.
Save the segment and Run. This will give a popup: Currently Running
Once the segment has finished running, population count will show the number of customers in your segment.


658
Simulation Explaination
1. Executing Simulation using Test Run Panel:  Go to strategy Test Run Panel --> Batch Mode -->Settings
2. Click on settings → select one of the option from the dropdown.
a) Existing Simulation Test: Choose this option to verify the existing simulation results.
b) A new simulation test: Choose this option to create new simulation.
3. Existing Simulation: Select the required simulation id from the drop down and then submit.
a) H i g h e s t: Display results in descending order.
b) L o w e s t: Display results in ascending order.
c) B r o w s e: Display Proposition results from the selected Business issue and Group.


659
4. New Simulation:
Select a new simulation test radio button → Select Input source from the dropdown-->Run


660
Note: When user clicks on run button , new simulation id will be created on the simulation landing page.
Execute Simulation for PF:
Go to Proposition Filter rule → Click on Actions dropdown → Select Audience Simulation
To use the existing simulation, select simulation from simulation list.
To create new simulation , provide audience and strategy input.


661
Simulation Funnels (Batch)

Description about each Funnel in Simulation:
Strateg
y Compo
nentColumn
Name in
Pega
Simulati
on
QueryIn
Cust
omer
Level
Simul
ationFunnel Name
in Customer
Level
SimulationColumn Name
in Customer
Level
Simulation
Query
1 Base
Popul
ationBase
Populati
onTotal number of
customers in the
simulation.
This is tracked for all
available propositions
(which are imported in
the Strategy Canvas
for decisioning) and it
should be same for all
propositions.Identify
Eligible
OffersImport
All
OffersBase
Populati
onNo N/A No
2 Offers
By
Eligibl
e
Intent
sEligibilityThis represents the
count of customers
eligible for the ”Intent”
which is making the
offer available for
decisioning.
This should show
drop-offs in the count
of customer from
“base population”
based on intent
eligibility and relevant
mapping of offers
(Global Intent level,
Squad Level or
Business Purpose
level). Identify
Eligible
OffersIdentify
Offers
For
Eligible
Intents
(Batch)intent_el
igibility_
countYes Offers By
Eligible IntentsOffersByEligibl
eIntents
3 Globa
l
Eligibi
lity
For
Batch EligibilityThis represents the
count of customers
which has passed the


For
Batch EligibilityThis represents the
count of customers
which has passed the
global batch eligibility
rules.Identify
Eligible
OffersApply
Global
Rules
For
Batch
Offersgbl_batc
h_eligibi
lity_cou
ntYes Global
Eligibility For
Batch GlobalEligibility
ForBatch  Or
derFunn
el
StepFunnel
Step
Groupin
gDescription Pega OOTB Decisioning
Funnel SimulationPega Customer Level Simulation Comment
s /
Recomme
ndation


662
4 Contr
ol
Grou
p
Conte
ntion
(quar
antine
)EligibilityThis represents the
count of customers
which has passed the
Control Group
Quarantine check by
Business Purpose.
This should show
drop offs if Control
Group Quarantine is
setup and customer is
within Control Group
Quarantine. Identify
Eligible
OffersApplyB
usiness
Purpos
eQuara
ntineCh
eckFor
Controlbp_quar
antine_c
ountYes Control Group
ContentionControlGroupC
ontention
5 Offer
Eligibi
lityEligibilityThis represents the
count of customers
which has passed the
eligibility rules for the
offer defined in the
Squad (BP) level
Proposition Filters as
well as defined in
bespoke Squad (BP)
level strategies.Identify
Eligible
OffersEligible
Offersoffer_eli
gibility_
countYes Offer Eligibility OfferEligibility
6 Offer
Varia
nt
Eligibi
lityEligibilityThis represents the
count of customers
which has passed the
eligibility rules for the
Offer Variants  for
each offer defined in
the Squad (BP) level
Proposition Filters as
well as defined in
bespoke Squad (BP)
level strategies.
Please note that
when multiple offer
variants are
configured for an
offer, only if a “catch-
all” offer variant
(default, without
eligibility) is defined,
the offer eligibility
count will be divided


(default, without
eligibility) is defined,
the offer eligibility
count will be divided
among the offer
variants. Otherwise,
offer variant eligibility
will show drop-offs
based on eligible
customers. Identify
OfferVar
iantsFor
Eligible
OffersEligible
Offer
Variant
soffer_va
r_eligibil
ity_coun
tYes Offer Variant
EligibilityOfferVariantElig
ibility


663
7 Pick
Best
Offer
Varia
ntArbitratio
n
(Best
Offer
Variant
by Offer)This represents the
count of customers
which has passed the
“Pick Best Offer
Variant” funnel step,
which selects the best
Offer Variant based
on pre-defined rank,
in case multiple offer
variants are eligible
for the same offer and
the same customer. Identify
OfferVar
iantsFor
Eligible
OffersIdentify
Best
OfferVa
riant
For
Offerpick_be
st_offer_
var_by_
offer_co
untYes Pick Best Offer
VariantPickBestOfferV
ariant
8 Globa
l
Conta
ct
Strate
gy No
Bundl
ing
(For
Treat
ments
that
do
not
use
Bundl
ing)Contact
Strategy This represents the
count of customers
which has passed
global contact policy
rules.
Please note that
global contact policy
is required to be
enabled at offer level
and it is ignored for
“Mandatory” offers
and offers available
for Intent with High
Confidence Score.
At this funnel step,
the global contact
policy is only applied
for channels (batch)
which does not use
bundling functionality;
currently only Email
channel uses
bundling in Bach
mode. Hence,
potential drop-offs will
be shown only for
non-Email treatments. AllTreat
mentsF
orEligibl
eOffersEligible
Global


mentsF
orEligibl
eOffersEligible
Global
Contact
Strateg
y
Releva
nt
Treatm
entsgbl_cont
act_strat
gey_trea
tment_n
o_bundli
ng_coun
tYes Global Contact
Strategy No
BundlingGlobalContactS
trategyNoBundl
ingFrom this
funnel
step, the
count is
shown at
treatment
level which
links
directly
with offers
ignoring
the offer
variants.
Hence, the
count will
align with
offer level
counts
(Offer
Eligibility)
and not the
offer
variant
level.
Offer
Variants
links with
treatment
level when
treatment
variants
are
processed.
9 Busin
ess
Purpo
se
ContaContact
Strategy This represents the
count of customers
which has passed
business purpose
contact policy rules.AllTreat
mentsF
orEligibl
eOffersEligible
Busine
ss
Contact
Strategbp_cont
act_strat
gey_trea
tment_n
o_bundliYes Business
Purpose
Contact
Strategy No
BundlingBusinessPurpo
seContactStrat
egyNoBundling


664
ct
Strate
gy No
Bundl
ing
(For
Treat
ments
that
do
not
use
Bundl
ing)Please note that
business purpose
contact policy is
required to be
enabled at offer level
and it is ignored for
“Mandatory” offers
and offers available
for Intent with High
Confidence Score.
At this funnel step,
the business purpose
contact policy is only
applied for channels
(batch) which does
not use bundling
functionality; currently
only Email channel
uses bundling in Bach
mode. Hence,
potential drop-offs will
be shown only for
non-Email treatments. y
Releva
nt
Treatm
entsng_coun
t
10Offer
Self
Conte
ntion
Strate
gy No
Bundl
ing
(For
Treat
ments
that
do
not
use
Bundl
ing)Contact
Strategy This represents the
count of customers
which has passed
offer self contention
rules.
Please note that offer
self contention is
required to be
enabled at offer level
and it is ignored for
offers available for
Intent with High
Confidence Score.
At this funnel step,
the offer self
contention is only
applied for channels
(batch) which does
not use bundling
functionality; currently
only Email channel
uses bundling in Bach
mode. Hence,
potential drop-offs will
be shown only for


mode. Hence,
potential drop-offs will
be shown only for
non-Email treatments. AllTreat
mentsF
orEligibl
eOffersEligible
Offer
Self
Content
ion
Strateg
y
Releva
nt
Treatm
entsself_con
tention_t
reatment
_no_bun
dling_co
untYes Offer Self
Contention
Strategy No
BundlingOfferSelfConte
ntionStrategyN
oBundling


665
11Run
time
Volu
me
Capa
city
Chec
kEligibilityThis represents the
count of customers
which has
successfully passed
the run-time volume
capacity check for the
treatment.
Please note that the
run-time volume limit
is calculated as
volume limit defined
at treatment level
considering the
control group (if
enabled) as well as
de-dupe factor. Identify
BestEm
ailTreat
mentFor
Batch,Id
entifyBe
stTreat
mentFor
BatchCheckA
vailable
Capacit
yForTre
atmentruntime_
capacity
_check_
countYes Run time
Volume
Capacity
CheckRuntimeVolum
eCapacityChec
k
12Chan
nel
Eligibi
lityEligibilityThis represents the
count of customers
which has passed
channel eligibility
rules for each
business purpose-
channel combinations
as defined in the
relevant proposition
filter.Identify
Eligible
OBTreat
mentsApplyC
hannel
Eligibilit
ychannel
_eligibili
ty_countYes Channel
EligibilityChannelEligibili
ty
13Chan
nel
Conte
ntionContact
Strategy This represents the
count of customers
which has passed
channel contention
rules.
Please note that
channel contention is
required to be
enabled at treatment
level and and the
contention periods
are needed to be
configured for each
channel.Identify
Eligible
OBTreat
mentsApplyC
hannel
Content
ionchannel
_content


Eligible
OBTreat
mentsApplyC
hannel
Content
ionchannel
_content
ion_cou
ntYes Channel
ContentionChannelConten
tion
14Treat
ment
Eligibi
lity EligibilityThis represents the
count of customers
which has passed the
eligibility rules for the
treatment defined in
the Squad (BP)-
Channel level
Proposition Filters as
well as defined in Identify
Eligible
OBTreat
mentsApplyTr
eatmen
tEligibili
tytreatmen
t_eligibil
ity_coun
tYes Treatment
Eligibility TreatmentEligib
ility


666
bespoke Squad (BP)
level strategies.
15Pick
Best
Treat
ments
For
Offer
(Pick
Best
Chan
nel)Arbitratio
n
(Best
Treatme
nt By
Offer)This represents the
count of customers
which has passed the
Pick Best Treatments
For Offer (Pick Best
Channel) step which
selects the best
treatment for the offer
for the customer
when customer is
eligible for multiple
treatments for the
same offer and Pick
Best Treatments For
Offer is enabled with
appropriate method.
This will only show if
drop off if multiple
treatments are eligible
for the offer and the
functionality is
enabled.Identify
BestOB
Treatme
ntsByBa
tch
 Identify
BestTre
atment
sForOff
erspick_be
st_treat
ment_by
_offer_c
ountYes Pick Best
Treatments For
OfferPickBestTreatm
entsForOffer
16Globa
l
Conta
ct
Strate
gy
Bundl
ing(F
or
Treat
ments
that
use
Bundl
ing)Contact
Strategy This represents the
count of customers
which has passed
global contact policy
rules.
Please note that
global contact policy
is required to be
enabled at offer level
and it is ignored for
“Mandatory” offers
and offers available
for Intent with High
Confidence Score.
Please also note that,
for bundled


for Intent with High
Confidence Score.
Please also note that,
for bundled
treatments, contact
strategy is only
applied for Parent
treatment.
At this funnel step,
the global contact
policy is only applied
for channels (batch)
which use bundling Identify
BestEm
ailTreat
mentFor
Batch,Id
entifyBe
stTreat
mentFor
BatchEligible
Global
Contact
Strateg
y Email
Treatm
ents,No
n Email
Channe
lgbl_cont
act_strat
gey_trea
tment_b
undling_
countYes Global Contact
Strategy
BundlingGlobalContactS
trategyBundling


667
functionality; currently
only Email channel
uses bundling in Bach
mode. Hence,
potential drop-offs will
be shown only for
Email treatments.
17Busin
ess
Purpo
se
Conta
ct
Strate
gy
Bundl
ing(F
or
Treat
ments
that
use
Bundl
ing)Contact
Strategy This represents the
count of customers
which has passed
business purpose
contact policy rules.
Please note that
business purpose
contact policy is
required to be
enabled at offer level
and it is ignored for
“Mandatory” offers
and offers available
for Intent with High
Confidence Score.
Please also note that,
for bundled
treatments, contact
strategy is only
applied for Parent
treatment.
At this funnel step,
the business purpose
contact policy is only
applied for channels
(batch) which use
bundling functionality;
currently only Email
channel uses
bundling in Bach
mode. Hence,
potential drop-offs will
be shown only for
Email treatments. Identify
BestEm
ailTreat
mentFor
Batch,Id
entifyBe
stTreat
mentFor
BatchEligible
Busine
ss
Contact
Strateg
y Email
Treatm
ents,No
n Email
Channe
lbp_cont
act_strat
gey_trea
tment_b
undling_
countYes Business
Purpose
Contact
Strategy
BundlingBusinessPurpo
seContactStrat


Purpose
Contact
Strategy
BundlingBusinessPurpo
seContactStrat
egyBundling
18Offer
Self
Conte
ntion
Strate
gy
Bundl
ing(F
or Contact
Strategy This represents the
count of customers
which has passed
offer self contention
rules.
Please note that offer
self contention is
required to be Identify
BestEm
ailTreat
mentFor
Batch,Id
entifyBe
stTreat
mentFor
BatchEligible
Offer
Self
Content
ion
Strateg
y Email
Treatm
ents,Noself_con
tention_t
reatment
_bundlin
g_countYes Offer Self
Contention
Strategy
BundlingOfferSelfConte
ntionStrategyB
undling


668
Treat
ments
that
use
Bundl
ing)enabled at offer level
and it is ignored for
offers available for
Intent with High
Confidence Score.
Please also note that,
for bundled
treatments, contact
strategy is only
applied for Parent
treatment.
At this funnel step,
the offer self
contention is only
applied for channels
(batch) which use
bundling functionality;
currently only Email
channel uses
bundling in Bach
mode. Hence,
potential drop-offs will
be shown only for
Email treatments. n Email
Channe
l
19Bundl
ed
Treat
ment
(For
Treat
ments
that
use
Bundl
ing)EligibilityThis represents the
count of customers
which has
successfully passed
bundling functionality.
This step will not
show any drop-offs for
parent treatments and
will potentially show
drop offs for child
treatments which are
“orphan” i.e. does not
have eligible Parent
treatment.Identify
BestEm
ailTreat
mentFor
Batch,Id
entifyBe
stTreat
mentFor
BatchIndepe
ndent
Parent
and
Bundle
d
Parent
Child
Email
Treatm
ents,No
n Email
Channe
ltreatmen
t_bundli
ng_coun
tYes Bundled
TreatmentBundledTreatm
ent
20Pick
Best
Treat
ment
For


ent
20Pick
Best
Treat
ment
For
Custo
mer
(Arbitr
ation)Arbitratio
nThis represents the
count of customers
which has
successfully passed
the arbitration step of
the funnel which
selects the best
treatment for the
customer.
Please note that Identify
BestTre
atmentf
orSubsc
riptionIdentify
BestTre
atment
ForBatc
hpick_be
st_treat
ment_fo
r_custo
mer_cou
ntYes Pick Best
Treatment For
CustomerPickBestTreatm
entForCustome
rA new
“Priority
Score Cut
Off”
simulation
funnel step
has been
considered
but has
been
parked for
now


669
“Mandatory” offers
bypasses
arbitration step
and it is only
applied for “non-
Mandatory” offers.
Hence the drop
offs will only be
available for “non-
Mandatory” offers.
Arbitration step is
applied at offer
level i.e offer with
highest priority is
selected first and
all eligible
treatments for the
best offers are
selected.
This count also
includes drop off
by Priority Score
Cut Offpending
new story
to change
where the
“Priority
Score Cut
Off” funnel
will be
applied.
21Treat
ment
Varia
nt
Eligibi
lity EligibilityThis represents the
count of customers
which has passed the
eligibility rules for the
Treatment Variants for
each Treatment
defined in the Squad
(BP) level Proposition
Filters as well as
defined in bespoke
Squad (BP) level
strategies.
Please note, at
treatment variant
level, the eligible
treatments and
eligible offer variants
come together and
hence any drop offs at
offer variant/treatment
level will be visible at
this step along with
drop off due to
eligibility rules.
Please also note that
when multiple
treatment variants are Identify
Treatme
ntVariati
onsEligible
Treatm
ent
Variatio
ns For
Eligible
Treatm
entstreatmen
t_var_eli
gibility_
countYes Treatment


Treatm
entstreatmen
t_var_eli
gibility_
countYes Treatment
Variant
Eligibility TreatmentVaria
ntEligibility From this
funnel
step, the
count is
shown at
treatment
variant
level.


670
configured for an
treatment, only if a
“catch-all” treatment
variant (default,
without eligibility) is
defined, the offer
variant/treatment
eligibility count will be
divided among the
treatment variants.
Otherwise, treatment
variant eligibility will
show drop-offs based
on eligible customers.
This step also
includes the count
of customers which
has passed the
additional eligibility
rules for specific
Treatment Variants
such as (TOBI,
Webchat,Online)
using IH and
Tealium Aggregate
Events data.
22Pick
Best
Treat
ment
Varia
nt By
Treat
mentArbitratio
n
(Best
Treatme
nt
Variant
by
Treatme
nt)This represents the
count of customers
which has passed the
“Pick Best Treatment
Variant” funnel step,
which selects the best
Treatment Variant
based on pre-defined
rank, in case multiple
treatment variants are
eligible for the same
treatment and the
same customer. Identify
Treatme
ntVariati
onsBest
Treatm
ent
Variant
By
Treatm
entpick_be
st_treat
ment_va
r_by_tre
atment_
countYes Pick Best
Treatment
Variant By
TreatmentPickBestTreatm
entVariantByTr
eatment
23Pick
Best
Treat
ment
Varia
nt For
Custo
merArbitratio
n
(Best
Treatme
nt
Variant


merArbitratio
n
(Best
Treatme
nt
Variant
by
Custome
r)This represents the
count of customers
which has passed the
“Pick Best Treatment
Variant by Customer ”
funnel step, which
selects the best
Treatment Variant
based on Priority
(inherited from Offer
level Priority).Identify
Treatme
ntVariati
onsBest
Treatm
ent
Variant
For
Custom
erpick_be
st_treat
ment_va
r_by_cu
stomer_
countYes Pick Best
Treatment
Variant For
CustomerPickBestTreatm
entVariantForC
ustomer


671
24Contr
ol
Grou
p
Split -
Targe
t Control
Group
SplitThis represents the
count of customer in
the potential “target”
group for the
treatment.
Please note that this
is not a typical funnel
step  but created just
to represent the
target-control split
and this will only
show a split if a
control group is
configured.
Otherwise, all count
will be shown in
“target”.
Please also note that
control group can be
set at Offer level as
well as Treatment
level. Treatment level
control group, if set,
overrides Offer level
control group. If not
set, Treatment level
inherits  Offer level
control group.SelectB
etween
OfferOR
Treatme
ntPotent
ialContr
olSplitTarget
Treatm
ents
Onlytreatmen
t_in_pot
ential_ta
rget_cou
ntNo N/A N/A
25Contr
ol
Grou
p
Split -
Contr
olControl
Group
SplitThis represents the
count of customer in
the potential “control”
group for the
treatment.
Please note that this
is not a typical funnel
step  but created just
to represent the
target-control split
and this will only
show a split if a
control group is
configured.
Otherwise, all count
will be shown in
“target”.
Please also note that
control group can be
set at Offer level as
well as Treatment
level. Treatment level SelectB
etween
OfferOR


set at Offer level as
well as Treatment
level. Treatment level SelectB
etween
OfferOR
Treatme
ntPotent
ialContr
olSplitControl
Treatm
ents
Onlytreatmen
t_in_pot
ential_c
ontrol_c
ountNo N/A N/A


672
 control group, if set,
overrides Offer level
control group. If not
set, Treatment level
inherits  Offer level
control group.
26Final
Selec
tionFinal
Selectio
nThis step is only
relevant for Customer
Leven Simulation and
represents the final
selection after
passing all funnel
steps
 N/A N/A N/A Yes Final SelectionFinalSelection


673
Manual Steps For AOM Simulation (Batch)
Initialization of Buckets:
Simulation Testing
Data setup for Simulation
Running the InsertSimulationLookupData Activity .
Truncate SubscriptionDataForBatchNBA  dataset
Running the Dataflows :
Simulation Landing page
Decision funnel explanation
Distribution Test
Operations on the existing simulation run
Delete Treatment Buckets:
Initialization of Buckets:
As part of R2.5 NBA FW - Reconfigure Volume Constraint Process in Batch Mode. NBA FW - Reconfigure Volume Constraint Process in
Batch Mode  Buckets are used in the framework. So, before running any of the new or existing Simulation always Initialization of Buckets
is mandatory to avoid the simulation run error.
1. Run the InitialiseTreatmentBuckets Activity manually to initialize the buckets.
2. Or new step will be added in the simulation portal to initialize the buckets(TBC)
Simulation Testing
This document will give an overview of how to setup input data , how to configure & run the Simulation and how to run the queries on
simulation output data once simulation is completed.
Data setup for Simulation
Please run the below steps as part of data setup for simulation:
1. Simulation_Lookup Data : This step is needed only if new proposition/catalogue data has been added or   PMtool push for new catalog
has been pushed . The simulation_lookup table contains proposition data and this is needed when we run queries to view the simulation
funnel output. To have latest proposition data, make sure you run the InsertSimulationLookupData Activity. This will insert proposition
data into the simulation_lookup table .
Running the InsertSimulationLookupData Activity.
1. Open activity, then click Actions-->Run

a. Click Run in run window


674

b. Wait till you see successful blue screen

2. Before running the simulation we need to make sure the input data set( SubscriptionDataForBatchNBA )has the updated customer data.
For this make sure you run the below steps to execute data flows in sequence:
a. Truncate SubscriptionDataForBatchNBA  dataset
b. PrepareDataForBatchNBA
c. IdentifyCustomerIntent
Truncate SubscriptionDataForBatchNBA dataset
1. Open SubscriptionDataForBatchNBA
2. Click Action-->Run

3. In Run window, select Truncate operation


675

4. Wait till operation successfully completed window appears
Running the Dataflows :
1.  Go to Dataflow landing page
2. Clickdataflow workitem Id .e.g.  PrepareDataForBatchNBA
3. Click Restart
4. This will run Dataflow , wait till the run completed


676

Simulation Landing page
To create a new simulation or run the existing simulation, navigate to the Simulation testing landing page. Go to Configure-->Decisioning--
>Simulations-->Simulation testing
On the Simulation testing landing page, you will find all the previous simulation runs. To create a new simulation please click Create:
This page covers mainly running of 2 types of simulations “Decision funnel explanation” and “Distribution test”.
Decision funnel explanation
Decision Funnel will give an overview of how many customers got drop off at each funnel step strategy and the effect of the components
that influence the outcome of a decision. To run the Decision Funnel simulation please follow below steps:
Step 1) Navigate to Simulation testing landing page, please refer landing page section.
Step 2) In the new Simulation page and Context section select “Decision funnel explanation” as the purpose


677
Step 3) Configure the “Configure inputs” Section as below:
Strategy: IdentifyBestOBTreatmentsByBatch
Audience: SubscriptionDataForBatchNBA
Simulation ID Prefix: FunnelSimulation( or give the appropriate name of your choice)

Step 4) Configure Assign output destination: Keep the default ExplainDetails Database Table so that simulation results will be written in
dataschema.pr_data_explain_simulation Table.
The “Overwrite outputs from previous simulations” checkbox is used to clear all the previous results for this simulation run.
Step 5) Click on Submit and run to run the simulation:


678
Distribution Test
 To run the Distribution Test simulation please follow below steps:
Step 1)  Navigate to Simulation testing landing page, please refer landing page section. Here will see all the previous simulation runs
Step 2) Click on one of the previous distribution runs (DistributionTest-1 / DistributionTest-2) and this will open the corresponding
simulation workitem page
Step 3) Click on restart / start button to rerun/run the simulation
For completed runs we see Restart
For new simulation run we will see Start

Operations on the existing simulation run
You can perform some operations like Duplicate, Restart, Edit on the existing simulation run.
.e.g. Duplicate an existing simulation in case if you want to run a similar run with a new offer catalog.


679
Delete Treatment Buckets:
After the simulation run is finished. Buckets has to be deleted. To delete the buckets
Run the “DeleteTreatmentBucketsMap“ Activity manually to delete the buckets.
Simulation Data
To check the simulation results login to DB with pega_base user and run the below queries based on simulation type.
Note: For Environments not having 2.6 code base run the below Funnel query to validate the results.
Funnel Step Simulation :  Run the below query and provide simulation id as input in single quotation(''), as shown in the screenshot, when
prompted.

Note: For Environments having 2.6 code base run the below Funnel query to validate the results or else use the above query
Funnel Step Simulation :  Run the below query and provide simulation id as input in single quotation(''), as shown in the screenshot, when
prompted.FunnelQuery wi …
23 Jun 2021, 01:44 PMput.sql
Final Simulatio …
23 Jun 2021, 01:38 PMels.sql


680
Note: For Environments having 2.13 code base run the below Funnel query to validate the results or else use the above query
 Distribution test Simulation: Run the below query and provide table name( distributiontestsimulation1 or distributiontestsimulation2 ) as
input , as shown in the screenshot, when prompted.
Simulation Fun …
28 Feb 2022, 09:40 AMFunnels
Distribution tes …
16 Dec 2020, 07:35 AMn Query


681

Note: For Environments having 3.01 code base run the below Funnel query to validate the results or else use the above query
 Distribution test Simulation: Run the below query and provide table name( distributiontestsimulation1 or distributiontestsimulation2 ) as
input , as shown in the screenshot, when prompted.
Simulation Fun …
08 Apr 2022, 09:16 AM(1).sql
Distribution tes …
16 Dec 2020, 07:35 AMn Query


683
Customer Level Simulation Design Pattern
Each Funnel Steps that are to be simulated at Customer Level, will undergo the following changes -
New Strategy will be created for each funnel steps (that are to be simulated) which will call the actual funnels step within the strategy
The design of the new strategy will be as follows -
The above change will be applied to all existing 22 Funnel steps that are being simulated. Refer to Simulation Funnels (Batch) for list of
the steps.
Notes -
1. How Simulation Mode will be checked is still being designed by App team (10/12/2021)
2. Details of the function call is pending from App team (10/12/2021)


684
Simulation Fix Details
Impact in Other areas
Dependencies
Logic Changes:
Update Strategy: ApplyPotentialControlSplit
Remove the connection from three components, "Target customers For Control Group NOT Applied", "Target customers for already
ControlGroupApplied" and "Fetch Control or Target from Parent to all child Treatments" to the connected component called "All Target
Treatments"
Similarly remove the connection from the two components "Fetch Control or Target from Parent to all child Treatments", "Target and
Control Treatments"  to the connected component called "All Control Treatments"
Connect the data join component "Fetch Control or Target from Parent to all child Treatments" to the new set property component. In this
set property component, "Set ChildTreatment with OfferName and OfferVariant" set .pyName=.pyName+"-"+.TreatmentVariant+"-
"+.OfferVariant
Join the above set property "Set ChildTreatment with OfferName and OfferVariant" to the filter component "All Child Target Treatments"
and add the condition as @String.equalsIgnoreCase(.PotentialControlFlag,"Target") &&
@String.equalsIgnoreCase(.ParentChild,"Child")
Join from the existing set property components, "Target customers For Control Group NOT Applied", "Target customers for already
ControlGroupApplied" to the new set property component , "Set ParentTreatment with OfferName and OfferVariant". In this set property
component set .pyName=.pyName+"-"+.TreatmentVariant+"-"+.OfferVariant.
Join the above set property, "Set ParentTreatment with OfferName and OfferVariant" to the filter component, "All Parent Target
Treatments" and add the condition in filter as @String.equalsIgnoreCase(.PotentialControlFlag,"Target") &&
@String.equalsIgnoreCase(.ParentChild,"Parent")


@String.equalsIgnoreCase(.ParentChild,"Parent")
Join the existing data join component, "Fetch Control or Target from Parent to all child Treatments" to the set property "Set Control Child
Treatment with OfferName and OfferVariant" and set .pyName=.pyName+"-"+.TreatmentVariant+"-"+.OfferVariant
Connect the set property, "Set Control Child Treatment with OfferName and OfferVariant" to the new filter component and name it is as
"All Control Child Treatments". Add the condition in the filter as App No
DB Yes
Knowledge Transfer No
PM Tool No
PM Tool KT Documentation No  Area Yes/No Comments
PM Tool No
App No
DB Yes  Area Yes/No Comments


685
@String.equalsIgnoreCase(.PotentialControlFlag,"Control")&&@String.equalsIgnoreCase(.ParentChild,"Child")
Connect the set property, "Target and Control Treatments" to the new set property called "Set Parent Control Treatment with OfferName
and OfferVariant" and set .pyName= .pyName+"-"+.TreatmentVariant+"-"+.OfferVariant
Connect the set property called "Set Parent Control Treatment with OfferName and OfferVariant" to the new filter component "All Parent
Control Treatments". And add the condition to this filter with
@String.equalsIgnoreCase(.PotentialControlFlag,"Control")&&@String.equalsIgnoreCase(.ParentChild,"Parent")
Update Strategy: SelectBetweenOfferORTreatmentPotentialControlSplit
Connect the existing set property , "Target and Control Treatments" to the new set property, "Set Parent Control Treatment at treatment
level" and set .pyName= .pyName+"-"+.TreatmentVariant+"-"+.OfferVariant
Join the set property "Set Parent Control Treatment at treatment level" to the filter component "All Parent Control Treatments at
Treatment Level" and add the condition as
@String.equalsIgnoreCase(.PotentialControlFlag,"Control")&&@String.equalsIgnoreCase(.ParentChild,"Parent")
Join the existing data join component, "Fetch Control or Target from Parent to all child Treatments" to the new set property called "Set
Child Control Treatment at treatment level"  and connect it the new filter "All Child Control Treatments at Treatment Level" and add the
condition in the filter as @String.equalsIgnoreCase(.PotentialControlFlag,"Control")&&@String.equalsIgnoreCase(.ParentChild,"Child")
Connect the two existing set property components,"Target customers for already ControlGroupApplied" , "Target and Control
Treatments" to the new set property component called "Set Parent Target Treatment at treatment level" and set .pyName = .pyName+"-


"+.TreatmentVariant+"-"+.OfferVariant in the set property.
Join the set property "Set Parent Target Treatment at treatment level"  to the new filter component , "All Parent Target Treatments at
Treatment Level" and add the condition as @String.equalsIgnoreCase(.PotentialControlFlag,"Target") &&
@String.equalsIgnoreCase(.ParentChild,"Parent")
Connect the data join , "Fetch Control or Target from Parent to all child Treatments" to the new set property called "Set Child Target
Treatments at treatment level" and join it to the new filter called "All Child Target Treatments at Treatment Level" and add the condition in
the filter as and add the condition as @String.equalsIgnoreCase(.PotentialControlFlag,"Target") &&
@String.equalsIgnoreCase(.ParentChild,"Child")
Note : It requires Simulation Funnel Query changes as well.
Add New Funnel: ApplyGlobalRulesForBatchOffers
This represents the count of customers who passed Global Eligibility Rules.
Note : It requires Simulation Funnel Query changes as well.
For Strategy IdentifyTreatmentVariations:
Remove simulation check for the component "Eligible Treatment Variations For Eligible Treatments"
Make changes in the query to track the count only for "Eligible Treatment Variations For Eligible Treatments After Additional Validation"
Note : It requires Simulation Funnel Query changes. Name the funnel as treatment_var_eligibility_count


686
Simulation Funnels (GetNBA)

Description about each Funnel in Simulation:
Strategy Compone
ntColumn
Name in
Pega
Simulati
on
QueryIn
Custom
er Level
Simulati
onFunnel
Name in
Custome
r Level
Simulatio
nColumn
Name in
Customer
Level
Simulation
Query
1 Base
Populati
onBase
Populati
onTotal number of
customers in the
simulation.
This is tracked for all
available
propositions (which
are imported in the
Strategy Canvas for
decisioning) and it
should be same for
all propositions.IdentifyEli
gibleOffersImport All
OffersBase
Populati
onNo N/A No
2 Offers
By
Eligible
IntentsEligibilit
yThis represents the
count of customers
eligible for the
”Intent” which is
making the offer
available for
decisioning.
This should show
drop-offs in the
count of customer
from “base
population” based
on intent eligibility
and relevant
mapping of offers
(Global Intent level,
Squad Level or
Business Purpose
level).IdentifyEli
gibleOffersIdentify
Offers For
Eligible
Intents
(Batch)intent_e
ligibility
_countYes Offers By
Eligible
IntentsOffersByElig
ibleIntents
3 Global
Eligibility Eligibilit
yThis represents the
count of customers
which has passed        This
step is


yThis represents the
count of customers
which has passed        This
step is
not Ord
erFunnel
StepFunnel
Step
Groupi
ngDescription Pega OOTB Decisioning Funnel
SimulationPega Customer Level SimulationComme
nts /
Recomm
endation


687
For
Batchthe global batch
eligibility rules.relevant
for
GetNBA
4 Control
Group
Contenti
on
(quarant
ine)Eligibilit
yThis represents the
count of customers
which has passed
the Control Group
Quarantine check by
Business Purpose.
This should show
drop offs if Control
Group Quarantine is
setup and customer
is within Control
Group Quarantine.IdentifyEli
gibleOffersApplyBusi
nessPurpo
seQuaranti
neCheckF
orControlbp_quar
antine_
countYes Control
Group
Contentio
nControlGrou
pContention
5 Offer
EligibilityEligibilit
yThis represents the
count of customers
which has passed
the eligibility rules
for the offer defined
in the Squad (BP)
level Proposition
Filters as well as
defined in bespoke
Squad (BP) level
strategies.IdentifyEli
gibleOffersEligible
Offersoffer_eli
gibility_
countYes Offer
EligibilityOfferEligibilit
y
6 Offer
Variant
EligibilityEligibilit
yThis represents the
count of customers
which has passed
the eligibility rules
for the Offer Variants
for each offer
defined in the Squad
(BP) level
Proposition Filters
as well as defined in
bespoke Squad
(BP) level
strategies.
Please note that
when multiple offer
variants are
configured for an
offer, only if a
“catch-all” offer


variants are
configured for an
offer, only if a
“catch-all” offer
variant (default,
without eligibility) is
defined, the offer
eligibility count will IdentifyOff
erVariants
ForEligible
OffersEligible
Offer
Variantsoffer_va
r_eligibi
lity_cou
ntYes Offer
Variant
EligibilityOfferVariant
Eligibility