Phone Calls
Learn to make your first phone call with a voice agent
Overview
AiCally makes it easy to build voice agents that can make and receive phone calls. In under 5 minutes, you'll create a voice assistant and start talking to it over the phone.
In this quickstart, you'll learn to:
- Create an assistant using the Dashboard or programmatically
- Set up a phone number
- Make your first inbound and outbound calls
Create your first voice assistant
-
Open the AiCally Dashboard
Go to dashboard.aically.com and log in to your account.
-
Create a new assistant
In the dashboard, create a new assistant using the customer support specialist template.
-
Configure your assistant
Set the first message and system prompt for your assistant:
First message:Hi there, this is Alex from TechSolutions customer support. How can I help you today?System prompt:You are Alex, a customer service voice assistant for TechSolutions. Your primary purpose is to help customers resolve issues with their products, answer questions about services, and ensure a satisfying support experience. - Sound friendly, patient, and knowledgeable without being condescending - Use a conversational tone with natural speech patterns - Speak with confidence but remain humble when you don't know something - Demonstrate genuine concern for customer issues
Create the assistant
curl -X PATCH https://app.aically.com/api/assistants/id \
-H "Authorization: Bearer cc6b2716-7ec4-464b-a790-8652b81e1756" \
-H "Content-Type: application/json" \
-d '{
"transcriber": {
"provider": "deepgram",
"model": "nova-3",
"language": null,
"smartFormat": false,
"mipOptOut": false,
"numerals": false,
"confidenceThreshold": 0,
"keywords": [],
"keyterm": [],
"endpointing": 0,
"fallbackPlan": {
"transcribers": []
}
},
"model": {
"provider": "openai",
"messages": [],
"tools": [],
"toolIds": [],
"knowledgeBase": {
"provider": "custom-knowledge-base",
"server": {}
},
"knowledgeBaseId": "",
"fallbackModels": null,
"toolStrictCompatibilityMode": null,
"temperature": 0,
"maxTokens": 0,
"emotionRecognitionEnabled": false,
"numFastTurns": 0
},
"voice": {
"provider": "deepgram",
"cachingEnabled": true,
"model": null,
"mipOptOut": false,
"chunkPlan": {},
"fallbackPlan": {
"voices": []
}
},
"firstMessage": "",
"firstMessageInterruptionsEnabled": false,
"firstMessageMode": null,
"clientMessages": null,
"serverMessages": null,
"maxDurationSeconds": 0,
"backgroundSound": null,
"modelOutputInMessagesEnabled": false,
"transportConfigurations": [],
"observabilityPlan": {
"provider": "langfuse",
"tags": []
},
"credentials": [],
"hooks": [],
"name": "",
"voicemailMessage": "",
"endCallMessage": "",
"endCallPhrases": [],
"compliancePlan": {
"hipaaEnabled": false,
"pciEnabled": false
},
"metadata": {},
"backgroundSpeechDenoisingPlan": {
"smartDenoisingPlan": {
"enabled": false
},
"fourierDenoisingPlan": {
"enabled": false,
"mediaDetectionEnabled": true,
"staticThreshold": -35,
"baselineOffsetDb": -15,
"windowSizeMs": 3000,
"baselinePercentile": 85
}
},
"analysisPlan": {
"minMessagesThreshold": 0,
"summaryPlan": {
"messages": [],
"enabled": false,
"timeoutSeconds": 0
},
"structuredDataPlan": {
"messages": [],
"enabled": false,
"schema": {},
"timeoutSeconds": 0
},
"structuredDataMultiPlan": [],
"successEvaluationPlan": {
"rubric": null,
"messages": [],
"enabled": false,
"timeoutSeconds": 0
},
"outcomeIds": []
},
"artifactPlan": {
"recordingEnabled": false,
"recordingFormat": null,
"videoRecordingEnabled": false,
"pcapEnabled": false,
"pcapS3PathPrefix": "",
"transcriptPlan": {},
"recordingPath": ""
},
"startSpeakingPlan": {
"waitSeconds": 0,
"smartEndpointingPlan": {},
"customEndpointingRules": [],
"transcriptionEndpointingPlan": {
"onPunctuationSeconds": 0,
"onNoPunctuationSeconds": 0,
"onNumberSeconds": 0
},
"smartEndpointingEnabled": false
},
"stopSpeakingPlan": {
"numWords": 0,
"voiceSeconds": 0,
"backoffSeconds": 0,
"acknowledgementPhrases": [],
"interruptionPhrases": []
},
"monitorPlan": {
"listenEnabled": false,
"listenAuthenticationEnabled": false,
"controlEnabled": false,
"controlAuthenticationEnabled": false
},
"credentialIds": [],
"server": {},
"keypadInputPlan": {
"enabled": false,
"timeoutSeconds": 0,
"delimiters": null
}
}'
Set up a phone number
-
1. Create a phone number
In the Phone Numbers tab, create a free US phone number or import an existing number from another provider.
For international calls, you'll need to import a number from Twilio or another provider. -
2. Attach your assistant to the number
Select your assistant in the inbound settings for your phone number. When this number is called, your assistant will automatically answer.
Create the assistant
curl -X POST https://app.aically.com/api/phone-numbers \
-H "Authorization: Bearer cc6b2716-7ec4-464b-a790-8652b81e1756" \
-H "Content-Type: application/json" \
-d '{
"provider": "twilio",
"number": "",
"twilioAccountSid": "",
"fallbackDestination": {
"type": "number",
"number": ""
},
"hooks": [],
"smsEnabled": true,
"twilioAuthToken": "",
"twilioApiKey": "",
"twilioApiSecret": "",
"name": "",
"assistantId": "",
"workflowId": "",
"squadId": "",
"server": {}
}'
Make your first calls
-
1. Test inbound calling
Call the phone number you just created. Your assistant will pick up and start the conversation with your configured first message.
-
2. Try outbound calling
Using the Dashboard:
In the dashboard, go to the outbound calls section:
- Enter your own phone number as the target
- Select your assistant
- Click "Make Call"
-
3. Test web calling (optional)
You can also test your assistant directly in the dashboard by clicking the call button—no phone number required.
curl -X POST https://app.aically.com/api/calls \
-H "Authorization: Bearer cc6b2716-7ec4-464b-a790-8652b81e1756" \
-H "Content-Type: application/json" \
-d '{
"phoneNumberId": "",
"schedulePlan": {
"earliestAt": ""
},
"assistantId": "",
"customer": {
"number": "",
"numberE164CheckEnabled": true,
"assistantOverrides": {
"transcriber": {
"provider": "assembly-ai"
},
"model": {
"provider": "anthropic"
},
"voice": {
"provider": "azure"
},
"firstMessage": "",
"firstMessageInterruptionsEnabled": false,
"firstMessageMode": null,
"voicemailDetection": {
"provider": "google"
},
"clientMessages": null,
"serverMessages": null,
"maxDurationSeconds": 0,
"backgroundSound": null,
"modelOutputInMessagesEnabled": false,
"transportConfigurations": [],
"observabilityPlan": {
"provider": "langfuse",
"tags": []
},
"credentials": [],
"hooks": [],
"variableValues": {},
"name": "",
"voicemailMessage": "",
"endCallMessage": "",
"endCallPhrases": [],
"compliancePlan": {},
"metadata": {},
"backgroundSpeechDenoisingPlan": {},
"analysisPlan": {},
"artifactPlan": {},
"startSpeakingPlan": {},
"stopSpeakingPlan": {},
"monitorPlan": {},
"credentialIds": [],
"server": {},
"keypadInputPlan": {}
}
}
}'
Next steps
Now that you have a working voice assistant:
- Customize the conversation: Update the system prompt to match your use case
- Add tools: Connect your assistant to external APIs and databases
- Configure models: Try different speech and language models for better performance
- Scale with APIs: Use AiCally's REST API to create assistants programmatically