# Get Agent Status

Get Agent Status is one of the Internal Data Ops operations. It checks where a specific agent stands in a specific queue right now, whether they are logged in, on a call, or ringing, and saves that answer in variables. Later components can read those variables to decide how the call should proceed.

## What it does

The component reports three things about the agent you point it at:

- The agent's current status (for example, logged out or paused).
- Whether the agent is on a call.
- Whether the agent's extension is ringing.

You can name the queue and the agent directly, or supply an expression so the target is chosen while the call runs. Either way, the results land in variables you can feed into a following component or test in a **Condition**.

## Configure the component

1. Drag the **Internal Data Ops** component onto the canvas, then click it to open its settings.

   ![The Internal Data Ops block placed on the call flow canvas](/images/pbx/developer-component-cfd.png)

2. In the **Component Type** drop-down list, choose **Get Agent Status**.

   ![Choosing Get Agent Status from the Component Type list](/images/pbx/get-agent-status-cfd.png)

3. Point the component at a queue using one of these methods:

   ![Selecting the target queue for the lookup](/images/pbx/developer-select-queue-cfd.png)

   - **Queue**: pick a queue from the drop-down list.
   - **Expression**: click the *fx* icon and enter an expression to resolve the queue at runtime.

     ![Entering an expression that resolves the target queue](/images/pbx/get-queue-agent-expression.png)

     For example, `$UserInput1.userInput` uses the queue number the caller keyed in.

   :::note
   For the variables and functions you can use in an expression, see [Variables and Functions in Cloud Voice Expression](/pbx/call-flow-designer-guide/constants-and-variables-in-cloud-voice-cfd-expression/).
   :::

4. Point the component at an agent using one of these methods:

   ![Selecting the target agent for the lookup](/images/pbx/developer-select-agent-cfd.png)

   - **Agent**: pick an agent from the drop-down list.
   - **Expression**: click the *fx* icon and enter an expression to resolve the agent at runtime.

     ![Entering an expression that resolves the target agent](/images/pbx/get-agent-expression.png)

     For example, `$Session.ani` uses the caller's own number (ANI, Automatic Number Identification, which is what shows as the Caller ID) as the agent to look up.

   :::note
   For the variables and functions you can use in an expression, see [Variables and Functions in Cloud Voice Expression](/pbx/call-flow-designer-guide/constants-and-variables-in-cloud-voice-cfd-expression/).
   :::

5. Click **Confirm** in the bottom-right corner.

## Variables

When you add a Get Agent Status component, it writes the agent's state into the variables below. Read them from any expression-aware component, **Condition**, for instance, to act on what the lookup returned.

:::note
A call flow can hold more than one Get Agent Status component, so each is numbered in the order you add it (Get Agent Status 1, Get Agent Status 2, and so on). Include the matching index in the variable name so you read from the right component.
:::

| Variable | Type | Description | Example |
|----------|------|-------------|---------|
| `$GetAgentStatus{index}.currentProfile` | String | The name of the agent's current status, with any extra detail. | `"Log Out"` |
| `$GetAgentStatus{index}.isInCall` | Boolean | Whether the agent is on a call. `True` means on a call; `False` means not. | `True` |
| `$GetAgentStatus{index}.isInRing` | Boolean | Whether the agent's extension is ringing. `True` means ringing; `False` means not. | `True` |

:::caution
When you test `currentProfile` in a function or condition, match one of these exact status constants. The valid set depends on whether the agent is static or dynamic, so testing for a value that agent type never reports (for example, `"Log In"` against a static agent) simply never matches, and the call is routed down the wrong branch:

- **Static agents**: `"Pause{pause_reason}"` or `"Unpause"`.
- **Dynamic agents**: `"Log In"`, `"Log Out"`, or `"Pause{pause_reason}"`.
:::

## What it can connect to

A Get Agent Status component leads to **exactly one** downstream component. Any of the following can follow it:

| Component | Purpose |
|-----------|---------|
| [Prompt](/pbx/call-flow-designer-guide/prompt/) | Play an audio file or a text-to-speech message to the caller. |
| [Business Hours](/pbx/call-flow-designer-guide/business-hours/) | Route the call to different destinations depending on the time of day. |
| [Menu](/pbx/call-flow-designer-guide/menu/) | Offer callers a set of options and route them by the DTMF (Dual-Tone Multi-Frequency, the tone a phone keypad sends when a key is pressed) key they press. |
| [User Input](/pbx/call-flow-designer-guide/user-input/) | Collect DTMF digits from the caller, usually paired with **Condition** to act on what was entered. |
| [Language](/pbx/call-flow-designer-guide/language/) | Change the system prompt language for the rest of the flow. |
| [Record](/pbx/call-flow-designer-guide/record/) | Start recording once the caller connects to another party, with optional notification prompts, or turn recording off for a call that would otherwise be recorded. |
| [Dial by Number](/pbx/call-flow-designer-guide/dial-by-number/) | Let callers dial a number directly to reach their destination. |
| [Dial by Name](/pbx/call-flow-designer-guide/dial-by-name/) | An end component that lets callers reach a user by typing the first three letters of their name. |
| [Transfer](/pbx/call-flow-designer-guide/transfer/) | An end component that sends the caller to a chosen destination, with optional prompts announcing the transfer. |
| [Hang Up Call](/pbx/call-flow-designer-guide/hang-up-call/) | An end component that disconnects the call. |
| [Condition](/pbx/call-flow-designer-guide/condition/) | Route the call based on logical expressions. |
| [Loop](/pbx/call-flow-designer-guide/loop/) | Repeat a group of components a set number of times or until a condition is met. |
| Internal Data Ops | Read from and write to the Cloud Voice system's own database. See [Get Extension Presence Status](/pbx/call-flow-designer-guide/get-extension-presence-status/), [Set Extension Presence Status](/pbx/call-flow-designer-guide/set-extension-presence-status/), [Get Queue Agent](/pbx/call-flow-designer-guide/get-queue-agent/), [Get Queue Info](/pbx/call-flow-designer-guide/get-queue-info/), [Get Agent Status](/pbx/call-flow-designer-guide/get-agent-status/), [Set Agent Status](/pbx/call-flow-designer-guide/set-agent-status/), [Get System Info](/pbx/call-flow-designer-guide/get-system-info/), [Get System Capacity](/pbx/call-flow-designer-guide/get-system-capacity/), [Get Extension Info](/pbx/call-flow-designer-guide/get-extension-info/), and [Get Company Contact Info](/pbx/call-flow-designer-guide/get-company-contact-info/). |
| [Email Sender](/pbx/call-flow-designer-guide/email-sender/) | Send an email for real-time notifications, alerts, or user-specific information. |
| [Database Access](/pbx/call-flow-designer-guide/database-access/) | Run a SQL operation against an external database during the call flow. |
| [HTTP Request](/pbx/call-flow-designer-guide/http-request/) | Send an HTTP request to an external server to exchange data with a third-party service. |
