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

  1. Open the AiCally Dashboard

    Go to dashboard.aically.com and log in to your account.

  2. Create a new assistant

    In the dashboard, create a new assistant using the customer support specialist template.

  3. 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. 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. 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. 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. 2. Try outbound calling

    Using the Dashboard:

    In the dashboard, go to the outbound calls section:

    1. Enter your own phone number as the target
    2. Select your assistant
    3. Click "Make Call"
  3. 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
Ready to integrate voice into your application? Check out the Web integration guide to embed voice calls directly in your app.