Summary
- The integration of Annex Cloud loyalty with BazaarVoice is a one-stop solution where the points are awarded to customers based on the moderated reviews.
- Annex Cloud pulls the latest moderated data from Bazaarvoice.
- When a customer buys a product, they most commonly write the review on the website of the store where they purchased it, this data is pushed to BV using BV’s available APIs and then the moderated data from BV is pulled to AC (Annex Cloud).
- Annex Cloud validates customers' loyalty and based on the approved moderated data points are awarded to them.
Configuration with Annex Cloud
Site Admin:
- Enable the Ratings and Review action.
- Go to Actions.
- Select Create new Action.
- From the listed actions, select the Rating and Review action.
- Enter the eligible points for completion of the action.
- Save the advanced settings.
Configuration at Bazaarvoice Admin
Login to BazaarVoice’s instance.
Select the Workbench option from the menu as shown below:

Choose an option from the available two options in the drop-down list, i.e. Annex Cloud Staging and Production instance.

Navigate through the instance to check the Dashboards, Reports, Alerts, and Resources.
The user can create and manage reports, analyze content trends, and view key performance indicators.
Below is an image of what Bazaarvoice's staging environment looks like:

To manage the content, click on the Content tab, and in the Manage Content section select Ratings & Reviews.

The user can view all the ratings & reviews which are posted on Annex Cloud’s Product Page.

The user has the option to Approve or Reject the Review.
The user can Respond to the Review. If required, the user can Email the Review to multiple stakeholders.

The user checks the details of a particular Review below:

Here, the user Moderates the Review in detail.

Configuration at AC to pull the moderated data:
- Get data from Bazaarvoice Conversation API, using the below details:
API Endpoint - https://stg.api.bazaarvoice.com/data/reviews.json?apiversion=5.4
API Key – XXXXXXXXXXXXX (Annex Cloud will provide you)
Method- GET
Response-
{
"Limit": 10,
"Offset": 0,
"Total Results": 68,
"Locale": "en_US",
"Results": [
{
"Id": "46082471",
"CID": "173ba849-6e4a-5d9a-b76f-fdbef8c81af6",
"SourceClient": "test-annexcloud",
"LastModeratedTime": "2023-04-04T11:00:02.000+00:00",
"LastModificationTime": "2023-04-04T11:00:02.000+00:00",
"ProductId": "demo-product-1",
"AuthorId": "me439vw65lljz6fdkvmfrwotf",
"ContentLocale": "en_US",
"IsFeatured": false,
"TotalInappropriateFeedbackCount": 0,
"TotalClientResponseCount": 0,
"TotalCommentCount": 0,
"Rating": 5,
"IsRatingsOnly": true,
"TotalFeedbackCount": 0,
"TotalNegativeFeedbackCount": 0,
"TotalPositiveFeedbackCount": 0,
"ModerationStatus": "APPROVED",
"SubmissionId": "r210553_1__16806059bEVJERkpKo",
"SubmissionTime": "2023-04-04T10:58:36.000+00:00",
"UserNickname": "jimmy sinek",
"UserEmailAddress": "0eGkCOLTAjRxwM38N8Qg/p7Z7ruhbxjJfcQKxzURlHs=",
"ReviewText": null,
"SecondaryRatingsOrder": [],
"AdditionalFields": {},
"Badges": {},
"Photos": [],
"InappropriateFeedbackList": [],
"ProductRecommendationIds": [],
"ContextDataValues": {},
"Pros": null,
"SecondaryRatings": {},
"UserLocation": null,
"CommentIds": [],
"IsSyndicated": false,
"AdditionalFieldsOrder": [],
"CampaignId": null,
"Title": null,
"ContextDataValuesOrder": [],
"Helpfulness": null,
"TagDimensions": {},
"RatingRange": 5,
"BadgesOrder": [],
"IsRecommended": null,
"ClientResponses": [],
"Cons": null,
"TagDimensionsOrder": [],
"Videos": []
}
]
}- Added the condition to take data from the below conditions:
- ModerationStatus = APPROVED (Equal To)
- LastModeratedTime != TodaysDate (Not Equal To)
- Adding the above two conditions filtered data.
- Get the Encoded Email from filter data and decode the email using the client decrypt code.
- Check whether the User Emails are opt-in or not using AC GET User API.
This API is used to fetch the details of the user.
API- https://s15.socialannex.net/api/3.0/users/{id}
Method- GET
Request Object- Not Blank
Function Location In Extension- ANNEXCLOUDV3SERVICE
Input Param- customer (EMAIL OR ID)
| Method | URL |
|---|---|
| GET | /users/{id} |
Sample Request:
Response:
This will return all the details of the user.
Output fields:
- id: A unique identifier assigned to each user in the SA system. It is used to uniquely identify users.
- email: The email address of the user. It serves as a contact method and helps uniquely identify users.
- firstName: The first name of the user. It represents the user's given name.
- lastName: The last name of the user. It represents the user's family name or surname.
- zipCode: The zip code of the user's location. It provides geographical information.
- status: Indicates the user's status, whether they are active or inactive. By default, it is set to active but can be changed to inactive if requested by the client.
- phone: The phone number of the user. It serves as a contact method.
- birthDate: The birthdate of the user in the format yyyy-MM-dd'T'HH:mm:ssZ (e.g., 2023-07-31T12:00:00Z).
- anniversaryDate: The anniversary date of the user in the format yyyy-MM-dd'T'HH:mm:ssZ (e.g., 2023-07-31T12:00:00Z).
- userProfileImageUrl: The URL to the user's profile image. If not provided during user creation, the response for this field is blank.
- createDate: The date when the user is created in the format yyyy-MM-dd'T'HH:mm: ss Z.
- updateDate: The date when the user details were last updated in the format yyyy-MM-dd'T'HH:mm: ss Z.
- totalSpendCurrency: The total currency spent by the user. This attribute likely holds information related to the user's spending behavior.
- extendedAttribute: This attribute contains extra user attributes that vary according to the specific client using the API. It allows clients to add custom attributes as needed.
- errorCode: This attribute is only present when an API request fails, and it denotes the type of error that occurred during the request.
- errorMessage: If the API request fails, this attribute provides the reason why the request failed, offering more information about the error.
Sample Positive Response:
| Status code | Response |
|---|---|
| 200 |
An example of a positive response is:
|
Sample Error Response:
| Status code | Response |
|---|---|
| AC1002 / AC1005 |
An example of an error response is: { "errorCode": "AC1002", "errorMessage": "Request Not Authorized" } If Data is not found!! { "errorCode": "AC1005", "errorMessage": "No data found" } |
- If the User is found in the above API, then Points are awarded to the user using the below APIs;
API- https://s15.socialannex.net/api/3.0/points
Method- POST
Request Object- Not Blank
Function Location in Extension- ANNEXCLOUDV3SERVICE
Input Param- customer (EMAIL OR ID)
To give points:
| Parameter | Parameter Description | Parameter Type |
|---|---|---|
| id (Mandatory) | Enter the user’s unique id. | string |
| actionId (Mandatory) | Enter the action id (it is mandatory if the action id is set at the site admin). | string |
| activity (Mandatory) | Enter the activity as CREDIT or DEBIT. | string |
| orderId (optional) | If the activity is DEBIT, pass the order id. | string |
| reason | Enter the reason for adding or removing the points. (If the actionId is not passed then the reason is mandatory). | string |
To redeem points:
| Parameter | Parameter Description | Parameter Type |
|---|---|---|
| id (Mandatory) | Enter the user’s unique id. | string |
| rewardId (Mandatory) | Enter the reward id (it is mandatory if the reward id is set at the site admin). | string |
| activity (Mandatory) | Enter the activity as CREDIT or DEBIT. | string |
| orderId (optional) | If the activity is DEBIT, pass the order id. | string |
| reason | Enter the reason for adding or removing the points (If the rewardId is not passed then the reason is mandatory) | string |
| source (optional) | Enter the source as web or store. | string |
To redeem custom points:
| Parameter | Parameter Description | Parameter Type |
|---|---|---|
| id (Mandatory) | Enter the user’s unique id. | string |
| activity (Mandatory) | Enter the activity as CREDIT or DEBIT. | string |
| orderId (optional) | If the activity is DEBIT, pass the order id. | string |
| debit (Mandatory) | Displays the number of debited points. | string |
| reason (Mandatory) | Enter the reason for adding or removing the points. | string |
| source (optional) | Enter the source as web or store. | string |
To award/deduct custom points:
| Parameter | Parameter Description | Parameter Type |
|---|---|---|
| id (Mandatory) | Enter the user’s unique id. | string |
| actionId (Mandatory) | Enter the action id. (it is mandatory if the action id is set at the site admin). | string |
| activity (Mandatory) | Enter the activity as CREDIT or DEBIT. | string |
| orderId (optional) | If the activity is DEBIT, pass the order id. | string |
| credit/debit (Mandatory) | Enter the number of credited/debited points. | string |
| reason | Enter the reason for adding or removing the points (If the actionId is not passed then the reason is mandatory). | string |
Sample Request:
To give points:
{
"id": "user@domain.com",
"actionId": "100",
"activity": "CREDIT",
"reason": "aj Bonus"
"credit": "50"
}
To redeem points:
{
"id": "user@domain.com",
"rewardId": "111",
"activity": "DEBIT",
"orderId": "OD001",
"reason": "claim"
"source": "web"
}
To redeem custom points:
{
"id": "user@domain.com",
"activity": "DEBIT",
"orderId": "OD001",
"debit": "500",
"reason": "used for purchase"
"source": "web"
}
To award custom points:
{
"id": "user@domain.com",
"actionId": "100",
"activity": "CREDIT",
"credit": "50",
"reason": "bonus"
}
To deduct custom points:
{
"id": "user@domain.com",
"actionId": "100",
"activity": "DEBIT",
"orderId": "OD001",
"debit": "50",
"reason": "adjustment"
}Response:
This returns a successful response with the details of the points that are added/redeemed from the user’s account.
Output fields:
- id: A unique identifier representing the user.
- actionId: A unique identifier representing a particular action or transaction.
- activity: Indicates whether the action is a credit or a debit. Credit usually means points added to the user's account, while debit represents points being deducted.
- credit: The number of points credited to the user's account for a particular action.
- pointsAwarded: The total number of points awarded for the action.
- updatedUserTier: The user's tier level after the points have been awarded or removed. This indicates an upgrade or downgrade in the user's tier.
- updatedAvailablePoints: The number of updated points available to the user after the action.
- updatedLifetimePoints: The total number of updated lifetime points for the user.
- releaseDate: The date (in yyyy-mm-dd format) on which any held points are released.
- reason: The reason provided for adding or removing the points.
- errorCode: This attribute appears only when the API request fails, and it denotes the type of error that occurred during the request.
- errorMessage: If there is an API request failure, this attribute displays the reason why the request failed.
Sample Positive Response:
| Status code | Response |
|---|---|
| 200 |
An example of a positive response is: Give points response:
Redeem points response:
Redeem custom points response:
Add custom points response:
Deduct custom points response:
|
Sample Error Response:
| Status code | Response |
|---|---|
| AC1002 |
An example of an error response is:
|
Functional Flow Diagram
