Azure Communication Callautomation Java

作者 microsoft354361d83247MIT收錄於 2026年10月8日更新於 2026年10月8日

Build call automation workflows with Azure Communication Services Call Automation Java SDK. Use when implementing IVR systems, call routing, call recording, DTMF recognition, text-to-speech, or AI-powered call flows.

AI 產生的概覽

為 Java 開發者提供 Azure 通訊服務通話自動化工作流程的指引,例如 IVR、通話路由、錄音與語音辨識。

功能
此技能提供 Azure 通訊服務通話自動化 SDK 的 Java 參考指南,涵蓋用戶端建立、撥出與撥入通話、文字轉語音播放、DTMF 與語音辨識、錄音、參與者管理、通話轉接、Webhook 事件解析與錯誤處理。它產出程式碼片段與設定說明,而非可執行的指令碼。它也列出端點、連接字串與回呼 URL 所需的環境變數。
適用情境
適用於以 Java 實作伺服器端通話自動化的情境,例如 IVR 選單、通話路由、通話錄音或 AI 語音互動。適合需要具體 SDK 用法模式與事件處理範例的開發者。
執行需求
需要 Java 與 com.azure:azure-communication-callautomation Maven 相依性、Azure 通訊服務認證(端點或連接字串,或透過 azure-identity 使用 Entra ID),以及可公開存取的回呼 URL 以接收 Webhook 事件。需要連線至 Azure 服務的網路。不附指令碼,僅為說明文件。

Azure Communication Call Automation (Java)

Build server-side call automation workflows including IVR systems, call routing, recording, and AI-powered interactions.

Installation

xml
<dependency>    <groupId>com.azure</groupId>    <artifactId>azure-communication-callautomation</artifactId>    <version>1.6.0</version></dependency>

Client Creation

java
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 DefaultAzureCredentialCallAutomationClient client = new CallAutomationClientBuilder()    .endpoint("https://<resource>.communication.azure.com")    .credential(credential)    .buildClient();
// With connection stringCallAutomationClient client = new CallAutomationClientBuilder()    .connectionString("<connection-string>")    .buildClient();

Key Concepts

ClassPurpose
CallAutomationClientMake calls, answer/reject incoming calls, redirect calls
CallConnectionActions in established calls (add participants, terminate)
CallMediaMedia operations (play audio, recognize DTMF/speech)
CallRecordingStart/stop/pause recording
CallAutomationEventParserParse webhook events from ACS

Create Outbound Call

java
import com.azure.communication.callautomation.models.*;import com.azure.communication.common.CommunicationUserIdentifier;import com.azure.communication.common.PhoneNumberIdentifier;
// Call to PSTN numberPhoneNumberIdentifier 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

java
// From Event Grid webhook - IncomingCall eventString 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)

java
CallConnection callConnection = client.getCallConnection(callConnectionId);CallMedia callMedia = callConnection.getCallMedia();
// Play text-to-speechTextSource 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 fileFileSource 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

java
// Recognize DTMF tonesDtmfTone 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

java
// Speech recognition with AICallMediaRecognizeSpeechOptions 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

java
CallRecording callRecording = client.getCallRecording();
// Start recordingStartRecordingOptions 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/stopcallRecording.pause(recordingId);callRecording.resume(recordingId);callRecording.stop(recordingId);
// Download recording (after RecordingFileStatusUpdated event)callRecording.downloadTo(recordingUrl, Paths.get("recording.mp4"));

Add Participant to Call

java
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

java
// Blind transferPhoneNumberIdentifier transferTarget = new PhoneNumberIdentifier("+14255559999");TransferCallToParticipantResult result = callConnection.transferCallToParticipant(transferTarget);

Handle Events (Webhook)

java
import com.azure.communication.callautomation.CallAutomationEventParser;import com.azure.communication.callautomation.models.events.*;
// In your webhook endpointpublic 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

java
// Hang up for all participantscallConnection.hangUp(true);
// Hang up only this legcallConnection.hangUp(false);

Error Handling

java
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

bash
AZURE_COMMUNICATION_ENDPOINT=https://<resource>.communication.azure.com  # Required for all auth methodsAZURE_COMMUNICATION_CONNECTION_STRING=endpoint=https://...;accesskey=...  # Alternative to Entra ID authCALLBACK_BASE_URL=https://your-app.com/api/callbacks  # Required for webhook callbacksAZURE_TOKEN_CREDENTIALS=prod  # Required only if DefaultAzureCredential is used in production

Trigger 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"

來源與署名

來源:microsoft/skills位於.github/plugins/azure-sdk-java/skills/azure-communication-callautomation-java提交354361d

授權條款: MIT

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架