Step-by-step instructions
A manager can send or schedule a clear customer message that reaches the correct audience, uses the right channel, respects local time, and is traceable in the campaigns list.
Use the interactive screenshot walkthrough first. Switch steps with the step dots, then read what to fill and why it matters.
Fields on this screen
Marketing Campaigns list
How to fill: Start from the list and check existing rows before creating another campaign.
Why: This prevents duplicate notifications and shows what is already scheduled.
Add
How to fill: Click Add only when the campaign should be created for the current company.
Why: The new record receives a campaign ID and opens the Notification form.
Media
How to fill: Attach an image or video that clearly represents the offer. Avoid tiny text inside the creative.
Why: Media is often the first thing customers notice, so it must match the message.
Notification title
How to fill: Type a short title in the active interface language.
Why: The title is used in notification previews and should be readable at a glance.
Notification text
How to fill: Type the full body text in the active interface language.
Why: The body explains what the customer gets and what they should do next.
Delivery method
How to fill: Open the list and choose Email, Phone, or Push notification.
Why: Each channel has different formatting, consent, cost, and reliability expectations.
Recipient groups
How to fill: Open the audience selector and choose All, User groups, Some users, or One user.
Why: Audience targeting controls who receives the campaign.
User groups
How to fill: If User groups is selected, choose the customer group that should receive the message.
Why: Groups keep offers relevant to loyalty, VIP, inactive, or segmented customers.
Specific users
How to fill: If Some users or One user is selected, choose real customer profiles from the users selector.
Why: Direct targeting is useful for service recovery, VIP offers, or one-off messages.
Notification context
How to fill: Open the context selector and choose No, Product, Promotion, or Page.
Why: Context decides what happens when the customer opens the notification.
Product context
How to fill: If Product is selected, choose the product that should open from the notification.
Why: This creates a direct path from message to item ordering.
Promotion context
How to fill: If Promotion is selected, choose the discount or promotion connected to the campaign.
Why: This keeps the campaign text aligned with a real offer rule.
Sending type
How to fill: Open the schedule type and choose one-time or recurring behavior.
Why: Recurring campaigns need a different review process than one-time announcements.
Send date and time
How to fill: Open the calendar and verify the exact planned send date and time.
Why: A correct schedule prevents accidental early or late sends.
Time zone
How to fill: Open the time-zone list and choose the local business time zone.
Why: Local time is required for lunch, birthday, holiday, and store-hour campaigns.
Locations
How to fill: Open In location and select only establishments where the offer is valid.
Why: Customers should not receive local offers from locations that cannot fulfill them.
Internal comment
How to fill: Write a short operational note for managers or support.
Why: This explains campaign intent without making it customer-facing.
Send
How to fill: Send only after media, title, text, delivery method, audience, context, schedule, time zone, locations, and comment are checked.
Why: Saved campaign data becomes the source for customer communication and later reporting.
Verify
How to fill: Return to the list and confirm the row has the expected name, date, availability, and resource.
Why: Verification confirms the campaign exists in the real system and can be reopened or audited.
Common mistakes
- Writing only one language when the company uses multiple customer-facing languages.
- Choosing All recipients when the offer belongs to a small customer group.
- Using Product or Promotion context without selecting the actual product or promotion.
- Scheduling a campaign without checking the time zone.
- Selecting locations where the offer is not available.
- Putting internal instructions into the customer-facing notification text.
- Forgetting to verify the campaign row after sending or saving.
AI Agent Field Reference for implementation
This block is intentionally below the human instructions. It explains storage names and downstream dependencies for automation, support, and future AI agents.
| Field | Stored as | Purpose | Why it matters |
|---|---|---|---|
| Campaign document | Companies/{companyId}/Campaigns/{campaignId} | Firestore document that stores one campaign under the company workspace. | Campaign records must stay scoped to the company so messages, audiences, and analytics do not leak between businesses. |
| ID | Document.ID | Unique campaign identifier. | The list, edit action, imports, logs, and support tools use this ID to locate the exact campaign. |
| Campaign name | Document.Name[] | Localized internal campaign name shown in the campaigns list. | Managers need a readable row name; AI agents use it to explain what the campaign is about. |
| Send date | Document.Date | Date and time when the campaign should be sent or evaluated. | Scheduling depends on this value, and support can explain why a campaign has or has not gone out. |
| Time zone | Document.timeZona | Time zone used for campaign scheduling. | A campaign scheduled for lunch must send at lunch in the business location, not in an unrelated server time zone. |
| Available | Document.Available | Whether the campaign is active/available. | Inactive campaigns can remain as drafts or history without reaching customers. |
| Created at | Document.DateCreate | Timestamp when the campaign was created. | Audits, troubleshooting, and campaign reports need the creation date. |
| Sending type | Document.Type | One time, daily, weekly, monthly, yearly, after N days, birthday, or another interval. | This controls whether the campaign sends once or repeats. |
| Delivery resource | Document.Resorce | Delivery channel such as email, phone/SMS, or push notification. | The channel determines message format, consent requirements, and cost. |
| Link | Document.Link | Optional deep link or page reference. | Messages with a link can open a specific app page or external target. |
| Notification title | Document.Title[] | Localized message title. | Customers see this first in push, email, SMS previews, or app notification cards. |
| Notification text | Document.Text[] | Localized body text of the notification. | The body explains the offer, action, deadline, and tone of the campaign. |
| Media | Document.Media[] | Campaign image/video objects. | Media makes the campaign recognizable in customer-facing screens and future AI explanations. |
| Media language | Document.Media[].Language | Languages where the media is valid. | Localized screens should show media that matches the language or is safe for all languages. |
| Groups | Document.Groups[] | Customer group IDs selected as an audience. | Group targeting keeps campaigns relevant and avoids sending a broad message to the wrong customers. |
| Users | Document.Users[] | Specific customer/user IDs or the special all marker. | Direct targeting supports all customers, some users, or one user scenarios. |
| Product | Document.Product | Optional product ID opened by the campaign context. | Product context turns a message into a direct sales path. |
| Promotion | Document.Promotion | Optional promotion/discount ID opened by the campaign context. | Promotion context connects the message to an actual discount or offer rule. |
| Locations | Document.Locations[] | Establishment IDs where the campaign applies. | Location scoping prevents customers from seeing offers unavailable at their branch. |
| Created by | Document.UserCreated | Manager or employee ID that created the campaign. | Support and audits need ownership for mistakes, approvals, and follow-up. |
| Price each | Document.PriceEach | Estimated or actual price per sent message. | Campaign cost reporting can explain spend per email/SMS/push when providers charge per message. |
| Amount | Document.Amount | Estimated or actual total campaign cost. | Managers need campaign cost for ROI and budget control. |
| Comment | Document.Comment | Internal note for managers and support. | Internal context explains why the campaign exists without sending that note to customers. |
| Order | Document.order | Optional order ID connected to an automated campaign. | Order-based campaigns can be traced back to the trigger order. |
| Lead | Document.lead | Optional CRM lead ID connected to the campaign. | Lead-based campaigns can be traced through CRM automation. |
Related guides
Use these guides to connect this section to adjacent SABSUS workflows.