This guide details how to set up and manage inbound and outbound call functionality within Squads, leveraging AI assistants.

Key Concepts

  • Transient Assistant: A temporary assistant configuration passed directly in the request payload.
  • Assistant ID: A unique identifier referring to a pre-existing assistant configuration.
When using Assistant IDs, ensure the name property in the payload matches the associated assistant’s name accurately.

Inbound Call Configuration

When your server receives a request of type assistant-request, respond with a JSON payload structured as follows:

{
    "squad": {
        "members": [
            {
                "assistant": { 
                    "name": "Emma", 
                    "model": { "model": "gpt-4o", "provider": "openai" },
                    "voice": { "voiceId": "emma", "provider": "azure" },
                    "transcriber": { "provider": "deepgram" },
                    "firstMessage": "Hi, I am Emma, what is your name?",
                    "firstMessageMode": "assistant-speaks-first"
                },
                "assistantDestinations": [ 
                    {
                        "type": "assistant",
                        "assistantName": "Mary", 
                        "message": "Please hold on while I transfer you to our appointment booking assistant Mary.",
                        "description": "Transfer the user to the appointment booking assistant."
                    }
                ]
            },
            {
                "assistantId": "your-assistant-id" 
            }
        ]
    }
}

In this example:

  • The first members entry is a transient assistant (full configuration provided).
  • The second members entry uses an Assistant ID.
  • assistantDestinations defines how to transfer the call to another assistant.

Outbound Call Configuration

To initiate an outbound call, send a POST request to the API endpoint /call/phone with a JSON payload structured as follows:

{
    "squad": {
        "members": [
            {
                "assistant": { 
                    "name": "Emma", 
                    "model": { "model": "gpt-4o", "provider": "openai" },
                    "voice": { "voiceId": "emma", "provider": "azure" },
                    "transcriber": { "provider": "deepgram" },
                    "firstMessage": "Hi, I am Emma, what is your name?",
                    "firstMessageMode": "assistant-speaks-first"
                },
                "assistantDestinations": [ 
                    {
                        "type": "assistant",
                        "assistantName": "Mary", 
                        "message": "Please hold on while I transfer you to our appointment booking assistant Mary.",
                        "description": "Transfer the user to the appointment booking assistant."
                    }
                ]
            },
            {
                "assistantId": "your-assistant-id" 
            }
        ]
    },
    "customer": {
        "number": "your-phone-number" 
    },
    "phoneNumberId": "your-phone-number-id" 
}

Key points:

  • customer.number is the phone number to call.
  • phoneNumberId is a unique identifier for the phone number (obtain this from your provider).