# Get System Info

The **Get System Info** component reads information about your Cloud Voice system and saves it into variables you can reference elsewhere in a call flow. Use it when a downstream component or a routing decision needs values like the device name, product model, firmware version, or current system time.

## What it does

Get System Info runs a one-time query for system details and writes each result to a variable. Later components can read those variables directly, and components that evaluate expressions (for example, **Condition**) can branch on them. Nothing is played to the caller; the component simply gathers data and passes control to the next step.

The query runs once, at the moment the call reaches this component, so each variable holds a snapshot taken at that instant. For example, `systemTime` reflects the exact time the component ran, not the time the call started.

## Add and configure the component

:::note
**Get System Info** is one of several operations grouped under the **Internal Data Ops** component. You always place an Internal Data Ops block first, then pick **Get System Info** from the **Component Type** list to tell that block which query to run.
:::

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

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

2. Open the **Component Type** drop-down list and choose **Get System Info**.

   ![Component Type drop-down set to Get System Info](/images/pbx/get-system-info-cfd.png)

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

## Variables

Each time the component runs, it populates the variables below. Reference them in any expression-capable component to read a value and act on it.

:::note
You can place **Get System Info** more than once in a single flow. The system numbers each instance in the order you add it (Get System Info 1, Get System Info 2, and so on), and that index becomes part of the variable name. Always include the matching index so you read from the correct component.
:::

| Variable | Type | Description | Example value |
|----------|------|-------------|---------------|
| `$GetSystemInfo{index}.deviceName` | String | Device name | `"PBX"` |
| `$GetSystemInfo{index}.modelName` | String | Product model | `"Cloud Voice"` |
| `$GetSystemInfo{index}.sn` | String | Serial number | `"3631A2124123"` |
| `$GetSystemInfo{index}.firmwareVersion` | String | Firmware version | `"84.22.0.17-beta1"` |
| `$GetSystemInfo{index}.systemTime` | String | Current system time | `"2026/01/30 09:46:44"` |
| `$GetSystemInfo{index}.systemUptime` | Integer | System uptime, in seconds | `88606` |

:::tip
Reference these variables in any expression-capable component. A common pattern is to branch in a **Condition** component (for example, on `firmwareVersion`), or to include a value like `deviceName` or `sn` (serial number) in an **Email Sender** message to help with support and troubleshooting.
:::

## Connections

Get System Info connects to exactly **one** following component: it does not branch to several destinations at once. Any of the components below is a valid target.

| Component | Purpose |
|-----------|---------|
| [Prompt](/pbx/call-flow-designer-guide/prompt/) | Plays an audio prompt or a text-to-speech message to the caller. |
| [Business Hours](/pbx/call-flow-designer-guide/business-hours/) | Routes calls to different destinations based on the time of day. |
| [Menu](/pbx/call-flow-designer-guide/menu/) | Presents a set of options and routes the call by which key the caller presses on their phone keypad (the DTMF, or Dual-Tone Multi-Frequency, tone). |
| [User Input](/pbx/call-flow-designer-guide/user-input/) | Collects DTMF digits from the caller, usually paired with Condition to act on the entry. |
| [Language](/pbx/call-flow-designer-guide/language/) | Changes the system prompt language for the components that follow. |
| [Record](/pbx/call-flow-designer-guide/record/) | Starts call recording once the caller connects to another party (with optional notification prompts), or disables recording for calls that would otherwise be recorded. |
| [Dial by Number](/pbx/call-flow-designer-guide/dial-by-number/) | Lets callers dial a number directly to reach a destination. |
| [Dial by Name](/pbx/call-flow-designer-guide/dial-by-name/) | An end component; callers reach an extension user by entering the first three letters of that user's name. |
| [Transfer](/pbx/call-flow-designer-guide/transfer/) | An end component that transfers the caller to a chosen destination, optionally 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/) | Routes the call according to logical expressions. |
| [Loop](/pbx/call-flow-designer-guide/loop/) | Runs a group of components repeatedly, either a set number of times or until a condition is met. |
| Internal Data Ops | Queries or updates data in the phone system's built-in database. Choose a specific operation, such as [Get Queue Info](/pbx/call-flow-designer-guide/get-queue-info/), [Get Extension Info](/pbx/call-flow-designer-guide/get-extension-info/), or [Get System Capacity](/pbx/call-flow-designer-guide/get-system-capacity/). |
| [Email Sender](/pbx/call-flow-designer-guide/email-sender/) | Sends email for real-time notifications, alerts, or delivery of user-specific information. |
| [Database Access](/pbx/call-flow-designer-guide/database-access/) | Runs SQL (Structured Query Language) operations against a database to read or write data during the call. |
| [HTTP Request](/pbx/call-flow-designer-guide/http-request/) | Sends HTTP requests to external web servers to exchange data with third-party services. |
