Call Object

The “calls” method sends call data to contact or company cards. Because events do not have an assigned user or date, they are displayed alongside tasks. If the call contains a call recording, then the audio player interface will be available on the card.

The method adds new calls one by one or batchwise to the processing queue for subsequent movement to the “events” table. After adding calls using “calls/add”, recordings appear in the processing queue. If the contact’s phone number matches the specified parameters, then a “call” note will be created on the contact card. If a contact was not found in 18 hours, then the call will be deleted.

It is important to note that in order to add a call using the “calls/add” method, you need to have a unique service key. To get this key, you should upload your virtual PBX widget (the test widget is acceptable) into an account and contact our technical support.

You can add calls to various amoCRM accounts, provided that users:

  • Install the widget
  • Match the unique key to the unique key in the original version

Resource URL

POST /api/calls/add/

GET parameters

Parameter Type Description
code

require

string Unique service identifier.
key

require

string (numeral) Service key, which you can get by writing to amoCRM tech support.

Parameters

Parameter Type Description
account_id

require

string (numeral) Identification number where the call took place.
uuid

require

string Unique call identifier. It is sent by you.
caller

require

string (numeral) Outgoing caller’s number. It is considered the user account number. The list of users should be stored in the widget settings in the ‘phones’ key in the’ users’ type field in the format {user_id: phone} or in the ‘phones_lp’ key in the ‘users_lp’ type field. Then the phone number you search for will be the value in the login key of the array element ‘phones_lp’.
to

require

string (numeral) Incoming caller’s number. It is considered the user account number. The list of users should be stored in the widget settings in the ‘phones’ key in the’ users’ type field in the format {user_id: phone} or in the ‘phones_lp’ key in the ‘users_lp’ type field. Then the phone number you search for will be the value in the login key of the array element ‘phones_lp’.
date

require

timestamp Call date.
type

require

string Call type (inbound – incoming, outbound – outgoing).
billsec

require

int Call duration in seconds.
link string File link with call recording.

Here is an example of the add call request.

Integration example

<?php $calls['request']['add'] = array( 0 => array(
        'uuid' => '394427aaf821879e29efbc4eb98ef13271514',
        'caller' => 117,
        'to' => '14155237743',
        'date' => 1414654739,
        'billsec' => 98,
        'type' => 'inbound',
        'link' => 'http:///* link of recording */.mp3',
        'account_id' => 1111111
    ),
    1 => array(
        'uuid' => 'b7095fb33b368c7103626d3943d9e61c14697',
        'caller' => 280,
        'to' => '12566079249',
        'date' => 1414653676,
        'billsec' => 57,
        'type' => 'outbound',
        'link' => 'http:///* link of recording */.mp3',
        'account_id' => 1111111
    ),
);
$code = 'my_service_name'; # Your widget code in amoCRM
$key = '601eb8fab9707d8009dba552f2d411a3'; # a key, which you get in tech support
$account_id = 39099; # Account identification number where calls are added
#Form a request link
$link = 'https://sip.amocrm.com/api/calls/add/?code=' . $code . '&key=' . $key . '&account_id=' . $account_id;
#Alternatively, you can send the request link without the account_id by sending it in an array with the call data
$curl = curl_init(); #Save the descriptor of the cURL session
#Set the necessary options for the cURL session
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_USERAGENT, 'amoCRM-API-client/1.0');
curl_setopt($curl, CURLOPT_HEADER, FALSE);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_URL, $link);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($calls));
$out = curl_exec($curl); #Initiate an API request and save the output in a variable
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$code = (int)$code;
$errors = array(
    301 => 'Moved permanently',
    400 => 'Bad request',
    401 => 'Unauthorized',
    403 => 'Forbidden',
    404 => 'Not found',
    500 => 'Internal server error',
    502 => 'Bad gateway',
    503 => 'Service unavailable'
);
try {
    #If the response code is not equal 200 or 204 - return the error message
    if ($code != 200 && $code != 204)
        throw new Exception(isset($errors[$code]) ? $errors[$code] : 'Undescribed error', (int)$code);
} catch (Exception $E) {
    die('Error: ' . $E->getMessage() . PHP_EOL . 'Error code: ' . $E->getCode());
}
/*
 Because we receive data in JSON format,
 we need to translate the response into a format that PHP recognizes to get readable data
 */
$response = json_decode($out, TRUE);
if (count($response['response']['calls']['add']['success']) > 0) {
    $output .= 'Successfully added calls:' . PHP_EOL;
    foreach ($response['response']['calls']['add']['success'] as $v) {
        $output .= $v . PHP_EOL;
    }
}
if (count($response['response']['calls']['add']['errors']) > 0) {
    $output .= 'Errors:' . PHP_EOL;
    foreach ($response['response']['calls']['add']['errors'] as $uuid => $reasons) {
        $output .= $uuid . ' - ' . implode(', ', $reasons) . PHP_EOL;
    }
}