home / skills / openclaw / skills / telnyx-voice-advanced-java

This skill helps you manage advanced Telnyx voice controls in Java, including DTMF, SIPREC, noise suppression, supervisor roles, with SDK examples.

npx playbooks add skill openclaw/skills --skill telnyx-voice-advanced-java

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
4.9 KB
---
name: telnyx-voice-advanced-java
description: >-
  Advanced call control features including DTMF sending, SIPREC recording, noise
  suppression, client state, and supervisor controls. This skill provides Java
  SDK examples.
metadata:
  author: telnyx
  product: voice-advanced
  language: java
  generated_by: telnyx-ext-skills-generator
---

<!-- Auto-generated from Telnyx OpenAPI specs. Do not edit. -->

# Telnyx Voice Advanced - Java

## Installation

```text
// See https://github.com/team-telnyx/telnyx-java for Maven/Gradle setup
```

## Setup

```java
import com.telnyx.sdk.client.TelnyxClient;
import com.telnyx.sdk.client.okhttp.TelnyxOkHttpClient;

TelnyxClient client = TelnyxOkHttpClient.fromEnv();
```

All examples below assume `client` is already initialized as shown above.

## Update client state

Updates client state

`PUT /calls/{call_control_id}/actions/client_state_update` — Required: `client_state`

```java
import com.telnyx.sdk.models.calls.actions.ActionUpdateClientStateParams;
import com.telnyx.sdk.models.calls.actions.ActionUpdateClientStateResponse;

ActionUpdateClientStateParams params = ActionUpdateClientStateParams.builder()
    .callControlId("call_control_id")
    .clientState("aGF2ZSBhIG5pY2UgZGF5ID1d")
    .build();
ActionUpdateClientStateResponse response = client.calls().actions().updateClientState(params);
```

## SIP Refer a call

Initiate a SIP Refer on a Call Control call.

`POST /calls/{call_control_id}/actions/refer` — Required: `sip_address`

```java
import com.telnyx.sdk.models.calls.actions.ActionReferParams;
import com.telnyx.sdk.models.calls.actions.ActionReferResponse;

ActionReferParams params = ActionReferParams.builder()
    .callControlId("call_control_id")
    .sipAddress("sip:[email protected]")
    .build();
ActionReferResponse response = client.calls().actions().refer(params);
```

## Send DTMF

Sends DTMF tones from this leg.

`POST /calls/{call_control_id}/actions/send_dtmf` — Required: `digits`

```java
import com.telnyx.sdk.models.calls.actions.ActionSendDtmfParams;
import com.telnyx.sdk.models.calls.actions.ActionSendDtmfResponse;

ActionSendDtmfParams params = ActionSendDtmfParams.builder()
    .callControlId("call_control_id")
    .digits("1www2WABCDw9")
    .build();
ActionSendDtmfResponse response = client.calls().actions().sendDtmf(params);
```

## SIPREC start

Start siprec session to configured in SIPREC connector SRS.

`POST /calls/{call_control_id}/actions/siprec_start`

```java
import com.telnyx.sdk.models.calls.actions.ActionStartSiprecParams;
import com.telnyx.sdk.models.calls.actions.ActionStartSiprecResponse;

ActionStartSiprecResponse response = client.calls().actions().startSiprec("call_control_id");
```

## SIPREC stop

Stop SIPREC session.

`POST /calls/{call_control_id}/actions/siprec_stop`

```java
import com.telnyx.sdk.models.calls.actions.ActionStopSiprecParams;
import com.telnyx.sdk.models.calls.actions.ActionStopSiprecResponse;

ActionStopSiprecResponse response = client.calls().actions().stopSiprec("call_control_id");
```

## Noise Suppression Start (BETA)

`POST /calls/{call_control_id}/actions/suppression_start`

```java
import com.telnyx.sdk.models.calls.actions.ActionStartNoiseSuppressionParams;
import com.telnyx.sdk.models.calls.actions.ActionStartNoiseSuppressionResponse;

ActionStartNoiseSuppressionResponse response = client.calls().actions().startNoiseSuppression("call_control_id");
```

## Noise Suppression Stop (BETA)

`POST /calls/{call_control_id}/actions/suppression_stop`

```java
import com.telnyx.sdk.models.calls.actions.ActionStopNoiseSuppressionParams;
import com.telnyx.sdk.models.calls.actions.ActionStopNoiseSuppressionResponse;

ActionStopNoiseSuppressionResponse response = client.calls().actions().stopNoiseSuppression("call_control_id");
```

## Switch supervisor role

Switch the supervisor role for a bridged call.

`POST /calls/{call_control_id}/actions/switch_supervisor_role` — Required: `role`

```java
import com.telnyx.sdk.models.calls.actions.ActionSwitchSupervisorRoleParams;
import com.telnyx.sdk.models.calls.actions.ActionSwitchSupervisorRoleResponse;

ActionSwitchSupervisorRoleParams params = ActionSwitchSupervisorRoleParams.builder()
    .callControlId("call_control_id")
    .role(ActionSwitchSupervisorRoleParams.Role.BARGE)
    .build();
ActionSwitchSupervisorRoleResponse response = client.calls().actions().switchSupervisorRole(params);
```

---

## Webhooks

The following webhook events are sent to your configured webhook URL.
All webhooks include `telnyx-timestamp` and `telnyx-signature-ed25519` headers for verification (Standard Webhooks compatible).

| Event | Description |
|-------|-------------|
| `callReferStarted` | Call Refer Started |
| `callReferCompleted` | Call Refer Completed |
| `callReferFailed` | Call Refer Failed |
| `callSiprecStarted` | Call Siprec Started |
| `callSiprecStopped` | Call Siprec Stopped |
| `callSiprecFailed` | Call Siprec Failed |

Overview

This skill provides advanced call control examples for Telnyx Voice using the Java SDK. It covers DTMF sending, SIP Refer, SIPREC recording, noise suppression, client state updates, and supervisor role switching. Examples are concise and focused on actionable API calls. Webhook events and verification details are also summarized.

How this skill works

Each example shows the Java SDK call required to perform an action on a live call_control_id. Initialize a Telnyx client from environment variables, then call the appropriate client.calls().actions() method with the required parameters. Webhooks notify your service of async events like SIPREC start/stop and refer status, and include timestamp and Ed25519 signature headers for verification.

When to use it

  • Send DTMF tones to navigate IVR systems or control remote equipment during a call.
  • Initiate a SIP Refer to transfer or hand off a call to another SIP endpoint.
  • Start or stop SIPREC to record calls to a configured SIPREC sink for compliance or QA.
  • Enable or disable noise suppression on noisy call legs (BETA).
  • Update client state to synchronize application status with the call leg.
  • Switch supervisor role during a bridged call to control barge/listen capabilities.

Best practices

  • Initialize the Telnyx client from environment variables and reuse the client instance for multiple actions.
  • Validate call_control_id and required parameters before making API calls to avoid errors.
  • Verify webhook signatures using telnyx-timestamp and telnyx-signature-ed25519 to ensure authenticity.
  • Throttle DTMF and SIP actions to respect remote endpoint behavior and avoid flooding.
  • Implement error handling and retry logic for network or transient API failures.
  • Test noise suppression and SIPREC in staging since features may be beta or environment-specific.

Example use cases

  • Automated IVR navigation: send DTMF sequences to complete multi-step voice menus programmatically.
  • Warm transfer: use SIP Refer to move a call to another agent or external SIP address without dropping the call.
  • Compliance recording: start SIPREC when a regulated transaction begins and stop it afterwards.
  • Agent coaching: switch supervisor role to barge or listen during live agent calls for training.
  • Call quality control: enable noise suppression on caller or agent legs to reduce background noise in real time.

FAQ

How do I authenticate the Java examples?

Initialize the Telnyx Java client from environment variables so the SDK reads your API key securely.

Are noise suppression and SIPREC available in all accounts?

Noise suppression is marked BETA and availability can vary; SIPREC requires a configured SIPREC connector (SRS) in your Telnyx account.