Pivot#

About Myself#

  1. About Myself

    • James Aimonetti
      • Eye-Moe-Net-Tea
      • Commit to memory Patrick!
    • Kazoo Architect and Community at 2600Hz
    • mc_ on freenode
  2. Presenter

    img

High-level#

  • Point a callflow at your server
  • Process the call against your business logic
  • Return Kazoo callflow JSON

Flow#

img

Setting up Kazoo#

  • create a callflow
  • set the pivot action as the child
  • set the URL to your webserver and script
curl -X PUT \
-H "x-auth-token: {AUTH_TOKEN}" \
-H "content-type: application/json" \
-d '{"data":{
  "numbers":["12345"]
  ,"flow":{
    "module":"pivot"
    ,"data":{
      "voice_url":"http://your.server/pivot.php"
    }
  }
 }
}' \
http://crossbar:8000/v2/accounts/{ACCOUNT_ID}/callflows

Pivot will attempt to reach your server for calls to that callflow.

The Request#

  • GET - query string parameters
  • POST - x-www-form-urlencoded request body

Common Request Fields#

Name Description
Call-ID SIP Call-ID field
Request SIP Request user
To SIP To user
From SIP From user
Account-ID Kazoo Account ID
Caller-ID-Name CID Name
Caller-ID-Number CID Number

Other Request Fields#

Name Description
Digits DTMFs (or collections) received
User-ID Owner ID(s) of the calling device
Language Configured by the device/user/account

Create a handler#

  • Create the script that Pivot will call
  • Process and build the Kazoo callflow JSON
  • Set Content-Type to application/json
  • Return the JSON as the body of the HTTP response

Let's Build something!#

Example Time!

Say something#

Say Hi to the caller#

Play an MP3 to the caller#

Bridging the caller to a user#

Bridge to:

Bridging the caller to a carrier#

  • Toggle between local and global resources
  • Statically define a number to dial out to
  • See the schema for all the data options

Collecting DTMF#

First, collect the DTMF

Collecting DTMF#

A followup HTTP request will be sent to http://pivot.your.company.com/collected.php

  • Request includes Digits[custom_name]=1234
  • DTMF can either come as a basic string (if no custom name is used) or an array.
  • Let's see how to process them.

Collecting DTMF#

Sending Presence Updates#

Send custom presence updates

  • Some IoT devices/appliances can process SIP NOTIFY
  • presence_id can be name or name@realm
  • status can be idle, ringing, or busy

Callflow actions#

  1. Bridging

    • Device
    • User
    • Group
    • Resource
    • Conference
    • Voicemail Box
    • Fax Box
  2. Caller ID

    • Statically set Caller ID
    • Dynamically set Caller ID
    • Prepend Caller ID
    • Routing via Whitelist or Regex of Caller IDs

Callflow actions (cont)#

  1. Features

    • Eavesdrop
    • Group Pickup
    • Intercept
    • Page Groups
    • Hotdesk
  2. Miscellaneous

    • Toggle call forwarding
    • Toggle Do Not Disturb
    • Directory services
    • DISA
    • Detect incoming fax
    • Menus
    • Custom Webhook

Brainstorm#

  1. Possible Integrations

    • Calendars (Office365, Google, etc)
    • Put received media (vm, fax) into services (storage, chat)
    • Ad-driven, free calling?
    • Digital assistants
    • IVR Analytics (track stats as callers progress)
    • CRM/Salesforce access
    • Combine with metaflows and webhooks: call queues
    • Your Ideas?

What's Next?#

  1. In Progress

    • Building automated doc generation
    • Continuing to add callflow actions
  2. How can you help?

    • Build, build, build!
    • Blog, blog, blog!
    • Contribute to the docs effort
      • Take ref docs and create/update the real docs

Thank You#

Edit this page here