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:

Key Description
UUID The UUID of the call to modify.
action The action to use in updating the call. In this case transfer.

Prerequisites

Modifying an existing call requires that the UUID provided is a currently active call. To modify a call, you must use the same VONAGE_APPLICATION_ID and private key that were used to create the call.

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:

Copy to Clipboard
curl -X PUT https://api.nexmo.com/v1/calls/$UUID \
  -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

Modifying an existing call requires that the UUID provided is a currently active call. To modify a call, you must use the same VONAGE_APPLICATION_ID and private key that were used to create the call.

npm install @vonage/server-sdk

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

Copy to Clipboard
const Vonage = require('@vonage/server-sdk');

const vonage = new Vonage({
  apiKey: VONAGE_API_KEY,
  apiSecret: VONAGE_API_SECRET,
  applicationId: VONAGE_APPLICATION_ID,
  privateKey: VONAGE_PRIVATE_KEY
}, {
  debug: true
});

View full source

Write the code

Add the following to transfer-call-with-ncco.js:

Copy to Clipboard
vonage.calls.update(UUID, {
  action: 'transfer',
  destination: {
    "type": "ncco",
    "ncco": [
      "action": 'talk',
      "text": 'This is a transfer action using an inline NCCO'
    ]
  }
}, (err, res) => {
  if (err) {
    console.error(err);
  } else {
    console.log(res);
  }
});

View full source

Run your code

Save this file to your machine and run it:

node transfer-call-with-ncco.js

Prerequisites

Modifying an existing call requires that the UUID provided is a currently active call. To modify a call, you must use the same VONAGE_APPLICATION_ID and private key that were used to create the call.

Install-Package Vonage

Create a file named TransferCallNcco.cs and add the following code:

Copy to Clipboard
using Vonage;
using Vonage.Request;
using Vonage.Voice;
using Vonage.Voice.Nccos;

View full source

Add the following to TransferCallNcco.cs:

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

View full source

Write the code

Add the following to TransferCallNcco.cs:

Copy to Clipboard
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 = client.VoiceClient.UpdateCall(UUID, callEditCommand);

View full source

Prerequisites

Modifying an existing call requires that the UUID provided is a currently active call. To modify a call, you must use the same VONAGE_APPLICATION_ID and private key that were used to create the call.

composer require vonage/client

Create a file named index.php and add the following code:

Copy to Clipboard
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);

View full source

Write the code

Add the following to index.php:

Copy to Clipboard
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

Modifying an existing call requires that the UUID provided is a currently active call. To modify a call, you must use the same VONAGE_APPLICATION_ID and private key that were used to create the call.

pip install vonage

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

Copy to Clipboard
client = vonage.Client(
    application_id=os.getenv('VONAGE_APPLICATION_ID'),
    private_key=os.getenv("VONAGE_PRIVATE_KEY")
)

View full source

Write the code

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

Copy to Clipboard
voice = vonage.Voice(client)

response = voice.create_call({
    "to": [{"type": "phone", "number": os.getenv('TO_NUMBER')}],
    "from": {"type": "phone", "number": os.getenv('FROM_NUMBER')},
    "ncco": [
        {
            "action": "talk",
            "text": "This is just a text whilst you tranfer to another NCCO"
        }
    ]
})

response = voice.update_call(
    response["uuid"], {
        "action": "transfer",
        "destination": {
            "type": "ncco",
            "ncco": [{"action": "talk", "text": "hello world"}]
        }
    }
)


print(response)

View full source

Run your code

Save this file to your machine and run it:

python3 transfer-call-inline-ncco.py

Prerequisites

Modifying an existing call requires that the UUID provided is a currently active call. To modify a call, you must use the same VONAGE_APPLICATION_ID and private key that were used to create the call.

gem install vonage

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

Copy to Clipboard
client = Vonage::Client.new(
  application_id: VONAGE_APPLICATION_ID,
  private_key: File.read(VONAGE_APPLICATION_PRIVATE_KEY_PATH)
)

View full source

Write the code

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

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

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

puts response.inspect

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.