Skip to main content
Call scripts are the heart of the Call Center system. They define the conversation flow, what callers see on their screens, what data gets collected, and how calls are completed. Call script editor Broadstripes Call Script Syntax (BCSS) is a simple, node-based scripting language that lets you create conversation flows without programming knowledge. Think of it like creating a flowchart where each box (node) represents a point in the conversation. Script flowchart
The script editor will automatically create a flowchart of your script as you build it. This flowchart will help you visualize the conversation flow and make sure your script makes sense. You can view the flowchart by clicking the “Flowchart” button in the top right corner of the script editor.Flowchart

Where to create call scripts

Project admins create call scripts on the Call Center settings page. To get to the Call Center settings page:
  1. Click the Settings menu
  2. Select the Scripts option
  3. Then click the + New Call Script button to start a new script
Scripts tab in Call Center settings, with the New call script button at the top right and a list of existing scripts; each row has a ••• menu next to the name for editing or deleting Now that you’re in the call script editor, you can start creating your script. First, let’s look at the basic structure of a call script and the different elements that make up a call script.

Script structure

Every script consists of:
  1. Nodes: Individual screens or conversation points
  2. Prompts: Text displayed to the caller
  3. Buttons: Options the caller can click to move through the script
  4. Transitions: Connections between nodes
  5. Data collection: Custom fields, event steps, or outcomes

Basic BCSS syntax

NODE - Defining a page in the call script
Example:
PROMPT - Displaying text to callers Prompts can include HTML formatting and variables:
BUTTON - Creating navigation options Buttons let callers move through the script:
You can have multiple buttons in a single node:
You can also use BUTTON to check off event steps. To check off an event step, use the following syntax:
Example:
OUTCOME - Custom labeled completion button Mark a call as complete with a custom button label:
The text after OUTCOME will be the outcome recorded on the person’s contact timeline. Outcomes that are listed in the Completed Outcomes field of the Call Center settings page are not queued to be called again in a random pool using the same call script. Completed Outcomes mark calls as finished and prevent people from being called again with the same script. You define these on the Other settings tab of the Call Center settings page. Completed Outcomes field When setting up your outcomes, distinguish between two types:
  • Add to “Completed Outcomes”: Outcomes that mean “don’t call again” (e.g., “Already Voted”, “Not Eligible”, “Declined”)
  • Don’t add to “Completed Outcomes”: Outcomes that mean “try again” (e.g., “Left Voicemail”, “No Answer”, “Call Back Later”)
A caller may potentially select several outcomes as they progress through the call/script. The last outcome selected will be the one recorded on the person’s contact timeline.
NEXT - Automatic progression NEXT automatically moves to another node with a Continue button:
CONDITION - Branching logic Use conditions to personalize conversations based on data:
CUSTOM FIELD - Collecting data with the call center script Custom fields are the most flexible way to collect data during calls.
Field types
Text Fields:
  • Free-form text entry
  • Best for: Comments, notes, open-ended answers
  • Example: “What’s your biggest workplace concern?”
Dropdown Fields:
  • Predefined options
  • Best for: Standardized responses
  • Example: “Shift: Morning, Afternoon, Night”
Checkbox Fields:
  • True/false, yes/no
  • Best for: Binary questions
  • Example: “High risk worker”
Number Fields:
  • Numeric values only
  • Best for: Counts, amounts, ratings
  • Example: “Years of service”
Date Fields:
  • Best for: Dates of events, follow-ups
  • Example: “Preferred callback date”
Multi-select fields are not supported in the call center. This includes multi-select dropdowns and sortable lists.
Collect information during the call:
The REQUIRED keyword means the caller must fill in the field before proceeding. END - Auto “Call Complete” Button END creates an exit node with an automatic “Call complete” button:
OUTCOME - Recording call outcomes Record the result of a call on the person’s contact timeline.:
The text after OUTCOME will be the outcome recorded on the person’s contact timeline.
A caller may potentially select several outcomes as they progress through the call/script. The last outcome selected will be the official outcome of the call and will be recorded on the person’s contact timeline.
CALL COMPLETE - Custom labeled completion button Mark a call as complete with a custom label END button:
The text after CALL COMPLETE becomes the button label. DEAD END - Blocking Call Completion Sometimes you need to end a script path without allowing immediate call completion:
DEAD END hides the “Call complete” button and forces the caller to go back to the previous node, skip the person or click “Call interrupted”.
SMS MESSAGE - Sending text messages Your project must have:
  • At least one active virtual SMS phone number
  • SMS-capable numbers (not all phone numbers support SMS)

Including SMS in Scripts

Add SMS MESSAGE to any node:

Message guidelines

Length: Keep messages under 160 characters when possible (standard SMS length) Content:
  • Include the union name so they know who’s texting
  • Be specific about action items (date, time, location)
  • Make it personal with variables and merge fields
Good Example:
“Hi Maria! Local 123 meeting Thursday 6pm at 100 Main St. Bring your questions!”
Bad Example:
“Meeting Thursday”
Merge fields Use merge fields to include unique IDs in links:
Requirements:
  • External system or custom field must have “Messaging merge token” enabled
  • Person must have a value in that external system or custom field
  • Token format: %SystemName-ID%

Troubleshooting SMS“No outgoing SMS number available”:
  • Project doesn’t have active virtual SMS numbers
  • Contact project admin immediately
“Unable to send message”:
  • Network connectivity issue
  • Person’s number may not support SMS
  • Try again or skip SMS step
Person doesn’t have cell phone:
  • System shows message: “No cell phone available”
  • Can’t send SMS to landlines
  • Skip the SMS step and continue
BCSS Variables Scripts can display personalized information using these variables: Person Information
  • {{person.first_name}} - First name (e.g., “Maria”)
  • {{person.last_name}} - Last name (e.g., “Garcia”)
  • {{person.name}} - Full name (e.g., “Maria Garcia”)
Caller Information
  • {{caller.name}} - The person making the call
Employment Information
  • {{person.employer}} - Main employer
  • {{person.department}} - Department or specific worksite
  • {{person.job_title}} - Job title or classification
Custom Fields
  • {{person.custom_fields.[field_name text]}} - Any custom field value (the field name must be lower case and followed by the word “text”)
  • Example: {{person.custom_fields.[shift text]}} displays the shift custom field
Event Steps
  • {{person.event_steps.[event_name : step_name]}} - Event step status
  • Example: {{person.event_steps.[One-on-One : Completed]}} shows if the step is checked (this will return true or false)
External Systems (for merge tokens in SMS)

Script elements in detail

Working with custom fields Custom fields let you collect project-specific data during calls. To use them:
  1. The custom field must exist in your project (Settings → Custom Fields)
  2. Optionally mark it as “Show in Call Center” for easier access
  3. Reference it in your script:
When the caller reaches this node, they’ll see a field to enter the shift preference. Tips:
  • Use REQUIRED for critical data: CUSTOM FIELD REQUIRED MembershipNumber
  • Use clear field names that describe what you’re collecting
  • Consider creating dropdown custom fields (using options) for consistency

Working with event steps

Event steps track activities and milestones. Buttons in scripts can automatically check event steps:
You can also create buttons that check multiple event steps or collect event step data as the caller progresses through the script. Working with assessments Assessment codes (numbered 0-5) indicate the organizing strength or engagement level of a contact. If your project has “Display assessment in the Call Center” enabled, you can view the current assessment during calls. If your project has “Enable editing of assessment in the Call Center” enabled, you can update the assessment during calls. Common assessment scales:
  • 0: Unassessed
  • 1: Strong Union supporter
  • 2: Union supporter
  • 3: Undecided
  • 4: Leaning Hostile
  • 5: Hostile
Display assessment in the Call Center and Enable editing of assessment can be enabled in the Call Center Settings on the Other settings tab.

Supplemental fields

Supplemental fields appear at the bottom of every node, regardless of which path the caller took through the script. Define them at the top of your script:
Use comments to provide additional information about the script to other users. Comments are not visible to callers. Start a comment with #.

Complete Example Scripts

Example 1: Union Organizing Outreach with Conditional Routing

Goal: Contact members about union organizing efforts, collect petition signatures, and recruit volunteers using conditional routing based on member status.
Key Features:
  • SUPPLEMENTAL section with labeled custom fields
  • Advanced CONDITION with OR logic for member status routing
  • EVENT STEP tracking throughout (Hours Reduced, Petition, Volunteer)
  • NEXT instruction for automatic progression with “Continue” button
  • HTML/CSS styling with colors, bold, lists, and blockquotes
  • Person variables ({{person.first_name}}, {{person.employer}})
  • Custom field variables in CONDITION ({{person.custom_fields.[status text]}})
  • Comments explaining script logic
  • Multiple call outcomes (Reached, Left Employer, Call back later, Wrong number, No answer/voicemail)
  • Three distinct messaging paths based on member status

Example 2: Basic GOTV Phone Bank

Goal: Remind voters to vote, confirm their plan, and collect vote intention.
Key Features:
  • HTML/CSS styling for emphasis (bold, colors, italics)
  • Multiple paths based on voter status
  • SMS MESSAGE for election reminders
  • Person variables {{person.first_name}}
  • Data collection for vote plans
  • Clear outcomes for reporting
  • Callback option for busy voters

Example 3: Member Survey and Issue Identification

Goal: Identify workplace issues, gauge union support, and recruit organizing committee members.
Key Features:
  • HTML/CSS styling with colors and emphasis
  • Custom field variables ({{person.employer}}, {{person.department}})
  • Issue identification and severity rating
  • Union support assessment
  • SMS MESSAGE with styling notes for callers
  • Organizing committee recruitment path
  • Multiple engagement levels captured

Example 4: New Member Onboarding

Goal: Welcome new members, collect information, and schedule orientation.
Key Features:
  • Welcome message with HTML/CSS styling
  • SMS MESSAGE with custom field variables in message
  • Multiple committee signup paths
  • Custom field variable usage ({{person.employer}}, {{person.custom_fields.[best phone text]}})
  • Contact preference collection
  • Progressive engagement strategy

Example 5: Personalized Member Outreach with Conditions

Goal: Route calls based on member status, department, and previous engagement using advanced CONDITION logic.
Key Features:
  • Advanced CONDITION logic:
    • Basic CONDITION with simple equality check
    • OR logic to match multiple member statuses
    • AND logic to combine multiple conditions (inactive AND not contacted recently)
  • Extensive HTML/CSS styling throughout prompts
  • Multiple custom field variables:
    • Built-in fields ({{person.employer}}, {{person.department}}, {{person.job_title}})
    • Custom text fields ({{person.custom_fields.[member status text]}}, {{person.custom_fields.[current campaign text]}})
  • Personalized routing based on member data
  • Dynamic messaging using person variables
  • GeneralOutreach ELSE path for unmatched conditions

Troubleshooting

Script validation errors

Error: “Node ‘NodeName’ does not exist”

Cause: A button’s TARGET references a node that doesn’t exist. Example:
Solution:
  1. Find where the node is referenced
  2. Either create the missing node or change the target to an existing node

Error: “Duplicate node name”

Cause: Two nodes have the same name. Example:
Solution: Rename one of the nodes to be unique.

Error: “Missing PROMPT in node”

Cause: A node exists without a PROMPT statement. Example:
Solution: Add a PROMPT.

Creating and Managing Scripts

Step-by-Step: Creating a Script

  1. Navigate to script page
    • Go to the Settings menu and select Scripts
    • Click New call script
  2. Name your script
    • Enter a descriptive name (e.g., “GOTV 2024”, “Member Survey Fall”, “Pledge Card Collection”)
    • Use names that make it clear what the script is for
  3. Write your BCSS code
    • In the BCSS editor, write your script using the syntax covered above
    • Start with a simple flow and add complexity gradually
    • Use the example scripts as templates
  4. Validate your script
    • Click Validate to check for syntax errors
    • Fix any errors shown in red
    • Common errors:
      • Missing node names
      • Duplicate node names
      • Buttons pointing to non-existent nodes
      • Missing PROMPT in a node
  5. View the flow chart
    • Click Flow Chart to see a visual representation
    • This helps identify logic errors or dead ends
    • Ensure all paths lead to either OUTCOME or DEAD END
  6. Save as draft
    • Click Save to save your script
  7. Test your script
    • Before activating, test the script with a small call pool
    • Have callers walk through different paths
    • Collect feedback on clarity and flow

Best practices

1. Start with a clear goal Before writing a single line, answer:
  • What information do I need to collect?
  • What action do I want people to take?
  • How will I use the outcomes for follow-up?
2. Keep it conversational Write how you speak:
  • ❌ “Greetings. I am inquiring as to your availability for union participation.”
  • ✅ “Hi! Do you have a few minutes to talk about union activities?”
3. Respect people’s time
  • State the purpose upfront
  • Offer an easy exit (“Is now a good time?”)
  • Keep scripts under 5-10 minutes when possible
  • Don’t collect data you won’t use
4. Provide clear options Every node should have obvious next steps:
  • ❌ “What do you think?”
  • ✅ Clear buttons: “Very interested”, “Somewhat interested”, “Not interested”
5. Plan for all responses Include paths for:
  • Enthusiastic supporters
  • Undecided people
  • Those who say no
  • People who want callbacks
  • Those who ask to be removed from lists
6. Test before launching
  • Walk through every possible path
  • Have a colleague test it
  • Do a pilot with 5-10 friendly contacts
  • Fix issues before full rollout
7. Iterate based on feedback
  • Debrief with callers after phone banks
  • Ask what was confusing
  • Look at where people got stuck (check call duration)
  • Update scripts between campaigns

Best practices for script design

Keep it conversational
  • Write prompts the way you would naturally speak
  • Avoid overly formal or robotic language
  • Example: “Hi Maria” not “Greetings, Ms. Garcia”
Provide clear options
  • Button text should make the outcome obvious
  • Bad: “Option A”, “Option B”
  • Good: “Yes, I’m interested”, “No, not interested”
Plan for all scenarios
  • Include options for “I don’t know”, “Call me back”, “Remove from list”
  • Don’t force people into binary choices when their situation might be more complex
Collect only necessary data
  • Every field you add increases call time
  • Focus on the most important information
  • You can always follow up later
Use variables to personalize
  • Including the person’s name and workplace makes the conversation feel more genuine
  • Example: “Hi {{person.first_name}}, this is {{caller.name}} from the union”
Test different paths
  • Walk through your script as if you were different types of contacts
  • Ensure positive, negative, and neutral paths all make sense
Plan your outcomes
  • Think about how you’ll use outcome data for follow-up
  • Create specific enough outcomes to guide next steps
  • Example: “Strong Support - Committee Interest” vs just “Completed”

Managing script versions

Editing active scripts
  • You can edit an active script, but changes affect all future calls immediately
  • If making major changes, consider creating a new version instead
Disabling scripts
  • To disable a script, uncheck Active in the Scripts tab of the Call Center settings page.
  • Disabled scripts will disable call pools that use them.