Azure Communication Callautomation Java
MicrosoftOfficialCreated by Microsoft
- Skill
- Tool integration
- Automation and integrations
- MIT
- No issues found
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
The Azure Communication Call Automation Java SDK provides a set of tools for developers to programmatically manage voice and telephony interactions. It enables the creation of server-side applications that can initiate outbound calls, answer incoming calls, and manage media operations such as text-to-speech, DTMF tone recognition, and speech recognition. The SDK also supports call recording, participant management, and call transfers, with event handling facilitated through webhooks.
What it does
- Initiates outbound calls to phone numbers or communication users.
- Answers incoming calls via webhook event triggers.
- Plays audio files or text-to-speech prompts during active calls.
- Recognizes DTMF tones and speech input for interactive voice response systems.
- Manages call recording states including start, pause, resume, and stop.
- Handles participant management and call transfers.
When to use it
- When building custom IVR systems using Java.
- When integrating automated call routing into existing applications.
- When implementing call recording functionality for voice interactions.
- When adding AI-powered speech recognition or text-to-speech to telephony workflows.
Advantages
- Provides native Java support for Azure Communication Services.
- Includes both synchronous and asynchronous client patterns.
- Supports integration with Azure Cognitive Services for AI-driven call capabilities.
- Simplifies event handling through a dedicated event parser for webhooks.
Usage examples
- “How do I initiate an outbound call using the Call Automation Java SDK?”
- The SDK provides a CreateCallOptions object to define the source and target identifiers, which is then passed to the client's createCall method to initiate the connection.
- “Can I use this SDK to play a text-to-speech message during a call?”
- Yes, you can use the CallMedia class to play a TextSource object, which allows you to specify the text content and the voice name for the TTS engine.
- “How do I handle incoming call events in my Java application?”
- You implement a webhook endpoint that receives the request body, which is then processed by the CallAutomationEventParser to identify and handle specific events like CallConnected.
- “How do I start a call recording with this SDK?”
- You use the CallRecording class to initiate a recording by providing a ServerCallLocator and configuring options such as the recording channel, content type, and format.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/microsoft/azure-communication-callautomation-java/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip azure-communication-callautomation-java.zip -d .agents/skills
Documentation by Microsoft
Azure Communication Call Automation (Java)
Build server-side call automation workflows including IVR systems, call routing, recording, and AI-powered interactions.
Installation
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-callautomation</artifactId>
<version>1.6.0</version>
</dependency>Client Creation
import com.azure.communication.callautomation.CallAutomationClient;
import com.azure.communication.callautomation.CallAutomationClientBuilder;
import com.azure.core.credential.TokenCredential;
import com.azure.identity.AzureIdentityEnvVars;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.identity.ManagedIdentityCredentialBuilder;
// Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>
TokenCredential credential = new DefaultAzureCredentialBuilder()
.requireEnvVars(AzureIdentityEnvVars.AZURE_TOKEN_CREDENTIALS)
.build();
// Or use a specific credential directly in production:
// See https://learn.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable#credential-classes
// TokenCredential credential = new ManagedIdentityCredentialBuilder().build();
// With DefaultAzureCredential
CallAutomationClient client = new CallAutomationClientBuilder()
.endpoint("https://<resource>.communication.azure.com")
.credential(credential)
.buildClient();
// With connection string
CallAutomationClient client = new CallAutomationClientBuilder()
.connectionString("<connection-string>")
.buildClient();Key Concepts
| Class | Purpose |
|---|---|
CallAutomationClient | Make calls, answer/reject incoming calls, redirect calls |
CallConnection | Actions in established calls (add participants, terminate) |
CallMedia | Media operations (play audio, recognize DTMF/speech) |
CallRecording | Start/stop/pause recording |
CallAutomationEventParser | Parse webhook events from ACS |
Create Outbound Call
import com.azure.communication.callautomation.models.*;
import com.azure.communication.common.CommunicationUserIdentifier;
import com.azure.communication.common.PhoneNumberIdentifier;
// Call to PSTN number
PhoneNumberIdentifier target = new PhoneNumberIdentifier("+14255551234");
PhoneNumberIdentifier caller = new PhoneNumberIdentifier("+14255550100");
CreateCallOptions options = new CreateCallOptions(
new CommunicationUserIdentifier("<user-id>"), // Source
List.of(target)) // Targets
.setSourceCallerId(caller)
.setCallbackUrl("https://your-app.com/api/callbacks");
CreateCallResult result = client.createCall(options);
String callConnectionId = result.getCallConnectionProperties().getCallConnectionId();Answer Incoming Call
// From Event Grid webhook - IncomingCall event
String incomingCallContext = "<incoming-call-context-from-event>";
AnswerCallOptions options = new AnswerCallOptions(
incomingCallContext,
"https://your-app.com/api/callbacks");
AnswerCallResult result = client.answerCall(options);
CallConnection callConnection = result.getCallConnection();Play Audio (Text-to-Speech)
CallConnection callConnection = client.getCallConnection(callConnectionId);
CallMedia callMedia = callConnection.getCallMedia();
// Play text-to-speech
TextSource textSource = new TextSource()
.setText("Welcome to Contoso. Press 1 for sales, 2 for support.")
.setVoiceName("en-US-JennyNeural");
PlayOptions playOptions = new PlayOptions(
List.of(textSource),
List.of(new CommunicationUserIdentifier("<target-user>")));
callMedia.play(playOptions);
// Play audio file
FileSource fileSource = new FileSource()
.setUrl("https://storage.blob.core.windows.net/audio/greeting.wav");
callMedia.play(new PlayOptions(List.of(fileSource), List.of(target)));Recognize DTMF Input
// Recognize DTMF tones
DtmfTone stopTones = DtmfTone.POUND;
CallMediaRecognizeDtmfOptions recognizeOptions = new CallMediaRecognizeDtmfOptions(
new CommunicationUserIdentifier("<target-user>"),
5) // Max tones to collect
.setInterToneTimeout(Duration.ofSeconds(5))
.setStopTones(List.of(stopTones))
.setInitialSilenceTimeout(Duration.ofSeconds(15))
.setPlayPrompt(new TextSource().setText("Enter your account number followed by pound."));
callMedia.startRecognizing(recognizeOptions);Recognize Speech
// Speech recognition with AI
CallMediaRecognizeSpeechOptions speechOptions = new CallMediaRecognizeSpeechOptions(
new CommunicationUserIdentifier("<target-user>"))
.setEndSilenceTimeout(Duration.ofSeconds(2))
.setSpeechLanguage("en-US")
.setPlayPrompt(new TextSource().setText("How can I help you today?"));
callMedia.startRecognizing(speechOptions);Call Recording
CallRecording callRecording = client.getCallRecording();
// Start recording
StartRecordingOptions recordingOptions = new StartRecordingOptions(
new ServerCallLocator("<server-call-id>"))
.setRecordingChannel(RecordingChannel.MIXED)
.setRecordingContent(RecordingContent.AUDIO_VIDEO)
.setRecordingFormat(RecordingFormat.MP4);
RecordingStateResult recordingResult = callRecording.start(recordingOptions);
String recordingId = recordingResult.getRecordingId();
// Pause/resume/stop
callRecording.pause(recordingId);
callRecording.resume(recordingId);
callRecording.stop(recordingId);
// Download recording (after RecordingFileStatusUpdated event)
callRecording.downloadTo(recordingUrl, Paths.get("recording.mp4"));Add Participant to Call
CallConnection callConnection = client.getCallConnection(callConnectionId);
CommunicationUserIdentifier participant = new CommunicationUserIdentifier("<user-id>");
AddParticipantOptions addOptions = new AddParticipantOptions(participant)
.setInvitationTimeout(Duration.ofSeconds(30));
AddParticipantResult result = callConnection.addParticipant(addOptions);Transfer Call
// Blind transfer
PhoneNumberIdentifier transferTarget = new PhoneNumberIdentifier("+14255559999");
TransferCallToParticipantResult result = callConnection.transferCallToParticipant(transferTarget);Handle Events (Webhook)
import com.azure.communication.callautomation.CallAutomationEventParser;
import com.azure.communication.callautomation.models.events.*;
// In your webhook endpoint
public void handleCallback(String requestBody) {
List<CallAutomationEventBase> events = CallAutomationEventParser.parseEvents(requestBody);
for (CallAutomationEventBase event : events) {
if (event instanceof CallConnected) {
CallConnected connected = (CallConnected) event;
System.out.println("Call connected: " + connected.getCallConnectionId());
} else if (event instanceof RecognizeCompleted) {
RecognizeCompleted recognized = (RecognizeCompleted) event;
// Handle DTMF or speech recognition result
DtmfResult dtmfResult = (DtmfResult) recognized.getRecognizeResult();
String tones = dtmfResult.getTones().stream()
.map(DtmfTone::toString)
.collect(Collectors.joining());
System.out.println("DTMF received: " + tones);
} else if (event instanceof PlayCompleted) {
System.out.println("Audio playback completed");
} else if (event instanceof CallDisconnected) {
System.out.println("Call ended");
}
}
}Hang Up Call
// Hang up for all participants
callConnection.hangUp(true);
// Hang up only this leg
callConnection.hangUp(false);Error Handling
import com.azure.core.exception.HttpResponseException;
try {
client.answerCall(options);
} catch (HttpResponseException e) {
if (e.getResponse().getStatusCode() == 404) {
System.out.println("Call not found or already ended");
} else if (e.getResponse().getStatusCode() == 400) {
System.out.println("Invalid request: " + e.getMessage());
}
}Environment Variables
AZURE_COMMUNICATION_ENDPOINT=https://<resource>.communication.azure.com # Required for all auth methods
AZURE_COMMUNICATION_CONNECTION_STRING=endpoint=https://...;accesskey=... # Alternative to Entra ID auth
CALLBACK_BASE_URL=https://your-app.com/api/callbacks # Required for webhook callbacks
AZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in productionTrigger Phrases
"call automation Java", "IVR Java", "interactive voice response"
"call recording Java", "DTMF recognition Java"
"text to speech call", "speech recognition call"
"answer incoming call", "transfer call Java"
"Azure Communication Services call automation"
Files
- ATTRIBUTION.mdAdded by AutoGineer1.0 KiB
- LICENSELicence file added by AutoGineer1.1 KiB
- SKILL.md9.1 KiB
- references/examples.md16.1 KiB
references/examples.md
Azure Communication Call Automation SDK for Java - Examples
Comprehensive code examples for the Azure Communication Call Automation SDK for Java.
Table of Contents
Maven Dependency
Client Creation
Creating Outbound Calls
Answering Inbound Calls
Playing Audio/TTS
Recognizing DTMF Tones
Recording Calls
Transfer Calls
Add/Remove Participants
Handling Call Events
Async Client Patterns
Error Handling
Maven Dependency
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-callautomation</artifactId>
<version>1.5.2</version>
</dependency>Client Creation
Sync Client
import com.azure.communication.callautomation.CallAutomationClient;
import com.azure.communication.callautomation.CallAutomationClientBuilder;
CallAutomationClient callAutomationClient = new CallAutomationClientBuilder()
.connectionString("<Azure Communication Services connection string>")
.buildClient();Async Client
import com.azure.communication.callautomation.CallAutomationAsyncClient;
CallAutomationAsyncClient asyncClient = new CallAutomationClientBuilder()
.connectionString("<acsConnectionString>")
.buildAsyncClient();Creating Outbound Calls
Single PSTN Call
import com.azure.communication.callautomation.models.*;
import com.azure.communication.common.PhoneNumberIdentifier;
import com.azure.core.util.Context;
String callbackUri = "https://<myendpoint>/Events";
PhoneNumberIdentifier callerIdNumber = new PhoneNumberIdentifier("+18001234567");
PhoneNumberIdentifier target = new PhoneNumberIdentifier("+16471234567");
CallInvite callInvite = new CallInvite(target, callerIdNumber);
CreateCallOptions createCallOptions = new CreateCallOptions(callInvite, callbackUri);
// Optional: Add AI capabilities
CallIntelligenceOptions callIntelligenceOptions = new CallIntelligenceOptions()
.setCognitiveServicesEndpoint("https://your-cognitive-services.cognitiveservices.azure.com/");
createCallOptions.setCallIntelligenceOptions(callIntelligenceOptions);
Response<CreateCallResult> result = callAutomationClient.createCallWithResponse(
createCallOptions,
Context.NONE
);
String callConnectionId = result.getValue().getCallConnectionProperties().getCallConnectionId();Group Call
import com.azure.communication.common.CommunicationUserIdentifier;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
List<CommunicationIdentifier> targets = new ArrayList<>(Arrays.asList(
new PhoneNumberIdentifier("+16471234567"),
new CommunicationUserIdentifier("<user_id>")
));
CreateGroupCallOptions groupCallOptions = new CreateGroupCallOptions(targets, callbackUri);
groupCallOptions.setSourceCallIdNumber(callerIdNumber);
Response<CreateCallResult> response = callAutomationClient.createGroupCallWithResponse(
groupCallOptions,
Context.NONE
);Answering Inbound Calls
Basic Answer
import com.azure.communication.callautomation.models.*;
String incomingCallContext = "<IncomingCallContext_From_IncomingCall_Event>";
String callbackUri = "https://<myendpoint>/Events";
AnswerCallOptions answerCallOptions = new AnswerCallOptions(incomingCallContext, callbackUri);
Response<AnswerCallResult> response = callAutomationClient.answerCallWithResponse(
answerCallOptions,
Context.NONE
);Answer with AI Capabilities
CallIntelligenceOptions callIntelligenceOptions = new CallIntelligenceOptions()
.setCognitiveServicesEndpoint("https://cognitive-services.cognitiveservices.azure.com/");
AnswerCallOptions answerCallOptions = new AnswerCallOptions(incomingCallContext, callbackUri)
.setCallIntelligenceOptions(callIntelligenceOptions);
Response<AnswerCallResult> response = callAutomationClient.answerCallWithResponse(
answerCallOptions,
Context.NONE
);Answer with Transcription
TranscriptionOptions transcriptionOptions = new TranscriptionOptions(
"wss://your-websocket-url",
TranscriptionTransport.WEBSOCKET,
"en-US",
false,
"your-endpoint-id"
);
AnswerCallOptions answerCallOptions = new AnswerCallOptions(incomingCallContext, callbackUri)
.setCallIntelligenceOptions(callIntelligenceOptions)
.setTranscriptionOptions(transcriptionOptions);Playing Audio/TTS
Play Text-to-Speech to All
import com.azure.communication.callautomation.CallConnection;
String textToPlay = "Welcome to Contoso. How can I help you today?";
TextSource textSource = new TextSource()
.setText(textToPlay)
.setVoiceName("en-US-NancyNeural");
CallConnection callConnection = callAutomationClient.getCallConnection(callConnectionId);
callConnection.getCallMedia().playToAll(textSource);Play Audio File to Participant
import java.util.Arrays;
CommunicationIdentifier targetParticipant = new PhoneNumberIdentifier("+16471234567");
FileSource playSource = new FileSource()
.setUrl("https://storage.blob.core.windows.net/audio/welcome.wav")
.setPlaySourceCacheId("<playSourceId>"); // Optional: cache for repeated playback
var playTo = Arrays.asList(targetParticipant);
PlayOptions playOptions = new PlayOptions(playSource, playTo);
callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.playWithResponse(playOptions, Context.NONE);Play with SSML
String ssmlText = "<speak version=\"1.0\" xmlns=\"http://www.w3.org/2001/10/synthesis\" xml:lang=\"en-US\">" +
"<voice name=\"en-US-JennyNeural\">Hello, welcome to our service!</voice></speak>";
SsmlSource ssmlSource = new SsmlSource()
.setSsmlText(ssmlText);
callConnection.getCallMedia().playToAll(ssmlSource);Recognizing DTMF Tones
DTMF Recognition
import java.time.Duration;
import java.util.Arrays;
CommunicationIdentifier targetParticipant = new PhoneNumberIdentifier("+16471234567");
int maxTonesToCollect = 3;
TextSource playSource = new TextSource()
.setText("Please enter 3 digits.")
.setVoiceName("en-US-ElizabethNeural");
CallMediaRecognizeDtmfOptions recognizeOptions = new CallMediaRecognizeDtmfOptions(
targetParticipant,
maxTonesToCollect
)
.setInitialSilenceTimeout(Duration.ofSeconds(30))
.setPlayPrompt(playSource)
.setInterToneTimeout(Duration.ofSeconds(5))
.setInterruptPrompt(true)
.setStopTones(Arrays.asList(DtmfTone.POUND));
callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.startRecognizingWithResponse(recognizeOptions, Context.NONE);Speech or DTMF Recognition
CallMediaRecognizeSpeechOrDtmfOptions recognizeOptions =
new CallMediaRecognizeSpeechOrDtmfOptions(
targetParticipant,
maxTonesToCollect,
Duration.ofMillis(1000)
)
.setPlayPrompt(playSource)
.setInitialSilenceTimeout(Duration.ofSeconds(30))
.setInterruptPrompt(true)
.setOperationContext("OpenQuestionSpeechOrDtmf");
callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.startRecognizingWithResponse(recognizeOptions, Context.NONE);Choice Recognition
import java.util.List;
List<RecognitionChoice> choices = Arrays.asList(
new RecognitionChoice()
.setLabel("Confirm")
.setPhrases(Arrays.asList("Confirm", "Yes", "One"))
.setTone(DtmfTone.ONE),
new RecognitionChoice()
.setLabel("Cancel")
.setPhrases(Arrays.asList("Cancel", "No", "Two"))
.setTone(DtmfTone.TWO)
);
TextSource playSource = new TextSource()
.setText("Say Confirm or press 1 to confirm, or say Cancel or press 2 to cancel.")
.setVoiceName("en-US-ElizabethNeural");
CallMediaRecognizeChoiceOptions recognizeOptions = new CallMediaRecognizeChoiceOptions(
targetParticipant,
choices
)
.setInterruptPrompt(true)
.setInitialSilenceTimeout(Duration.ofSeconds(30))
.setPlayPrompt(playSource)
.setOperationContext("AppointmentReminderMenu");
callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.startRecognizingWithResponse(recognizeOptions, Context.NONE);Send DTMF Tones
List<DtmfTone> tones = Arrays.asList(
DtmfTone.ONE,
DtmfTone.TWO,
DtmfTone.THREE,
DtmfTone.POUND
);
SendDtmfTonesOptions options = new SendDtmfTonesOptions(
tones,
new PhoneNumberIdentifier(targetPhoneNumber)
);
options.setOperationContext("dtmfs-to-ivr");
callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.sendDtmfTonesWithResponse(options, Context.NONE);Recording Calls
Start Recording
import com.azure.communication.callautomation.CallRecording;
CallRecording callRecording = callAutomationClient.getCallRecording();
StartRecordingOptions startRecordingOptions = new StartRecordingOptions(
new ServerCallLocator(serverCallId)
)
.setRecordingContent(RecordingContent.AUDIO_VIDEO)
.setRecordingChannel(RecordingChannel.MIXED)
.setRecordingFormat(RecordingFormat.MP4);
Response<RecordingStateResult> response = callRecording.startWithResponse(
startRecordingOptions,
Context.NONE
);
String recordingId = response.getValue().getRecordingId();Pause/Resume Recording
// Pause
callRecording.pause(recordingId);
// Resume
callRecording.resume(recordingId);Stop Recording
callRecording.stop(recordingId);Download Recording
callRecording.downloadToWithResponse(
recordingUrl,
Paths.get("recording.mp4"),
null, // HttpRange (optional)
Context.NONE
);Transfer Calls
Blind Transfer
CommunicationIdentifier transferDestination = new PhoneNumberIdentifier("+16471234567");
TransferCallToParticipantOptions transferOptions = new TransferCallToParticipantOptions(
transferDestination
);
Response<TransferCallResult> response = callAutomationClient
.getCallConnection(callConnectionId)
.transferCallToParticipantWithResponse(transferOptions, Context.NONE);Transfer with Announcement
TextSource transferee Prompt = new TextSource()
.setText("Please hold while we transfer your call.")
.setVoiceName("en-US-NancyNeural");
TransferCallToParticipantOptions transferOptions = new TransferCallToParticipantOptions(
transferDestination
)
.setSourceCallerIdNumber(new PhoneNumberIdentifier("+18001234567"))
.setTransfereeGreeting(transfereePrompt);
callAutomationClient.getCallConnection(callConnectionId)
.transferCallToParticipantWithResponse(transferOptions, Context.NONE);Add/Remove Participants
Add Participant
CommunicationIdentifier participant = new PhoneNumberIdentifier("+16471234567");
PhoneNumberIdentifier callerId = new PhoneNumberIdentifier("+18001234567");
AddParticipantOptions addOptions = new AddParticipantOptions(
new CallInvite(participant, callerId)
);
Response<AddParticipantResult> response = callAutomationClient
.getCallConnection(callConnectionId)
.addParticipantWithResponse(addOptions, Context.NONE);Remove Participant
CommunicationIdentifier participant = new PhoneNumberIdentifier("+16471234567");
callAutomationClient.getCallConnection(callConnectionId)
.removeParticipant(participant);List Participants
ListParticipantsResult participants = callAutomationClient
.getCallConnection(callConnectionId)
.listParticipants();
participants.getValues().forEach(p ->
System.out.println("Participant: " + p.getIdentifier().getRawId()));Handling Call Events
Event Grid Webhook Handler (Spring Boot)
import com.azure.communication.callautomation.CallAutomationEventParser;
import com.azure.communication.callautomation.models.events.*;
import org.springframework.web.bind.annotation.*;
@RestController
public class CallbackController {
@PostMapping("/Events")
public ResponseEntity<String> handleCallEvents(@RequestBody String requestBody) {
List<CallAutomationEventBase> events = CallAutomationEventParser.parseEvents(requestBody);
for (CallAutomationEventBase event : events) {
String callConnectionId = event.getCallConnectionId();
if (event instanceof CallConnected) {
handleCallConnected((CallConnected) event);
} else if (event instanceof RecognizeCompleted) {
handleRecognizeCompleted((RecognizeCompleted) event);
} else if (event instanceof RecognizeFailed) {
handleRecognizeFailed((RecognizeFailed) event);
} else if (event instanceof PlayCompleted) {
handlePlayCompleted((PlayCompleted) event);
} else if (event instanceof CallDisconnected) {
handleCallDisconnected((CallDisconnected) event);
}
}
return ResponseEntity.ok("");
}
private void handleCallConnected(CallConnected event) {
System.out.println("Call connected: " + event.getCallConnectionId());
}
private void handleRecognizeCompleted(RecognizeCompleted event) {
CollectTonesResult result = (CollectTonesResult) event.getRecognizeResult();
String tones = result.getTones().stream()
.map(DtmfTone::toString)
.collect(Collectors.joining());
System.out.println("DTMF tones received: " + tones);
}
private void handleRecognizeFailed(RecognizeFailed event) {
System.out.println("Recognition failed: " + event.getResultInformation().getMessage());
}
private void handlePlayCompleted(PlayCompleted event) {
System.out.println("Play completed: " + event.getOperationContext());
}
private void handleCallDisconnected(CallDisconnected event) {
System.out.println("Call disconnected: " + event.getCallConnectionId());
}
}Async Client Patterns
Create Call Async
asyncClient.createCall(callInvite, callbackUri)
.subscribe(
result -> System.out.println("Call ID: " +
result.getCallConnectionProperties().getCallConnectionId()),
error -> System.err.println("Error: " + error.getMessage())
);Play Audio Async
asyncClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.playToAll(textSource)
.subscribe(
unused -> System.out.println("Play started"),
error -> System.err.println("Error: " + error.getMessage())
);Recognize Async
asyncClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.startRecognizingWithResponse(recognizeOptions)
.subscribe(
response -> System.out.println("Recognition started"),
error -> System.err.println("Error: " + error.getMessage())
);Error Handling
Sync Error Handling
import com.azure.core.exception.HttpResponseException;
try {
Response<CreateCallResult> result = callAutomationClient.createCallWithResponse(
createCallOptions,
Context.NONE
);
} catch (HttpResponseException e) {
System.err.println("HTTP Status: " + e.getResponse().getStatusCode());
System.err.println("Error: " + e.getMessage());
} catch (Exception e) {
System.err.println("Unexpected error: " + e.getMessage());
}Async Error Handling
asyncClient.createCall(callInvite, callbackUri)
.subscribe(
result -> System.out.println("Success"),
error -> {
if (error instanceof HttpResponseException) {
HttpResponseException httpError = (HttpResponseException) error;
System.err.println("HTTP error: " + httpError.getResponse().getStatusCode());
} else {
System.err.println("Error: " + error.getMessage());
}
}
);Common Error Codes
| Code | Meaning |
|---|---|
| 400 | Invalid request |
| 401 | Authentication failed |
| 403 | Not authorized |
| 404 | Call/resource not found |
| 429 | Rate limited |
| 500 | Server error |
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- Microsoft
- Publisher
- Microsoft (Official)
- Source
- microsoft/skills · .github/plugins/azure-sdk-java/skills/azure-communication-callautomation-java · commit 0696600
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Microsoft.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download azure-communication-callautomation-java.zip