Skip to main content
Customer Satisfaction (CSAT) surveys allow you to collect feedback from customers at the end of their conversation with your agent. The agent asks customers to rate their experience, and responses are tracked in your analytics dashboards.

Survey types

PolyAI supports two types of CSAT surveys:
  • Voice CSAT - In-call surveys where the agent asks customers to rate their experience before ending the conversation
  • SMS CSAT - Post-call surveys sent via text message after the conversation ends

How voice CSAT works

  1. Customer completes conversation - The agent finishes helping the customer
  2. Lead-in message - Agent introduces the survey (e.g., “Before you go, I’d like to ask you a quick question”)
  3. Survey question - Agent asks the rating question (e.g., “On a scale of 1 to 5, how satisfied were you with this call?”)
  4. Customer responds - Customer provides a rating (typically 1-5)
  5. Data collection - Rating is stored and appears in your dashboards

How SMS CSAT works

  1. Call completes - The conversation with your agent ends
  2. Delay period - System waits a configured number of minutes (minimum 6 minutes for Twilio)
  3. SMS sent - Customer receives a text message with the survey question
  4. Customer responds - Customer replies with a rating (1-5)
  5. Data collection - Response is linked to the original call and appears in your analytics

Configuration

Voice CSAT configuration

Voice CSAT surveys are triggered programmatically in your end function. The survey messages (lead-in and question) are configured through your agent’s conversation flow.

Survey message best practices

lead_in_message
string
Message to introduce the survey. Keep it brief and natural.Example: “Before you go, I’d like to ask you a quick question about your experience today.”
survey_question
string
The actual rating question. Be clear about the scale.Example: “On a scale of 1 to 5, where 1 is very dissatisfied and 5 is very satisfied, how would you rate this call?”
Tips for effective surveys:
  • Keep it short - Customers are more likely to respond to brief surveys
  • Be clear about the scale - Explicitly state what 1 and 5 mean
  • Natural language - Write messages that sound conversational, not robotic
  • Test thoroughly - Try different phrasings in sandbox before deploying

SMS CSAT configuration

SMS CSAT surveys are configured through the Advanced Configuration JSON in your project settings.
SMS CSAT is only available for GenAI projects. If using a hybrid project, it must use GenAI handoffs.

Basic SMS setup

Add the csat_sms configuration to your Advanced Configuration JSON:
{
  "csat_sms": {
    "enabled": true,
    "sms_question_template": "Thanks for calling. How was your experience with the agent who assisted you today? Reply 1-5 (1=poor, 5=excellent). Reply STOP to opt out.",
    "sms_response_template": "Thank you for your feedback!",
    "contained_calls": {
      "enabled": true,
      "percentage": 100,
      "weekly_cap": 1000,
      "delay_minutes": 6
    },
    "uncontained_calls": {
      "enabled": false
    },
    "call_center_calls": {
      "enabled": false
    },
    "wait_for_response_hours": 12
  }
}

Configuration options

enabled
boolean
Enable or disable SMS CSAT surveys globally.
sms_question_template
string
The SMS message containing your survey question. Must clearly explain the 1-5 scale and include opt-out instructions.Example: “Thanks for calling. How was your experience with the agent who assisted you today? Reply 1-5 (1=poor, 5=excellent). Reply STOP to opt out.”
sms_response_template
string
Confirmation message sent after the customer responds.Example: “Thank you for your feedback!”
wait_for_response_hours
number
How many hours to wait for customer responses before closing the survey window.Default: 12 hours

Call type settings

Configure SMS surveys separately for different call outcomes:
contained_calls
object
Calls that were fully handled by the AI agent without transferring to a human.
  • enabled (boolean) - Enable surveys for contained calls
  • percentage (number 0-100) - Percentage of contained calls that receive surveys
  • weekly_cap (number) - Maximum SMS messages to send per week for this call type
  • delay_minutes (number) - Minutes to wait after call ends before sending SMS (minimum 6 for Twilio)
uncontained_calls
object
Calls where the AI agent transferred to a human agent or call center.Same configuration options as contained_calls.
call_center_calls
object
Calls that were routed directly to the call center without AI agent interaction.Same configuration options as contained_calls.

Sampling and volume control

Use the percentage and weekly_cap settings to control survey volume:
  • Percentage - Survey a sample of calls rather than 100% to reduce SMS costs and customer survey fatigue
  • Weekly cap - Set a maximum number of SMS messages per week to control costs and comply with messaging limits
Example configuration for 50% sampling with a weekly cap:
{
  "csat_sms": {
    "contained_calls": {
      "enabled": true,
      "percentage": 50,
      "weekly_cap": 500,
      "delay_minutes": 6
    }
  }
}

Implementing CSAT in your end function

To trigger the CSAT survey, add this code to your end function:
def end_function(conv: Conversation):
    # Your existing end function logic here
    
    # Trigger CSAT survey
    conv.trigger_csat_survey()
    
    return {}
The trigger_csat_survey() method will:
  • Play the lead-in message
  • Ask the survey question
  • Collect the customer’s rating
  • Store the result in analytics
The CSAT survey must be triggered from the end function. Calling it elsewhere may result in unexpected behavior.

Viewing CSAT data

Agent Studio dashboards

CSAT scores appear in your analytics dashboards within Agent Studio:
  1. Navigate to AnalyticsDashboards
  2. Select the CSAT dashboard
  3. View metrics including:
    • Average CSAT score
    • Score distribution (1-5)
    • CSAT trends over time
    • Response rate
    • CSAT correlation with containment and resolution rates

Conversation-level data

Individual CSAT scores are also visible in conversation records:
  1. Go to AnalyticsConversations
  2. Filter the conversations table to show only calls with CSAT responses
  3. Select a conversation
  4. View CSAT metrics in the conversation details including:
    • PLATFORM_CSAT_CALL_TYPE - Type of call (contained/uncontained/call_center)
    • PLATFORM_CSAT_RAW_RESP - Raw customer response (1-5 score)
    • PLATFORM_CSAT_RESPONSE_RECV - Whether a response was received (True/False)
    • PLATFORM_CSAT_SCORE - Processed CSAT score

Conversations API

CSAT scores are included as structured fields in Conversations API responses. You can export this data for:
  • Integration with your existing analytics or reporting tools
  • Building custom dashboards
  • Ingesting into client systems

Smart Analyst

You can query CSAT data using Smart Analyst for custom analysis and reporting. Smart Analyst provides access to all CSAT metrics and can generate custom reports.

Tracked metrics

The following metrics are automatically tracked for CSAT surveys:

Voice CSAT metrics

  • CSAT_OFFERED - Whether the survey was offered (boolean)
  • CSAT_ACCEPTED - Whether the customer accepted the survey (boolean)
  • CSAT_DENIED - Whether the customer declined the survey (boolean)
  • CSAT_SCORE - Customer rating (numeric 1-5)
  • CSAT_FREE_FEEDBACK - Verbatim customer feedback (string, if collected)
  • CSAT_COMPLETED - Whether the survey was completed (boolean)

SMS CSAT metrics

  • PLATFORM_CSAT_CALL_TYPE - Type of call (contained/uncontained/call_center)
  • PLATFORM_CSAT_RAW_RESP - Raw customer response (1-5 score)
  • PLATFORM_CSAT_RESPONSE_RECV - Whether a response was received (True/False)
  • PLATFORM_CSAT_SCORE - Processed CSAT score
These metrics are attached to the original call record and can be used for analysis and reporting.
For SMS CSAT, the system creates a separate SMS conversation ID (child conversation) that is linked to the original call via the parent_conversation_id metric. When multiple calls occur from the same number, the SMS response is recorded on the most recent call.

Rating scale

The standard CSAT scale is 1-5:
RatingInterpretation
5Very satisfied
4Satisfied
3Neutral
2Dissatisfied
1Very dissatisfied

CSAT calculation methods

CSAT scores can be calculated in different ways depending on your reporting needs: Standard average Simple average of all CSAT scores (e.g., 4.06 out of 5.0) Net Promoter style Some organizations calculate CSAT using a Net Promoter Score approach:
  • CSAT Score = (Promoters - Detractors) / Total responses
  • Promoters: Scores of 4-5
  • Detractors: Scores of 1-2
  • Neutral: Score of 3 (not included in calculation)
Example: If 70% of customers rate 4-5 and 10% rate 1-2, the CSAT score would be 60%.

Troubleshooting

  • Verify CSAT is enabled in Settings
  • Check that conv.trigger_csat_survey() is called in your end function
  • Ensure the end function is being executed (check conversation logs)
  • Simplify your survey messages
  • Make the scale clearer (explicitly state what 1 and 5 mean)
  • Consider the timing - surveys work best after successful resolutions
  • Allow up to 15 minutes for data to appear
  • Verify the conversation completed successfully
  • Check that the customer actually provided a rating
  • Verify the customer has a mobile phone number (not a landline)
  • Check that SMS consent has been obtained (required in US)
  • Ensure the delay_minutes is set to at least 6 minutes for Twilio
  • Verify the project is using GenAI or GenAI handoffs
  • Check that the weekly_cap has not been reached
  • SMS responses are automatically linked to the original call via parent_conversation_id
  • If multiple calls occur from the same number, the response is recorded on the most recent call
  • Check the SMS conversation record to verify the parent_conversation_id is set correctly
When implementing SMS CSAT surveys, you must comply with regional SMS regulations:

United States

In the US, you need explicit consent from customers to send SMS messages. This creates implementation challenges for calls routed directly to call centers, as consent must be collected before the call routing decision is made. Consider these approaches:
  • Collect SMS consent during IVR before routing
  • Only enable SMS CSAT for calls handled by your AI agent (where consent can be obtained during the conversation)
  • Obtain consent through other channels (web forms, account signup, etc.)

United Kingdom

UK regulations are more flexible for service-related SMS messages. You can send CSAT surveys without explicit prior consent if:
  • The message is service-related (following up on a call the customer just made)
  • You comply with basic GDPR requirements
  • You include opt-out instructions (e.g., “Reply STOP to opt out”)

Best practices

Regardless of region:
  • Always include clear opt-out instructions in your SMS template
  • Respect opt-out requests immediately
  • Keep messages concise and clearly service-related
  • Document your consent collection process
Consult with your legal team before implementing SMS CSAT to ensure compliance with local regulations in your operating regions.

Limitations

Voice CSAT limitations

  • The rating scale is fixed at 1-5
  • Only one CSAT survey can be triggered per conversation
  • Survey must be triggered from the end function

SMS CSAT limitations

  • Only available for GenAI projects
  • For hybrid projects, must use GenAI handoffs
  • Minimum delay of 6 minutes required for Twilio
  • SMS CSAT is not yet available for webchat channels
  • Requires customer to have a mobile phone number (landlines cannot receive SMS)
  • SMS responses must be received within the configured wait_for_response_hours window (default 12 hours)
For custom survey requirements or multi-question surveys, contact your PolyAI representative to discuss advanced options.

Coming soon

PolyAI is continuously improving CSAT capabilities. Upcoming features include:
  • Simplified configuration - Configure SMS CSAT surveys through the Agent Studio UI without editing JSON
  • Webchat support - CSAT surveys for webchat channels
  • Enhanced analytics - Additional reporting and insights for CSAT data
Interested in these features or have specific CSAT requirements? Contact your PolyAI representative to discuss your needs.