Sample code for 30+ languages & platforms
C

CallRail API - Create an Outbound Phone Call

See more CallRail Examples

Initiates an outbound call from the target account.

Chilkat C Downloads

C
#include <C_CkHttp.h>
#include <C_CkJsonObject.h>
#include <C_CkHttpResponse.h>
#include <C_CkStringBuilder.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkHttp http;
    HCkJsonObject json;
    HCkHttpResponse resp;
    HCkStringBuilder sbResponseBody;
    HCkJsonObject jResp;
    int respStatusCode;
    const char *answered;
    const char *business_phone_number;
    const char *customer_city;
    const char *customer_country;
    const char *customer_name;
    const char *customer_phone_number;
    const char *customer_state;
    const char *direction;
    const char *duration;
    const char *id;
    const char *recording;
    const char *recording_duration;
    const char *start_time;
    const char *tracking_phone_number;
    BOOL voicemail;

    success = FALSE;

    // This example assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    http = CkHttp_Create();

    // Implements the following CURL command:

    // curl -H "Authorization: Token token={api_token}" \
    //      -X POST \
    //      -H "Content-Type: application/json" \
    //      -d '{
    //           "caller_id": "+17703334455",
    //           "business_phone_number": "+14045556666",
    //           "customer_phone_number": "+14044442233",
    //           "recording_enabled": true,
    //           "outbound_greeting_recording_url": "http://www.test.com/greeting.mp3",
    //           "outbound_greeting_text": "These are not the droids you are looking for."
    //          }' \
    //          "https://api.callrail.com/v3/a/{account_id}/calls.json"

    // Use the following online tool to generate HTTP code from a CURL command
    // Convert a cURL Command to HTTP Source Code

    // Use this online tool to generate code from sample JSON:
    // Generate Code to Create JSON

    // The following JSON is sent in the request body.

    // {
    //   "caller_id": "+17703334455",
    //   "business_phone_number": "+14045556666",
    //   "customer_phone_number": "+14044442233",
    //   "recording_enabled": true,
    //   "outbound_greeting_recording_url": "http://www.test.com/greeting.mp3",
    //   "outbound_greeting_text": "These are not the droids you are looking for."
    // }

    json = CkJsonObject_Create();
    CkJsonObject_UpdateString(json,"caller_id","+17703334455");
    CkJsonObject_UpdateString(json,"business_phone_number","+14045556666");
    CkJsonObject_UpdateString(json,"customer_phone_number","+14044442233");
    CkJsonObject_UpdateBool(json,"recording_enabled",TRUE);
    CkJsonObject_UpdateString(json,"outbound_greeting_recording_url","http://www.test.com/greeting.mp3");
    CkJsonObject_UpdateString(json,"outbound_greeting_text","These are not the droids you are looking for.");

    CkHttp_SetRequestHeader(http,"Authorization","Token token={api_token}");
    CkHttp_SetRequestHeader(http,"Content-Type","application/json");

    resp = CkHttpResponse_Create();
    success = CkHttp_HttpJson(http,"POST","https://api.callrail.com/v3/a/{account_id}/calls.json",json,"application/json",resp);
    if (success == FALSE) {
        printf("%s\n",CkHttp_lastErrorText(http));
        CkHttp_Dispose(http);
        CkJsonObject_Dispose(json);
        CkHttpResponse_Dispose(resp);
        return;
    }

    sbResponseBody = CkStringBuilder_Create();
    CkHttpResponse_GetBodySb(resp,sbResponseBody);
    jResp = CkJsonObject_Create();
    CkJsonObject_LoadSb(jResp,sbResponseBody);
    CkJsonObject_putEmitCompact(jResp,FALSE);

    printf("Response Body:\n");
    printf("%s\n",CkJsonObject_emit(jResp));

    respStatusCode = CkHttpResponse_getStatusCode(resp);
    printf("Response Status Code = %d\n",respStatusCode);
    if (respStatusCode >= 400) {
        printf("Response Header:\n");
        printf("%s\n",CkHttpResponse_header(resp));
        printf("Failed.\n");
        CkHttp_Dispose(http);
        CkJsonObject_Dispose(json);
        CkHttpResponse_Dispose(resp);
        CkStringBuilder_Dispose(sbResponseBody);
        CkJsonObject_Dispose(jResp);
        return;
    }

    // Sample JSON response:
    // (Sample code for parsing the JSON response is shown below)

    // {
    //   "answered": null,
    //   "business_phone_number": "+19044567899",
    //   "customer_city": "Atlanta",
    //   "customer_country": "US",
    //   "customer_name": null,
    //   "customer_phone_number": "+14703444700",
    //   "customer_state": "GA",
    //   "direction": "outbound",
    //   "duration": null,
    //   "id": "CAL8154748ae6bd4e278a7cddd38a662f4f",
    //   "recording": null,
    //   "recording_duration": null,
    //   "start_time": "2017-02-22T15:02:24.916-05:00",
    //   "tracking_phone_number": "+19044567899",
    //   "voicemail": false
    // }

    // Sample code for parsing the JSON response...
    // Use the following online tool to generate parsing code from sample JSON:
    // Generate Parsing Code from JSON

    // Chilkat functions returning "const char *" return a pointer to temporary internal memory owned and managed by Chilkat.
    // See this example explaining how this memory should be used: const char * functions.

    answered = CkJsonObject_stringOf(jResp,"answered");
    business_phone_number = CkJsonObject_stringOf(jResp,"business_phone_number");
    customer_city = CkJsonObject_stringOf(jResp,"customer_city");
    customer_country = CkJsonObject_stringOf(jResp,"customer_country");
    customer_name = CkJsonObject_stringOf(jResp,"customer_name");
    customer_phone_number = CkJsonObject_stringOf(jResp,"customer_phone_number");
    customer_state = CkJsonObject_stringOf(jResp,"customer_state");
    direction = CkJsonObject_stringOf(jResp,"direction");
    duration = CkJsonObject_stringOf(jResp,"duration");
    id = CkJsonObject_stringOf(jResp,"id");
    recording = CkJsonObject_stringOf(jResp,"recording");
    recording_duration = CkJsonObject_stringOf(jResp,"recording_duration");
    start_time = CkJsonObject_stringOf(jResp,"start_time");
    tracking_phone_number = CkJsonObject_stringOf(jResp,"tracking_phone_number");
    voicemail = CkJsonObject_BoolOf(jResp,"voicemail");


    CkHttp_Dispose(http);
    CkJsonObject_Dispose(json);
    CkHttpResponse_Dispose(resp);
    CkStringBuilder_Dispose(sbResponseBody);
    CkJsonObject_Dispose(jResp);

    }