К основному содержанию
скилл

azure-communication-callautomation-java — скилл для Claude Code

Скилл по Java SDK Azure Communication Services Call Automation: исходящие звонки, IVR, запись разговора, распознавание DTMF и речи.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add microsoft/skills --skill azure-communication-callautomation-java -a claude-code
Открыть на GitHub

Что делает azure-communication-callautomation-java

Скилл даёт агенту готовые шаблоны кода для серверной автоматизации звонков на Java SDK com.azure:azure-communication-callautomation. Внутри — создание клиента, исходящий вызов на PSTN, ответ на входящий через Event Grid, проигрывание текста и файлов, распознавание DTMF и речи, запись, добавление участника и перевод звонка.

Клиент собирается либо через CallAutomationClientBuilder с endpoint и credential, либо через строку подключения. Для локальной разработки в примерах идёт DefaultAzureCredentialBuilder с требованием переменной AZURE_TOKEN_CREDENTIALS, в продакшене — конкретная учётная запись вроде ManagedIdentityCredentialBuilder. Без настроенной аутентификации в Azure код просто не соберёт клиента, так что это первое, что стоит проверить перед запуском.

Зависимость подключается в Maven: com.azure:azure-communication-callautomation версии 1.6.0. События от ACS разбираются через CallAutomationEventParser в вашем webhook-эндпоинте, а запись скачивается методом downloadTo после события RecordingFileStatusUpdated.

Какие задачи решает

  • собрать IVR с меню и сбором DTMF-нажатий
  • принять входящий звонок и повесить на него обработчик событий
  • проиграть приветствие синтезом речи или из файла
  • записать разговор и скачать файл после завершения
  • перевести звонок на другого участника или номер

Примеры запросов агенту

  • Создай исходящий звонок на +14255551234 через CallAutomationClient
  • Настрой распознавание DTMF с пятью тонами и стоп-символом pound
  • Добавь запись звонка в формате MP4 и скачай её после события RecordingFileStatusUpdated

Как установить azure-communication-callautomation-java

1Через Skills CLI (Vercel)

npx skills add microsoft/skills --skill azure-communication-callautomation-java -a claude-code

2Вручную: положить файлы

~/.claude/skills/azure-communication-callautomation-java/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/azure-communication-callautomation-java/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора64

Весь набор →
azure-enterprise-infra-planner Скилл планирует корпоративную инфраструктуру Azure по описанию нагрузки и генерирует Bicep или Terraform. Пригодится, когда нужно спроектировать landing zone, hub-spoke сеть или DR-топологию. ★ 3 148звёзд репо azure-app-onboard Ведёт от идеи или готового кода до работающего развёртывания в Azure: подбирает сервисы, считает стоимость, генерирует IaC. ★ 3 148звёзд репо azure-monitor-ingestion-java Подсказывает агенту, как отправлять кастомные логи в Azure Monitor через Logs Ingestion API, DCR и DCE на Java. ★ 3 148звёзд репо azure-eventhub-java Скилл для работы с Azure Event Hubs SDK для Java: создание продюсеров и консьюмеров, батчи, партиции, чекпоинты. Пригодится при потоковой обработке событий. ★ 3 148звёзд репо azure-ai-vision-imageanalysis-java Скилл по Azure AI Vision SDK для Java: подсказывает агенту, как писать код для подписей к картинкам, OCR, детекции объектов и умной обрезки. ★ 3 148звёзд репо azure-resource-manager-redis-dotnet Скилл для работы с Azure Cache for Redis через Azure Resource Manager в .NET: создание кэшей, правила файрвола, ключи доступа, георепликация. ★ 3 148звёзд репо azure-mgmt-apimanagement-dotnet Скилл для management plane операций Azure API Management на .NET: создание сервисов, API, продуктов, подписок и политик через Azure Resource Manager. Пригодится, когда нужно развернуть APIM-инфраструктуру кодом. ★ 3 148звёзд репо azure-local-multi-rack Скилл для планирования и эксплуатации multi-rack развёртываний Azure Local: агрегационная стойка, вычислительные стойки, Network Fabric Controller, SAN. ★ 3 148звёзд репо

Похожие

java-modernization-studio официальный Ayan Gupta Ведёт модернизацию Java-приложений в GitHub Copilot с интерактивного холста: проверка окружения, оценка репозитория, план и контрольные точки. ★ 40 418звёзд репо azure-functions MicrosoftDocs Скилл с экспертной базой по Azure Functions: диагностика ошибок, лимиты, безопасность, привязки и деплой. Пригодится, когда агент пишет или чинит функции в Azure. CX Codex +1 378установок azure-functions-csharp официальный github Правило для GitHub Copilot, которое задаёт стандарты разработки Azure Functions на C# в изолированной модели worker. Пригодится, если пишете функции и хотите единый стиль в проекте. ★ 40 418звёзд репо azure-verified-modules hashicorp Скилл с обязательными требованиями Azure Verified Modules: проверяет и помогает писать Terraform-модули, которые проходят сертификацию AVM. CX Codex +1 3 300установок dt-obs-azure Dynatrace Скилл учит агента анализировать ресурсы Azure через Dynatrace Smartscape и DQL. Пригодится при аудите сетевой топологии, проверке настроек безопасности и анализе инфраструктуры. CX Codex +1 2 000установок azure-sql-database MicrosoftDocs Помогает проектировать, настраивать и чинить базы Azure SQL Database. Подсказывает лимиты, выбор тарифов vCore или DTU и выгружает свежую документацию Microsoft Learn. CX Codex +1 1 300установок

Вопросы о azure-communication-callautomation-java

Как установить azure-communication-callautomation-java в Claude?

Выполните npx skills add microsoft/skills --skill azure-communication-callautomation-java -a claude-code. Скилл появится в ~/.claude/skills/azure-communication-callautomation-java/SKILL.md.

Что делает azure-communication-callautomation-java?

Показывает агенту, как писать серверный код автоматизации звонков на Java: исходящие вызовы, ответ на входящие, проигрывание аудио, распознавание DTMF и речи, запись и перевод.

Что нужно для работы скилла?

Java-проект с зависимостью com.azure:azure-communication-callautomation 1.6.0 и доступ к ресурсу Azure Communication Services. В примерах клиент собирается через endpoint с credential или через строку подключения.

Исходный текст

SKILL.md · MIT
---
name: azure-communication-callautomation-java
description: 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.
license: MIT
metadata:
  author: Microsoft
  version: "1.0.0"
  package: com.azure:azure-communication-callautomation
---

# 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 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

```java
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

```java
// 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)

```java
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

```java
// 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

```java
// 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

```java
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

```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 transfer
PhoneNumberIdentifier 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 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

```java
// Hang up for all participants
callConnection.hangUp(true);

// Hang up only this leg
callConnection.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 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 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 · MIT · microsoft/skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой