Skip to main content

Promotion Workflow Guide

This guide provides step-by-step workflows for common promotion management tasks in the CRM system.

Content Creation Workflows​

Creating a Basic Promotion​

Step 1: Create Base Promotion

mutation CreateBasicPromotion {
createSmallPromotion(
input: {
promotion: {
name: "Welcome Bonus"
description: "Get 100% match on your first deposit"
category: CASINO
slug: "welcome-bonus"
visibility: BOTH
imageFileName: "welcome-bonus.jpg"
altText: "Welcome Bonus Promotion"
primaryButton: {
text: "Claim Now"
action: { modal: WALLET }
loggedOutText: "Sign In to Claim"
loggedOutAction: { modal: SIGN_IN }
usedText: "Already Claimed"
}
seo: {
title: "Welcome Bonus - 100% Match"
description: "Join now and get 100% match on your first deposit"
socialImageFileName: "welcome-social.jpg"
}
}
}
) {
id
name
status
}
}

Step 2: Activate Promotion

mutation ActivatePromotion {
changePromotionStatus(id: "promotion-id", status: STAGING_ACTIVE)
}

Step 3: Sort for Visibility

mutation SortForVisibility {
sortPromotions(
input: {
sort: [{ promotionId: "promotion-id", index: 0 }]
category: PROMOTION
}
)
}

Creating a Comprehensive Campaign​

Step 1: Create Big Promotion with All Components

mutation CreateCampaign {
createBigPromotion(
input: {
promotion: {
name: "Summer Casino Festival"
description: "Join our biggest summer event"
category: CASINO
slug: "summer-festival"
visibility: BOTH
imageFileName: "summer-festival.jpg"
altText: "Summer Festival"
primaryButton: {
text: "Join Festival"
action: { modal: WALLET }
loggedOutText: "Sign In to Join"
loggedOutAction: { modal: SIGN_IN }
usedText: "Already Joined"
}
secondaryButton: { action: { modal: NOTIFICATION } }
howItWorks: {
steps: [
"Register for the festival"
"Make qualifying deposits"
"Earn festival points"
"Claim your rewards"
]
longDescription: "Our summer festival runs for 30 days with daily challenges and rewards"
terms: "Terms and conditions apply. Must be 18+ to participate."
}
seo: {
title: "Summer Casino Festival - Win Big"
description: "Join our summer festival and win amazing prizes"
socialImageFileName: "summer-festival-social.jpg"
}
}
promotionSlider: {
name: "Festival Slider"
title: "Summer Festival!"
description: "Win Big This Summer"
imageFileName: "festival-slider.jpg"
actionType: AUTH
initialClickCount: 200
altText: "Festival slider"
primaryButton: { text: "Join Now", action: { modal: WALLET } }
}
promotionPopup: {
name: "Festival Popup"
title: "Don't Miss Out!"
description: "Summer Festival ends soon"
imageFileName: "festival-popup.jpg"
layout: TEXT_AND_BUTTON
actionType: LINK
link: "https://example.com/festival"
btnText: "Learn More"
initialClickCount: 50
altText: "Festival popup"
primaryButton: { text: "Join Festival", action: { modal: WALLET } }
}
promotionVideoSlider: {
name: "Festival Video"
title: "Festival Highlights"
description: "See what awaits you"
videoFileName: "festival-video.mp4"
actionType: AUTH
initialClickCount: 100
altText: "Festival video"
primaryButton: { text: "Watch & Join", action: { modal: WALLET } }
}
}
) {
id
name
status
type
}
}

Step 2: Activate and Sort All Components

mutation ActivateAndSortCampaign {
# Activate the promotion
changePromotionStatus(id: "campaign-id", status: STAGING_ACTIVE)

# Sort for all content types
sortPromotions(
input: {
sort: [{ promotionId: "campaign-id", index: 0 }]
category: PROMOTION
}
)

sortSliders(
input: {
sort: [{ promotionId: "campaign-id", index: 0 }]
category: HOME_PAGE
}
)

sortPopups(
input: { sort: [{ promotionId: "campaign-id", index: 0 }], category: POPUP }
)

sortVideoSliders(
input: {
sort: [{ promotionId: "campaign-id", index: 0 }]
category: CASINO_EXPLORE
}
)
}

Content Management Workflows​

Adding Components to Existing Promotion​

Add Slider Component

mutation AddSlider {
addSliderToPromotion(
input: {
promotionId: "existing-promotion-id"
category: HOME_PAGE
promotionSlider: {
name: "New Slider"
title: "Special Offer"
description: "Limited time only"
imageFileName: "special-offer.jpg"
actionType: BUTTON
btnText: "Get Offer"
link: "https://example.com/offer"
initialClickCount: 150
altText: "Special offer slider"
primaryButton: { text: "Claim Offer", action: { modal: WALLET } }
}
}
)
}

Add Popup Component

mutation AddPopup {
addPopupToPromotion(
input: {
promotionId: "existing-promotion-id"
category: POPUP
promotionPopup: {
name: "Urgent Popup"
title: "Limited Time!"
description: "Offer expires in 24 hours"
imageFileName: "urgent-popup.jpg"
layout: FULL_SCREEN
actionType: AUTH
initialClickCount: 75
altText: "Urgent popup"
primaryButton: { text: "Act Now", action: { modal: WALLET } }
}
}
)
}

Add Video Slider Component

mutation AddVideoSlider {
addVideoSliderToPromotion(
input: {
promotionId: "existing-promotion-id"
category: CASINO_EXPLORE
promotionVideoSlider: {
name: "Promo Video"
title: "See It In Action"
description: "Watch our latest features"
videoFileName: "promo-video.mp4"
actionType: LINK
btnText: "Learn More"
link: "https://example.com/features"
initialClickCount: 125
altText: "Promo video"
primaryButton: { text: "Try Now", action: { modal: WALLET } }
}
}
)
}

Updating Existing Components​

Update Slider

mutation UpdateSlider {
updateSliderOnPromotion(
input: {
promotionId: "promotion-id"
promotionSlider: {
title: "Updated Slider Title"
description: "New description"
btnText: "Updated Button"
}
}
)
}

Update Popup

mutation UpdatePopup {
updatePopupOnPromotion(
input: {
promotionId: "promotion-id"
promotionPopup: {
title: "Updated Popup Title"
layout: COMPACT
actionType: BUTTON
btnText: "New Action"
link: "https://example.com/new-action"
}
}
)
}

Update Video Slider

mutation UpdateVideoSlider {
updateVideoSliderOnPromotion(
input: {
promotionId: "promotion-id"
promotionVideoSlider: {
title: "Updated Video Title"
description: "New video description"
actionType: AUTH
}
}
)
}

Bulk Operations Workflows​

Bulk Content Management​

Bulk Update Multiple Promotions

mutation BulkUpdatePromotions {
bulkUpdatePromotion(
input: {
id: "promotion-1"
bulkUpdate: {
name: { EN: "Updated Name 1", ES: "Nombre Actualizado 1" }
description: {
EN: "Updated Description 1"
ES: "Descripción Actualizada 1"
}
}
}
)

bulkUpdatePromotion(
input: {
id: "promotion-2"
bulkUpdate: {
name: { EN: "Updated Name 2", ES: "Nombre Actualizado 2" }
description: {
EN: "Updated Description 2"
ES: "Descripción Actualizada 2"
}
}
}
)
}

Bulk Status Changes

mutation BulkStatusChange {
changePromotionStatus(id: "promo-1", status: STAGING_ACTIVE)
changePromotionStatus(id: "promo-2", status: STAGING_ACTIVE)
changePromotionStatus(id: "promo-3", status: STAGING_ACTIVE)
}

Bulk Sorting

mutation BulkSort {
sortPromotions(
input: {
sort: [
{ promotionId: "promo-1", index: 0 }
{ promotionId: "promo-2", index: 1 }
{ promotionId: "promo-3", index: 2 }
]
category: PROMOTION
}
)

sortSliders(
input: {
sort: [
{ promotionId: "promo-1", index: 0 }
{ promotionId: "promo-2", index: 1 }
]
category: HOME_PAGE
}
)
}

Bulk Deletion​

mutation BulkDelete {
deletePromotions(ids: ["old-promo-1", "old-promo-2", "old-promo-3"])
}

Content Lifecycle Workflows​

Draft to Active Workflow​

Step 1: Create Draft

mutation CreateDraft {
createSmallPromotion(input: {
promotion: {
# ... promotion details
}
}) {
id
status # Will be DRAFT
}
}

Step 2: Review and Test

query ReviewDraft {
promotion(id: "draft-id") {
id
name
description
status
# ... all fields for review
}
}

Step 3: Stage for Testing

mutation StagePromotion {
changePromotionStatus(id: "draft-id", status: STAGING_ACTIVE)
}

Step 4: Sort for Visibility

mutation MakeVisible {
sortPromotions(
input: {
sort: [{ promotionId: "draft-id", index: 0 }]
category: PROMOTION
}
)
}

Step 5: Go Live (Production Only)

mutation GoLive {
changePromotionStatus(id: "staged-id", status: ACTIVE)
}

Seasonal Campaign Workflow​

Step 1: Plan Campaign

mutation PlanCampaign {
createBigPromotion(
input: {
promotion: {
name: "Holiday Special"
startDate: "2024-12-01T00:00:00Z"
endDate: "2024-12-31T23:59:59Z"
# ... other details
}
# ... components
}
) {
id
}
}

Step 2: Schedule Activation

mutation ScheduleActivation {
# This would typically be handled by a scheduler
changePromotionStatus(id: "campaign-id", status: STAGING_ACTIVE)
}

Step 3: Monitor and Adjust

query MonitorCampaign {
promotion(id: "campaign-id") {
usersClicks
usersViews
usersClaims
# ... analytics data
}
}

Step 4: End Campaign

mutation EndCampaign {
changePromotionStatus(id: "campaign-id", status: INACTIVE)
}

Troubleshooting Workflows​

Content Not Visible in Main App​

Check Status

query CheckStatus {
promotion(id: "invisible-promo") {
status
visibility
startDate
endDate
}
}

Check Sorting

query CheckSorting {
promotion(id: "invisible-promo") {
indexInPromotions
indexInSliderCategory
indexInPopupCategory
indexInVideoSliderCategory
}
}

Fix Visibility

mutation FixVisibility {
changePromotionStatus(id: "invisible-promo", status: STAGING_ACTIVE)

sortPromotions(
input: {
sort: [{ promotionId: "invisible-promo", index: 0 }]
category: PROMOTION
}
)
}

Clear Caches​

mutation ClearCaches {
clearPromotionCaches
}

Best Practices​

Content Creation​

  1. Always set SEO fields for better discoverability
  2. Use descriptive slugs that won't change
  3. Set appropriate visibility based on target audience
  4. Include alt text for accessibility
  5. Test with different action types before going live

Content Management​

  1. Use staging status for testing
  2. Sort content after activation for visibility
  3. Monitor analytics regularly
  4. Update translations for all languages
  5. Clean up old content regularly

Performance​

  1. Use bulk operations for multiple items
  2. Clear caches after major changes
  3. Optimize images before upload
  4. Set appropriate dates to avoid expired content
  5. Monitor server load during bulk operations