Skip to content

Step 5: Voice Calling

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

This tutorial walks these steps in order:

flowchart TD
    START["Step 5: Voice Calling"]
    N1["1. Add Call Automation NuGet Package"]
    N2["2. Initialize CallAutomationClient"]
    N3["3. Make an Outbound Call"]
    N4["4. Play Audio Prompts"]
    N5["5. DTMF Recognition"]
    N6["Full Code Example"]
    START --> N1
    N1 --> N2
    N2 --> N3
    N3 --> N4
    N4 --> N5
    N5 --> N6

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.

See Also

Sources