The Pivot whapp gives developers greater control over callflows than what comes natively in Kazoo. Pivot attempts to corral the salient data and send it, via HTTP to the developer's web server. Pivot expects a response with appropriate XML or JSON, and will execute the callflow returned on behalf of the developer.

Example Callflow#

The most basic callflow for Pivot:



Kazoo JSON TwiML subset


You can set the debug flag to "true" to log the requests and responses Pivot receives from your Pivot callflows.


curl -H "X-Auth-Token: {AUTH_TOKEN} -H "Content-Type: application/json" 'http://your.crossbar.server/v2/accounts/{ACCOUNT_ID}/pivot/debug'


Specific Call#

curl -H "X-Auth-Token: {AUTH_TOKEN} -H "Content-Type: application/json" 'http://your.crossbar.server/v2/accounts/{ACCOUNT_ID}/pivot/debug/{CALL_ID}'

{ "auth_token": "{AUTH_TOKEN}", "data": [ { "call_id": "{CALL_ID}", "id": "{DEBUG_ID}", "method": "get", "req_body": "", "req_headers": {}, "uri": "http://your.pivot.server/script.php?Caller-ID-Number=XXXXXXXXXX&Caller-ID-Name=JoeFromIT&Direction=inbound&ApiVersion=2013-05-01&ToRealm=your.pivot.server&To=3004&FromRealm=your.pivot.server&From=user_sov2kt&Account-ID={ACCOUNT_ID}&Call-ID={CALL_ID}" }, { "call_id": "{CALL_ID}", "id": "{DEBUG_ID}", "resp_body": "\n {\"module\":\"say\"\n ,\"data\":{\"text\":\"Please leave your message after the beep\"}\n ,\"children\":{\n \"_\":{\n \"module\":\"record_caller\"\n ,\"data\":{\n \"format\":\"mp3\"\n ,\"url\":\"http://your.pivot.server/recordings\"\n ,\"time_limit\":360\n }\n }\n }\n }\n" }, { "call_id": "{CALL_ID}", "id": "{DEBUG_ID}", "resp_headers": { "content-length": "342", "content-type": "application/json", "date": "wed, 01 oct 2014 23:30:24 gmt", "server": "apache/2.4.7 (ubuntu)", "x-powered-by": "php/5.5.9-1ubuntu4.4" }, "resp_status_code": "200" } ], "request_id": "{REQUEST_ID}", "revision": "{REVISION}", "status": "success" }

Remember to URL-encode the {CALL_ID} before sending the request.


You can add a children to your pivot callflow in case your server is unrechable or send back an error.

"flow": {
    "data": {
        "method": "GET",
        "req_timeout": "5",
        "req_format": "kazoo",
        "voice_url": "{SERVER_URL}"
    "module": "pivot",
    "children": {
        "_": {
            "module": "play",
            "data": {
                "id": "{MEDIA_ID}"
            "children": {}

Edit this page here