> For the complete documentation index, see [llms.txt](https://docs.maiagent.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.maiagent.ai/maiagent-user-guide/en/serve/voicecs/call-center.md).

# Phone Customer Service (Call Center)

Connect your phone lines to an AI assistant: configure SIP trunks and phone numbers, assign an AI assistant to answer calls, and use call history to view records and hang up active calls.

Call Center lets AI assistants answer phone calls directly. Connect SIP lines from your carrier or your own PBX (private branch exchange) to MaiAgent, then assign an AI assistant to each number. When a customer calls that number, the AI assistant responds by voice in real time, and the speech during the call is recorded as text in the conversation. This page is for administrators who configure phone lines and support managers who need to review calls.

For how an AI assistant speaks (voice mode, voice selection, and interruption controls), see [Voice Agent](/maiagent-user-guide/en/serve/voicecs/voice-agent.md). For use cases such as IVR, call summaries, and quality reviews, see [Voice Support](/maiagent-user-guide/en/serve/voicecs.md).

## How It Works <a href="#how-it-works" id="how-it-works"></a>

```
A customer calls the Acme support hotline
   → The carrier / PBX sends the incoming call to MaiAgent through a SIP trunk
   → The dialed number identifies the assigned AI assistant, which answers by voice
   → The call ends: a record is saved in call history, and a transcript is saved in the conversation
```

A **SIP trunk** is a phone line that stores the carrier's connection credentials (inbound authentication and outbound address). **Numbers** belong to a trunk and determine which AI assistant answers. Numbers on the same trunk share credentials and synchronization status.

## Prerequisites <a href="#prerequisites" id="prerequisites"></a>

| What You Need                             | Description                                                                                                                                                                                                                                                                         | Who Handles It                       |
| ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| Call Center enabled for your organization | Once enabled, <mark style="color:blue;">Call Center</mark> appears in the left menu and is also listed under <mark style="color:blue;">Advanced Features</mark> in the [Organization Overview](/maiagent-user-guide/en/org/organization-overview.md#advanced-features)              | Contact your MaiAgent representative |
| MaiAgent's SIP server address             | The address to which your carrier or PBX sends incoming calls, provided by MaiAgent                                                                                                                                                                                                 | Contact your MaiAgent representative |
| SIP line                                  | Provided by your carrier or your own PBX. Incoming calls must support authentication using a SIP username and password or a fixed source IP. To let AI make outbound calls, you also need the carrier's SIP endpoint (for example, `sip.carrier.com:5060`) and outbound credentials | Your company's IT team / carrier     |
| Phone number                              | E.164 format (for example, `+886912345678`) or a SIP user part, up to 32 characters. Digits, letters, and `+ * # . _ -` are allowed                                                                                                                                                 | Your company                         |
| AI assistant with voice enabled           | In the AI assistant settings, turn on <mark style="color:blue;">Enable Voice Agent</mark> under <mark style="color:blue;">Voice Agent Settings</mark> and complete the voice configuration                                                                                          | Administrator                        |

## Who Can Use It <a href="#permissions" id="permissions"></a>

Call Center uses role permissions to control access. See [Role and Permission Management](/maiagent-user-guide/en/org/roles/role-permission.md) for configuration. Organization owners can use all features.

| Permission                                              | What It Allows                                                                                                                                                                   |
| ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <mark style="color:blue;">Call Center Permission</mark> | Displays <mark style="color:blue;">Call Center</mark> in the left menu; the parent permission for the two permissions below                                                      |
| <mark style="color:blue;">Call History</mark>           | Opens <mark style="color:blue;">Call History</mark> to view call records and hang up active calls                                                                                |
| <mark style="color:blue;">Inbound Call Settings</mark>  | Opens <mark style="color:blue;">SIP Trunks</mark> and <mark style="color:blue;">Number Management</mark> to add, edit, and delete lines and numbers, and initiate outbound tests |

{% hint style="info" %}
These permissions do not appear in role permission settings until Call Center is enabled for the organization. Opening a conversation from call history takes you to the <mark style="color:blue;">All Conversations</mark> page, which also requires <mark style="color:blue;">All Conversations Permission</mark>.
{% endhint %}

## Where to Find It <a href="#where-to-find" id="where-to-find"></a>

Click <mark style="color:blue;">Call Center</mark> in the left menu. It contains three pages (shown according to your permissions): <mark style="color:blue;">Call History</mark>, <mark style="color:blue;">SIP Trunks</mark>, and <mark style="color:blue;">Number Management</mark>.

## Setup Flow <a href="#setup-flow" id="setup-flow"></a>

{% stepper %}
{% step %}

### Add a SIP Trunk <a href="#step-add-trunk" id="step-add-trunk"></a>

Go to <mark style="color:blue;">SIP Trunks</mark> to create a line and enter the inbound authentication method. If you need outbound calls, fill in the outbound settings as well. See [SIP Trunks](#sip-trunks) below.
{% endstep %}

{% step %}

### Add a Number and Assign an AI Assistant <a href="#step-add-number" id="step-add-number"></a>

Go to <mark style="color:blue;">Number Management</mark> to add a number, then select its trunk and the AI assistant that will answer calls. See [Number Management](#phone-numbers) below.
{% endstep %}

{% step %}

### Wait for Synchronization <a href="#step-wait-sync" id="step-wait-sync"></a>

After you save, the system synchronizes the settings to the voice server in the background, and the page updates automatically. Incoming calls can be answered once <mark style="color:blue;">Sync Status</mark> changes from <mark style="color:blue;">Syncing</mark> to <mark style="color:blue;">Synced</mark>.
{% endstep %}

{% step %}

### Make a Test Call <a href="#step-test-call" id="step-test-call"></a>

Call the number from a mobile phone to confirm that the AI assistant answers, then go to <mark style="color:blue;">Call History</mark> to confirm that a record appears for the call.
{% endstep %}
{% endstepper %}

## SIP Trunks <a href="#sip-trunks" id="sip-trunks"></a>

Click <mark style="color:blue;">Add Trunk</mark> in the upper right, fill in the <mark style="color:blue;">Add SIP Trunk</mark> dialog, then click <mark style="color:blue;">Save</mark>:

| Field                                                                                                                                | Description                                                                                                                                                                                                                                                                                                                  |
| ------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <mark style="color:blue;">Name</mark>                                                                                                | Required. Identifies the line, for example, “Acme Headquarters Line”                                                                                                                                                                                                                                                         |
| <mark style="color:blue;">Media Encryption</mark>                                                                                    | Encryption policy for call audio: <mark style="color:blue;">Disabled (unencrypted RTP only)</mark>, <mark style="color:blue;">Allowed (encrypt if the other party supports it; otherwise use unencrypted audio)</mark> (default), or <mark style="color:blue;">Required (always encrypt; reject calls if unsupported)</mark> |
| <mark style="color:blue;">Authentication Username</mark>, <mark style="color:blue;">Authentication Password</mark>                   | Under <mark style="color:blue;">Inbound Security Settings</mark>: SIP credentials used by the carrier or PBX when sending incoming calls                                                                                                                                                                                     |
| <mark style="color:blue;">Allowed Source Addresses</mark>                                                                            | Under <mark style="color:blue;">Inbound Security Settings</mark>: IP addresses or CIDR ranges allowed to send incoming calls (for example, `192.0.2.10/32`). Press Enter after entering each address to add it                                                                                                               |
| <mark style="color:blue;">Enable Outbound Calls</mark>                                                                               | Under <mark style="color:blue;">Outbound Settings</mark>. Off by default (the trunk only receives incoming calls); enabling it displays the fields below                                                                                                                                                                     |
| <mark style="color:blue;">Outbound Address</mark>                                                                                    | Required when outbound calls are enabled. The carrier's SIP endpoint                                                                                                                                                                                                                                                         |
| <mark style="color:blue;">Outbound Transport Protocol</mark>                                                                         | <mark style="color:blue;">Auto (let the server decide)</mark> (default), <mark style="color:blue;">UDP</mark>, <mark style="color:blue;">TCP</mark>, or <mark style="color:blue;">TLS (encrypted signaling)</mark>. Use TCP or TLS if signaling packets exceed the UDP limit                                                 |
| <mark style="color:blue;">Outbound Authentication Username</mark>, <mark style="color:blue;">Outbound Authentication Password</mark> | Fill in when the carrier requires outbound authentication                                                                                                                                                                                                                                                                    |

{% hint style="warning" %}
You must configure at least one of the following: an authentication username and password, or allowed source addresses. Otherwise, you cannot save. The system does not accept incoming calls from arbitrary sources. You can also configure both.
{% endhint %}

**Password fields**: Passwords are stored encrypted when created and cannot be retrieved later. When editing, existing passwords appear as <mark style="color:blue;">Configured</mark>:

* Click <mark style="color:blue;">Change Password</mark> to enter a new password. Leave it blank and save to keep the original password, or click <mark style="color:blue;">Cancel Change</mark> to discard the change.
* Click <mark style="color:blue;">Clear Password</mark> to remove the password when you save. Before saving, click <mark style="color:blue;">Undo</mark> to cancel.

The list shows each trunk's <mark style="color:blue;">Outbound Calls</mark> toggle and <mark style="color:blue;">Sync Status</mark>. The actions column provides:

* <mark style="color:blue;">Edit</mark>: Modify the fields above. Saving triggers synchronization again.
* <mark style="color:blue;">Resync</mark>: Manually synchronize the settings again. Use this when the status is <mark style="color:blue;">Sync Failed</mark>.
* <mark style="color:blue;">Delete</mark>: Also removes the associated connection resources. You cannot delete a trunk that still has numbers. First delete those numbers in <mark style="color:blue;">Number Management</mark>.

## Number Management <a href="#phone-numbers" id="phone-numbers"></a>

Click <mark style="color:blue;">Add Number</mark> in the upper right, fill in the <mark style="color:blue;">Add SIP Number</mark> dialog, then click <mark style="color:blue;">Save</mark>:

| Field                                                  | Description                                                                                                                                                                                                                                                                                                                            |
| ------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <mark style="color:blue;">Trunk Type</mark>            | <mark style="color:blue;">Self-hosted SIP</mark>: Use a line you created in <mark style="color:blue;">SIP Trunks</mark>; <mark style="color:blue;">Twilio</mark>: Use a number assigned to your organization by MaiAgent                                                                                                               |
| <mark style="color:blue;">SIP Trunk</mark>             | Appears when Self-hosted SIP is selected. Select the line the number belongs to. You cannot save if no trunk has been created                                                                                                                                                                                                          |
| <mark style="color:blue;">Number</mark>                | For Self-hosted SIP, enter it manually; see [Prerequisites](#prerequisites) for the format. For Twilio, select an assigned, unused number from the dropdown. If “No Twilio numbers have been assigned to this organization. Please contact your administrator.” appears, contact your MaiAgent representative to request an assignment |
| <mark style="color:blue;">Assigned AI Assistant</mark> | The AI assistant that answers calls to this number. Enter a name to search                                                                                                                                                                                                                                                             |

{% hint style="warning" %}

* The number must exactly match the called number sent by the carrier or PBX (for example, include the same `+886` country code) so the system can find the corresponding AI assistant. Each number can only be registered once on the platform.
* The assigned AI assistant must have <mark style="color:blue;">Enable Voice Agent</mark> turned on. Otherwise, incoming calls are hung up immediately and recorded as <mark style="color:blue;">Failed</mark> in call history.
  {% endhint %}

After a number is created, its <mark style="color:blue;">Trunk Type</mark>, <mark style="color:blue;">SIP Trunk</mark>, and <mark style="color:blue;">Number</mark> cannot be changed. <mark style="color:blue;">Edit</mark> only lets you change the <mark style="color:blue;">Assigned AI Assistant</mark>. The newly assigned AI assistant answers the next incoming call. To change the number, <mark style="color:blue;">Delete</mark> it first, then add a new one. Deleting a number also removes its associated voice resources.

The list includes <mark style="color:blue;">Number</mark>, <mark style="color:blue;">SIP Trunk</mark>, <mark style="color:blue;">Trunk Type</mark>, <mark style="color:blue;">Assigned AI Assistant</mark> (shown as <mark style="color:blue;">Unassigned</mark> if none is assigned), <mark style="color:blue;">Sync Status</mark>, <mark style="color:blue;">Outbound Calls</mark>, and <mark style="color:blue;">Last Updated</mark>. A number inherits the sync status and outbound toggle from its trunk. Click the trunk name to open its editing dialog directly.

The greeting played when the AI assistant answers uses the <mark style="color:blue;">Voice Greeting</mark> under <mark style="color:blue;">Interaction Settings</mark> for that AI assistant's API conversation platform (phone calls use the default greeting, without selecting by language). See [Interaction Settings](/maiagent-user-guide/en/serve/platform-settings/interaction-settings.md#voice-greeting) for configuration.

### Outbound Test <a href="#outbound-test" id="outbound-test"></a>

For numbers whose trunk has <mark style="color:blue;">Enable Outbound Calls</mark> turned on and a status of <mark style="color:blue;">Synced</mark>, you can have the AI assistant make a call:

1. In the number's actions column, click the phone icon (<mark style="color:blue;">Call</mark>).
2. In the <mark style="color:blue;">Outbound Test</mark> dialog, enter the recipient's number (E.164 or SIP user part) in <mark style="color:blue;">Number to Call</mark>, then click <mark style="color:blue;">Call</mark>.
3. When “Outbound call initiated” appears, the call is listed in <mark style="color:blue;">Call History</mark> with the direction <mark style="color:blue;">Outbound</mark>.

The number must be assigned to an AI assistant with voice enabled to make outbound calls. Otherwise, “Failed to initiate outbound call” appears.

## Call History <a href="#call-history" id="call-history"></a>

Lists calls for all AI assistants in the organization, with the newest first.

| Field                                          | Content                                                                                                        |
| ---------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| ID                                             | Call ID, which you can copy with one click                                                                     |
| <mark style="color:blue;">AI Assistant</mark>  | The AI assistant handling this call                                                                            |
| <mark style="color:blue;">Direction</mark>     | <mark style="color:blue;">Inbound</mark> or <mark style="color:blue;">Outbound</mark>                          |
| <mark style="color:blue;">Phone Number</mark>  | The other party's number: the caller's number for inbound calls, or the dialed number for outbound calls       |
| <mark style="color:blue;">Status</mark>        | See the table below                                                                                            |
| <mark style="color:blue;">Call Duration</mark> | Time from connection to end, displayed as “minutes:seconds”, or “hours:minutes:seconds” for calls over an hour |
| <mark style="color:blue;">Call Time</mark>     | The time the call was created                                                                                  |

At the top, use <mark style="color:blue;">Search ID / Assistant Name / Phone Number</mark> and filter by <mark style="color:blue;">All Assistants</mark>, <mark style="color:blue;">All Directions</mark>, and <mark style="color:blue;">All Statuses</mark>. The status filter only offers statuses for ended calls.

| Status                                       | Meaning                                                                                                          |
| -------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| <mark style="color:blue;">Initiated</mark>   | An outbound call has been placed, but the recipient has not answered yet                                         |
| <mark style="color:blue;">In Progress</mark> | The call is ongoing                                                                                              |
| <mark style="color:blue;">Completed</mark>   | The call ended after connecting                                                                                  |
| <mark style="color:blue;">Busy</mark>        | The recipient declined the call                                                                                  |
| <mark style="color:blue;">No Answer</mark>   | The recipient did not answer or could not be reached                                                             |
| <mark style="color:blue;">Failed</mark>      | The call could not connect due to a line error, no AI assistant available to answer the number, or another issue |
| <mark style="color:blue;">Canceled</mark>    | The call was hung up before connecting                                                                           |

### View Call Content <a href="#view-conversation" id="view-conversation"></a>

Click the conversation icon (<mark style="color:blue;">View Conversation</mark>) in the actions column to open <mark style="color:blue;">All Conversations</mark> at this call. Each call is a separate conversation under the AI assistant's API conversation platform. Messages transcribed from speech have a microphone icon; hover over it to display <mark style="color:blue;">Voice Transcript</mark>. This button is unavailable for calls without a conversation (for example, calls hung up immediately because no AI assistant was assigned to the number).

The system also creates (or reuses) a <mark style="color:blue;">Contact</mark> based on the other party's number, named “SIP: number”. Previous calls from the same customer are grouped under the same contact. See [Contacts](/maiagent-user-guide/en/serve/contact.md).

### Hang Up an Active Call <a href="#hang-up" id="hang-up"></a>

While a call is ongoing, a red phone icon (<mark style="color:blue;">Hang Up</mark>) appears in the actions column. Click it, then click <mark style="color:blue;">Hang Up</mark> in the <mark style="color:blue;">Hang Up Call</mark> confirmation dialog. The call ends immediately and cannot be resumed. Connected calls are marked <mark style="color:blue;">Completed</mark>; calls that have not connected are marked <mark style="color:blue;">Canceled</mark>.

If “Failed to hang up. Please try again later” appears, the voice server is temporarily unreachable. The call record stays unchanged; try again later.

## When Calls End Automatically <a href="#automatic-end" id="automatic-end"></a>

* The customer or other party hangs up.
* The dialed number has no assigned AI assistant, or the assigned AI assistant does not have voice enabled: the system hangs up immediately and records the call as <mark style="color:blue;">Failed</mark>.
* The dialed number is not in <mark style="color:blue;">Number Management</mark>: the system hangs up immediately without leaving a call record.
* Call duration or ringing time reaches the platform's configured limit: the system ends the call automatically. Contact your MaiAgent representative to confirm these limits.

## FAQ <a href="#faq" id="faq"></a>

**Q: Why doesn't AI answer incoming calls?**

A: Check the following in order: (1) Is the number's <mark style="color:blue;">Sync Status</mark> <mark style="color:blue;">Synced</mark>? (2) Is the number assigned to an AI assistant with <mark style="color:blue;">Enable Voice Agent</mark> turned on? (3) Search for the call in <mark style="color:blue;">Call History</mark>. A <mark style="color:blue;">Failed</mark> status usually indicates an issue with (2). If no record appears, the incoming call did not match any registered number. Confirm that the number sent by the carrier or PBX exactly matches the <mark style="color:blue;">Number</mark> field and that the line points to MaiAgent's SIP server. If the issue persists, contact your MaiAgent representative.

**Q: What should I do if the sync status is “Sync Failed”?**

A: The system retries automatically several times before showing <mark style="color:blue;">Sync Failed</mark>. Go to <mark style="color:blue;">SIP Trunks</mark>, check the settings, and click <mark style="color:blue;">Resync</mark>. If it continues to fail, contact your MaiAgent representative.

**Q: Why can't I click a number's “Call” button?**

A: Hovering over it displays “Enable outbound calls and complete synchronization first”. Go to <mark style="color:blue;">SIP Trunks</mark>, edit the number's trunk, turn on <mark style="color:blue;">Enable Outbound Calls</mark>, and fill in the <mark style="color:blue;">Outbound Address</mark>. You can call once the sync status becomes <mark style="color:blue;">Synced</mark>.

**Q: Can I transfer a call to a human support agent?**

A: The Call Center settings page currently has no option to transfer calls to a human or an extension. If you need to transfer calls to an existing contact center system, contact your MaiAgent representative to discuss integration options.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.maiagent.ai/maiagent-user-guide/en/serve/voicecs/call-center.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
