Transfer a call with inline NCCO

A code snippet that shows how to transfer control of the current call to control using inline NCCO.

Example

Replace the following variables in the example code:

KeyDescription
VOICE_CALL_ID

The UUID of the call leg.

Prerequisites

Execute the following command at your terminal prompt to create the JWT for authentication:

export JWT=$(nexmo jwt:generate $PATH_TO_PRIVATE_KEY application_id=$NEXMO_APPLICATION_ID)

Write the code

Add the following to transfer-call-inline-ncco.sh:

curl -X PUT https://api.nexmo.com/v1/calls/$VOICE_CALL_ID \
  -H "Authorization: Bearer $JWT" \
  -H "Content-Type: application/json"\
  -d '{"action": "transfer",
      "destination": {"type": "ncco", "ncco": [{"action":"talk", "text":"This is a transfer action using an inline NCCO"}]}}'

View full source

Run your code

Save this file to your machine and run it:

bash transfer-call-inline-ncco.sh

Prerequisites

npm install @vonage/server-sdk

Create a file named transfer-a-call-inline-ncco.js and add the following code:

const { Vonage } = require('@vonage/server-sdk');

const vonage = new Vonage({
  applicationId: VONAGE_APPLICATION_ID,
  privateKey: VONAGE_PRIVATE_KEY,
});

View full source

Write the code

Add the following to transfer-a-call-inline-ncco.js:

vonage.voice.transferCallWithNCCO(VOICE_CALL_ID, {
  action: 'transfer',
  destination: {
    'type': 'ncco',
    'ncco': [
      {
        'action': 'talk',
        'text': 'This is a transfer action using an inline NCCO',
      },
    ],
  },
})
  .then(() => console.log('Call Transferred'))
  .catch((error) => console.error(error));

View full source

Run your code

Save this file to your machine and run it:

node transfer-a-call-inline-ncco.js

Prerequisites

Add the following to build.gradle:

implementation 'com.vonage:server-sdk-kotlin:2.1.1'

Create a file named TransferCallWithNcco and add the following code to the main method:

val client = Vonage {
    applicationId(VONAGE_APPLICATION_ID)
    privateKeyPath(VONAGE_PRIVATE_KEY_PATH)
}

View full source

Write the code

Add the following to the main method of the TransferCallWithNcco file:

client.voice.call(VOICE_CALL_ID).transfer(
    talkAction("This is a transfer action using an inline NCCO.")
)

View full source

Run your code

We can use the application plugin for Gradle to simplify the running of our application. Update your build.gradle with the following:

apply plugin: 'application'
mainClassName = project.hasProperty('main') ? project.getProperty('main') : ''

Run the following gradle command to execute your application, replacing com.vonage.quickstart.kt.voice with the package containing TransferCallWithNcco:

gradle run -Pmain=com.vonage.quickstart.kt.voice.TransferCallWithNcco

Prerequisites

Add the following to build.gradle:

implementation 'com.vonage:server-sdk:9.3.1'

Create a file named TransferCallNCCO and add the following code to the main method:

VonageClient client = VonageClient.builder()
        .applicationId(VONAGE_APPLICATION_ID)
        .privateKeyPath(VONAGE_PRIVATE_KEY_PATH)
        .build();

View full source

Write the code

Add the following to the main method of the TransferCallNCCO file:

TalkAction talkAction = TalkAction.builder("This is a transfer action using an inline NCCO.").build();
client.getVoiceClient().transferCall(VOICE_CALL_ID, new Ncco(talkAction));

View full source

Run your code

We can use the application plugin for Gradle to simplify the running of our application. Update your build.gradle with the following:

apply plugin: 'application'
mainClassName = project.hasProperty('main') ? project.getProperty('main') : ''

Run the following gradle command to execute your application, replacing com.vonage.quickstart.voice with the package containing TransferCallNCCO:

gradle run -Pmain=com.vonage.quickstart.voice.TransferCallNCCO

Prerequisites

Install-Package Vonage

Write the code

Add the following to TransferCallNcco.cs:

var credentials = Credentials.FromAppIdAndPrivateKeyPath(VONAGE_APPLICATION_ID, VONAGE_PRIVATE_KEY_PATH);
var client = new VonageClient(credentials);

var talkAction = new TalkAction() { Text = "This is a transfer action using an inline NCCO" };
var ncco = new Ncco(talkAction);
var callEditCommand = new CallEditCommand() 
{ 
    Action = CallEditCommand.ActionType.transfer, 
    Destination = new Destination() 
    { 
        Ncco = ncco
    } 
};

var response = await client.VoiceClient.UpdateCallAsync(VOICE_CALL_ID, callEditCommand);

View full source

Prerequisites

composer require vonage/client

Write the code

Add the following to index.php:

require_once __DIR__ . '/../../config.php';
require_once __DIR__ . '/../../vendor/autoload.php';

$keypair = new \Vonage\Client\Credentials\Keypair(file_get_contents(VONAGE_APPLICATION_PRIVATE_KEY_PATH), VONAGE_APPLICATION_ID);
$client = new \Vonage\Client($keypair);

if (count($argv) != 2) {
    error_log("You must supply a UUID of currently connected call to update");
    exit(1);
}

define('UUID', $argv[1]);

try {
    $call = $client->voice()->get(UUID);
    $ncco = new \Vonage\Voice\NCCO\NCCO();
    $ncco->addAction(new \Vonage\Voice\NCCO\Action\Talk('This call was transferred'));

    $client->voice()->transferCall(
        $call->getUuid(),
        new \Vonage\Voice\NCCO\Action\Transfer($ncco)
    );
} catch (\Vonage\Client\Exception\Request $e) {
    error_log("Client error: " . $e->getMessage());
    exit(1);
} catch (\Vonage\Client\Exception\Server $e) {
    error_log("Server error: " . $e->getMessage());
    exit(1);
}

View full source

Run your code

Save this file to your machine and run it:

php index.php

Prerequisites

pip install vonage python-dotenv

Write the code

Add the following to transfer-call-inline-ncco.py:

from vonage import Auth, Vonage
from vonage_voice import Talk

client = Vonage(
    Auth(
        application_id=VONAGE_APPLICATION_ID,
        private_key=VONAGE_PRIVATE_KEY,
    )
)

ncco = [Talk(text='This is a transfer action using an inline NCCO')]

client.voice.transfer_call_ncco(VOICE_CALL_ID, ncco)

View full source

Run your code

Save this file to your machine and run it:

python voice/transfer-call-inline-ncco.py

Prerequisites

gem install vonage

Write the code

Add the following to transfer-a-call-ncco.rb:

client = Vonage::Client.new(
  application_id: VONAGE_APPLICATION_ID,
  private_key: VONAGE_PRIVATE_KEY
)

ncco = {
  "type": 'ncco',
  "ncco": [
    "action": 'talk',
    "text": 'This is a transfer action using an inline NCCO'
  ]
}

response = client.voice.transfer(VOICE_CALL_ID, destination: ncco)

View full source

Run your code

Save this file to your machine and run it:

ruby transfer-a-call-ncco.rb

Try it out

You will need to:

  1. Set up a call and obtain the call UUID. You could use the 'connect an inbound call' code snippet to do this.
  2. Run the example code to transfer the call.
  3. Control will be transferred to a new NCCO, and you will hear a text-to-speech message to confirm this.

Further Reading

  • Conference Calling - This guide explains the two concepts Vonage associates with a call, a leg and a conversation.