Skip to main content

Testing Guide

Before going live, thoroughly test your Exotel setup to ensure calls route correctly, SMS deliver as expected, webhooks fire reliably, and your integrations work end to end. This guide covers testing strategies for each channel.

Testing Checklist​

TestChannelPriorityStatus
API credential validationAllRequired
Outbound voice callVoiceRequired
Inbound voice callVoiceRequired
IVR flow navigationVoiceRequired
Call recording playbackVoiceRecommended
Outbound SMS deliverySMSRequired
DLT template validationSMSRequired (India)
Webhook deliveryAllRequired
CRM integrationAllIf applicable
Campaign test runCampaignsRecommended
Error handlingAllRecommended

Step 1: Validate API Credentials​

Before testing any feature, confirm your credentials work:

curl -v "https://<api_key>:<api_token>@api.exotel.com/v2/accounts/<account_sid>/calls?limit=1"

Expected result: HTTP 200 with a JSON response.

If you get HTTP 401, verify your credentials in Dashboard > Settings > API Settings.

Step 2: Test Outbound Voice Calls​

Make a Test Call via API​

Place a call from your ExoPhone to your own mobile number:

curl -X POST "https://<api_key>:<api_token>@api.exotel.com/v2/accounts/<account_sid>/calls/connect" \
-H "Content-Type: application/json" \
-d '{
"from": "+919876543210",
"to": "+919876543211",
"caller_id": "0XXXXXX4890",
"url": "http://my.exotel.com/<account_sid>/exoml/start_voice/<app_id>"
}'

Replace:

  • from: Your own phone number (the first person called)
  • to: Another phone number (the second person called)
  • caller_id: Your ExoPhone
  • url: Your call flow URL

What to Verify​

CheckExpected
Your phone rings firstYes
After you answer, the second number ringsYes
Both parties can hear each otherYes
Call appears in Dashboard > CallsYes
Call SID is returned in API responseYes

Make a Test Call via Dashboard​

  1. Go to the dashboard home screen
  2. Click Make a Call in the quick actions area
  3. Enter the destination number
  4. Select the ExoPhone to use
  5. Click Call

Step 3: Test Inbound Voice Calls​

Test Your Call Flow​

  1. Call your ExoPhone from your personal mobile phone
  2. Verify the call connects and your greeting plays
  3. If you have an IVR menu, test each key option:
KeyExpected BehaviorTest Result
1Routes to Sales number
2Routes to Support number
0Routes to Operator
No inputMenu replays or default action
Invalid key (e.g., 9)Error message plays, menu replays
  1. Verify call recording is working (if enabled)
  2. Test the voicemail fallback (let the call ring without answering)
tip

Test each path through your IVR flow, including edge cases like invalid inputs and timeouts. Call flows that work in simple cases often fail on unexpected inputs.

Step 4: Test SMS Delivery​

Send a Test SMS​

curl -X POST "https://<api_key>:<api_token>@api.exotel.com/v2/accounts/<account_sid>/sms/send" \
-H "Content-Type: application/json" \
-d '{
"to": "+919876543210",
"body": "This is a test message from Exotel. If you received this, your SMS setup is working correctly.",
"sender_id": "EXOTL",
"dlt_entity_id": "1234567890123456789",
"dlt_template_id": "9876543210123456789"
}'

What to Verify​

CheckExpected
API returns HTTP 200 with SmsSidYes
SMS received on your phoneYes
Correct Sender ID displayedYes
Message content matches templateYes
Delivery status updates via APIYes

Test DLT Template Matching​

If your SMS is rejected with a DLT error:

  1. Verify your DLT Entity ID is correct
  2. Verify your DLT Template ID is approved on the DLT portal
  3. Ensure the message body matches the template exactly (character by character)
  4. Check that the Sender ID is associated with this template
  5. Wait 24-48 hours for template propagation if recently approved

Step 5: Test Webhooks​

Set Up a Test Webhook Endpoint​

Use a webhook inspection tool to capture and examine payloads:

Option 1: webhook.site

  1. Visit webhook.site
  2. Copy the unique URL provided
  3. Use it as your callback URL in API requests

Option 2: ngrok (for local development)

  1. Start your local webhook handler on a port (e.g., 3000)
  2. Run: ngrok http 3000
  3. Use the ngrok HTTPS URL as your callback URL

Test Call Status Webhook​

Make an API call with a webhook URL:

curl -X POST "https://<api_key>:<api_token>@api.exotel.com/v2/accounts/<account_sid>/calls/connect" \
-H "Content-Type: application/json" \
-d '{
"from": "+919876543210",
"to": "+919876543211",
"caller_id": "0XXXXXX4890",
"url": "http://my.exotel.com/<account_sid>/exoml/start_voice/<app_id>",
"status_callback": "https://your-webhook-endpoint.com/callback"
}'

What to Verify​

CheckExpected
Webhook received within seconds of call status changeYes
Payload contains CallSid, Status, DurationYes
Your endpoint returns HTTP 200Yes
Multiple status updates received (ringing, in-progress, completed)Yes
warning

If your webhook endpoint is not publicly accessible (e.g., behind a firewall or VPN), Exotel cannot deliver webhooks. Use ngrok or a similar tool during development to expose your local server.

Step 6: Test Campaign (Small Batch)​

Before running a full campaign, test with a small contact list:

Create a Test Contact List​

number,first_name
+919876543210,Test User 1
+919876543211,Test User 2
+919876543212,Test User 3

Upload this as a test list and create a campaign with 3-5 contacts.

Campaign Test Settings​

SettingTest ValueProduction Value
Contacts3-5Full list
Throttle5 calls/min30-60 calls/min
Retries12-3
ScheduleImmediateBusiness hours
WebhooksTest endpointProduction endpoint

What to Verify​

CheckExpected
Campaign created successfullyYes
Calls placed to all test contactsYes
Retry logic works for unanswered callsYes
Webhooks fire for each callYes
Campaign report shows correct statsYes
Recording URLs work (if enabled)Yes

Step 7: Test Error Handling​

Deliberately trigger error conditions to verify your application handles them correctly:

Error ScenarioHow to TriggerExpected Handling
Invalid numberCall/SMS to +910000000000API returns error; your app logs it
Rate limit exceededSend 200+ requests in 1 minuteHTTP 429; your app implements backoff
Insufficient creditsReduce balance to zero (or test with known limit)API returns error; your app alerts
Invalid credentialsUse wrong API TokenHTTP 401; your app reports auth failure
Webhook timeoutConfigure a slow endpoint (> 5 sec response)Verify Exotel retries or skips

Step 8: Integration Testing​

If you integrated Exotel with a CRM or other tools:

Integration TestVerification
Click-to-call from CRMCall initiates and logs in CRM
Inbound call screen popCaller info displays in CRM
Call recording in CRMRecording link appears in call record
SMS sent from CRMSMS delivers and logs in CRM
Webhook data in CRMCall details create/update CRM records

Testing Environment Notes​

Trial Account Limitations​

FeatureTrial Limitation
Outbound callsLimited minutes
SMSLimited credits
Virtual numbersShared trial numbers
API rate limitsReduced
Call recordingLimited storage
WhatsAppNot available

Sandbox vs. Production​

EnvironmentAPI Base URLPurpose
Production (Singapore)api.exotel.comLive traffic
Production (India)api.in.exotel.comLive traffic
info

Exotel does not have a separate sandbox environment. Testing is done on the production API with your trial or production credentials. Use your trial account for initial testing, then switch to production credentials for final validation.

Common Test Issues​

IssueCauseSolution
Test call does not connectExoPhone not assigned to a flowAssign a call flow to your ExoPhone
SMS not deliveredDLT template not approvedCheck template status on DLT portal
Webhook not receivedEndpoint not publicly accessibleUse ngrok or similar tunneling tool
Call recordings missingRecording not enabled in call flowEnable recording in the Connect applet
API returns 404Wrong region URL or Account SIDUse the correct regional base URL

Next Steps​