Iris provides a platform that is used across the company to provide timely and personalized experiences to our product users. By way of its cloud services and deep integrations with end user-facing products, Iris powers campaigns across Azure, Office, Gaming, and other product spaces to drive feature engagement/awareness, subscription acquisition or renewals, and other objectives important to end user delight and Microsoft business objectives.
Portal uses Iris to deliver personalized notification to specific users, subscriptions, and/or many other target conditions. The notification are pulled on portal startup and regular polling during a portal visit. In other words, portal fetches Iris content when a user firstly visit the portal, and regularly when they stay in portal. While modal and toast notifications can be delivered on portal startup, only toast notifications can be delivered in regular pollings.
- An example of toast notification can be found here. Click on the
Send ..
button to trigger a toast notification. - An example of modal notification can be found here, which is triggered by a feature flag to force showing the contactability modal.
A data contract has been defined between Iris and Portal for notification content, which contains requried and optional fields.
-
Required fields:
- title
string
: The title of the notification. - description:
string
: The description of the notification. Should be text/html. - status
NotificationStatus
: The status of the notification that will indicate what icon the notification will show.
- title
-
Optional fields:
- duration
ToastDuration
: To indicate whether the notification shown as modal or toast. And for toasts, the duration the notification should remain. The default value isToastDuration.Short
. - button
NotificationButton
: At most one button is allowed in each notification. Can be used for launching a blade, or linking to a new page. - isControl
boolean
: For Iris experimentation only. Signals to show whether the user is in control group. If true, the notification won't be shown, but an impression beacon will be sent to Iris. - type
string
: Type of the notification. Used to discern "special" notifications from all the others (ie. contactability, etc.).
- duration
/**
* The notification status.
*/
export enum NotificationStatus {
/**
* An information notification
*/
Information,
/**
* A warning notification
*/
Warning,
/**
* An error notification
*/
Error,
/**
* An in progress notification
*/
InProgress,
/**
* A success notification
*/
Success,
}
/**
* Notification toast duration.
*/
export const enum ToastDuration {
/**
* Toast stays for 5 seconds.
*/
Short = 0,
/**
* Toast stays for 30 seconds.
*/
Long = 1,
/**
* Toast stays till the user manually dismisses it.
*/
Sticky = 2,
/**
* Suppress toast notification.
*/
Suppress = 3,
/**
* Modal toast notification. By default this option won't be allowed unless white listed. If you need to onboard a modal notification, please contact the Portal team.
*/
Modal = 4,
}
interface NotificationButton {
/**
* Button label (should be localized).
*/
label: string;
/**
* Optional button id which will be logged in telemetry (non localized string).
*/
id?: string;
/**
* Arguments for an "openBlade" action (opens a portal blade).
*/
openBlade?: {
/**
* The blade name.
*/
blade: string;
/**
* The extension name.
*/
extension: string;
/**
* The inputs to the blade. Defaults to an empty object.
*/
parameters?: any;
/**
* Defines whether the blade should be launched in a context pane. Defaults to false.
*/
openInContextPane?: boolean;
};
/**
* Arguments for an "externalLink" action (launches an external link). This will open the link with a new tab.
*/
externalLink?: {
/**
* The URI to launch.
*/
uri: string;
};
/**
* Arguments for an "deepLink" action (launches a deep link). This will open the link within the same tab.
*/
deepLink?: {
/**
* The URI to launch.
*/
uri: string;
};
}
-
At most one modal can be displayed on a portal visit. Unless the user refreshes the page, they won't be able to see a second modal.
-
A modal can only be displayed on portal startup, while toasts can be displayed anytime.
-
Deeplinking to a page won't trigger a modal to display. That means even if portal receives modal content from Iris for a particular user who visits portal from a deep link, the modal still wouldn't be displayed.
-
Modals have priority on which to show when mutiple ones are triggered, while toast notifications have the lowest priority than all the modals. Current Iris-onboarded models are
contactability
andadvisor
. Besides these two, there are other models triggered by non-Iris signals that may have higher priority, which will be displayed instead if signal received. Click here for a full list of modals and priority flow. -
The number of Iris notifications displayed everytime is capped by the feature flag
feature.irismessagelimit
. This number only applies to Iris-triggered notifications.
There are two types of iris telemetry: action and impression. Action beacons are like portal client telemetry where they track user interactions such as clicks of CTA (call to action) and clicks of dismiss button. Impression is a signal to let Iris know that portal has already displayed the content to the user, so that the same content won't be displayed again within a period of time for the same user. Implementation details on how iris telemetry is integrated with portal can be found here.
- To onboarding to Iris, please contact Karin Mepani.
- Documentation related to Iris
- General: https://osgwiki.com/wiki/Category:Iris
- Iris Glossary: https://www.osgwiki.com/wiki/Iris_Glossary
- Iris Beacons: https://osgwiki.com/wiki/Iris_Insights_Beacons
- List of Iris surfaces: https://www.osgwiki.com/wiki/List_of_Iris_surfaces
- Other useful links
- Iris support: https://irissupportdesk.zendesk.com/hc/en-us/requests
- Iris studio for campaign management: https://portal.cpm.microsoft.com/