Set Up a .NET Dev Environment for Voice Calls

This guide shows how to set up a development environment in five minutes to trigger API requests and start serving Plivo XML to control your call flow. It also shows how to test your code using tunneling software to expose the local dev server to the public internet.

Install .NET Framework and the Plivo NuGet package

To get started, install and set up .NET Framework 4.6 or higher and Plivo’s .NET SDK.

Operating System Instructions
macOS and Linux To see if you already have .NET Framework installed, run the command dotnet --version in a terminal window. If you don’t have it, download and install it.
Windows To install .NET Framework on Windows, follow these instructions.

Install the Plivo .NET SDK using Visual Studio

To install the Plivo .NET SDK:

  • Create a new project in Visual Studio.

Create New Project

  • Choose a template for the new project.

Choose Template

  • Install the Plivo NuGet package.

Manage Nuget packages Select Plivo Nuget package

Trigger an API request

Now you can create a file in the project directory and execute code to trigger any Plivo API. Here’s some example code that makes an outbound call. Open the Program.cs file in the CS project and paste into it this code.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using System.Collections.Generic;
using Plivo;

namespace testplivo
{
    class Program
    {
        static void Main(string[] args)
        {
            var api = new PlivoApi("<auth_id>","<auth_token>");
            var response = api.Call.Create(
                to: new List<String> { "<Caller_ID>" },
                from: "<Destination_Number>",
                answerMethod: "GET",
                answerUrl: "http://s3.amazonaws.com/static.plivo.com/answer.xml"
            );
            Console.WriteLine(response);
        }
    }
}
Note:
  • Replace the placeholders <auth_id> and <auth_token> with your authentication credentials, which you can find on the overview page of the Plivo console.
  • We recommend that you store your credentials in the auth_id and auth_token environment variables to avoid the possibility of accidentally committing them to source control. If you do this, you can initialize the client with no arguments and it will automatically fetch the values from the environment variables.
  • You can use the Environment.SetEnvironmentVariable method to store environment variables, and fetch them using the Environment.GetEnvironmentVariable method while initializing the client.
  • Replace the placeholder <Caller_ID> with a phone number you’ve purchased, and <Destination_Number> with the phone number you’ll be calling. Both phone numbers should be in E.164 format.
  • <Destination_Number> can also be a SIP endpoint. If you’re calling a SIP endpoint, the <Destination_Number> placeholder should be a valid SIP URI. Example: sip:john1234@phone.plivo.com

Save the file and run it.

Make outbound call

You can follow the same approach to trigger other API requests. Refer to our detailed API reference to see all the API requests available on the Voice API platform.

Serve an XML document and manage callbacks

When you receive a call on a Plivo voice-enabled number, you can control the call flow by declaring an Answer URL for the Plivo application associated with that phone number. Plivo will invoke the Answer URL specified and expect a valid XML response to handle the call.

Note: You can use Answer URLs with both outbound API calls and inbound calls. In the outbound API call example above, we specified the Answer URL along with the Make Call API request; for incoming calls, you’d specify the Answer URL in the Plivo application associated with the phone number.

In addition to requests to the Answer URL, Plivo initiates other HTTP requests to your application server based on specific XML elements in your Answer XML document. Such requests are broadly classified into two categories:

Action URL requests: These requests are typically invoked at the end of an XML element’s execution, and the server expects XML instructions to carry forward the call in response to these requests. This happens, for example, when a caller provides Touch-Tone input during GetInput XML execution.

Callback URL requests: These requests serve as webhooks to pass the application server information about events through the course of an XML element’s execution, such as when a conference participant is muted or unmuted. No XML instructions are expected in response to these requests.

Set up a .NET Framework application to serve XML and manage callbacks

Here’s how to set up a .NET Framework application to serve XML documents and manage callbacks.

  • Create an MVC web app.

Create a MVC app

  • Configure the MVC application and provide a project name. We called ours “Receivecall.”

Configure the MVC app

  • Install the Plivo NuGet package.

Install Plivo Nuget Package

Create a controller to receive calls

Navigate to the Controllers directory in the Receivecall application, create a Controller named ReceivecallController.cs, and paste into it this code.

Install Plivo Nuget Package

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
using Plivo.XML;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;

namespace Receivecall
{
    public class ReceivecallController : Controller
    {
        public IActionResult Index()
        {
            Plivo.XML.Response resp = new Plivo.XML.Response();
            resp.AddSpeak("Hello, you just received your first call",
                new Dictionary<string, string>() {
        {
        "loop",
        "3"
        }
                });
            var output = resp.ToString();
            Console.WriteLine(output);

            return this.Content(output, "text/xml");
        }
    }
}

Before starting the application, edit Properties/launchSettings.json and set applicationUrl to

    "applicationUrl": "http://localhost:5000/"

Run the project and you should see your basic server application in action on http://localhost:5000/receivecall/.

Ngrok setup

To serve XML documents, your local server must connect with Plivo API services. For that, we recommend using ngrok, which exposes local servers running behind NATs and firewalls to the public internet over secure tunnels. Using ngrok, you can set webhooks that can talk to the Plivo server.

ngrok block diagram

Install ngrok and run it on the command line, specifying the port that hosts the application on which you want to receive messages (5000 in this case):

./ngrok http 5000

This will start the ngrok server on your local server.

Sample ngrok CLI

Ngrok will display a forwarding link that you can use as a webhook to access your local server over the public network. You should be able to see your basic server application in action at https://<nrgok_URL>/receive_call/.

Sample ngrok CLI

You can follow the same approach to serve other XML documents to manage other call flows. Refer to our detailed XML reference to see all the XML elements available on the Voice API platform.