Skip to content

Step 5: Voice Calling

Use the CallAutomationClient to make outbound calls and handle telephony events.

1. Add Call Automation NuGet Package

dotnet add package Azure.Communication.CallAutomation

2. Initialize CallAutomationClient

using Azure.Communication.CallAutomation;

string connectionString = Environment.GetEnvironmentVariable("COMMUNICATION_SERVICES_CONNECTION_STRING");
CallAutomationClient callClient = new CallAutomationClient(connectionString);

3. Make an Outbound Call

using Azure.Communication;

public async Task MakeCall()
{
    var target = new PhoneNumberIdentifier("+1234567890");
    var caller = new PhoneNumberIdentifier("+10987654321");
    var callbackUri = new Uri("https://your-app.com/callbacks/call");

    CallInvite invite = new CallInvite(target, caller);
    CreateCallResult result = await callClient.CreateCallAsync(invite, callbackUri);

    Console.WriteLine($"Call Connection ID: {result.CallConnectionProperties.CallConnectionId}");
}

4. Play Audio Prompts

public async Task PlayAudio(string callConnectionId)
{
    CallConnection callConnection = callClient.GetCallConnection(callConnectionId);

    var audioSource = new FileSource(new Uri("https://storage.com/welcome.wav"));
    await callConnection.GetCallMedia().PlayToAllAsync(audioSource);
}

5. DTMF Recognition

public async Task StartRecognition(string callConnectionId)
{
    CallConnection callConnection = callClient.GetCallConnection(callConnectionId);

    var recognizeOptions = new CallMediaRecognizeDtmfOptions(new PhoneNumberIdentifier("+1234567890"), maxDigits: 1)
    {
        InterDigitTimeout = TimeSpan.FromSeconds(5),
        InterruptPrompt = true
    };

    await callConnection.GetCallMedia().StartRecognizingAsync(recognizeOptions);
}

Full Code Example

using System;
using System.Threading.Tasks;
using Azure.Communication.CallAutomation;
using Azure.Communication;

class Program
{
    static async Task Main(string[] args)
    {
        // Implementation for outbound call and event handling
    }
}

Next Step

Implement Logging & Monitoring for your application.

Sources