Page tree

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

This page contains code snippets that demonstrate various Unified API requests that can be implemented in your App. Download.

Requirements

Python 2.7.3+ with SSL support is required.

Request Access Token for a Trusted App

import httplib
import json

# Modify these values with the ones you intend to use
VN_SERVER_ADDRESS = 'CHANGEME'
APP_KEY = 'CHANGEME'
APP_SECRET = 'CHANGEME'
REDIRECT_URI = 'https://' + VN_SERVER_ADDRESS + '/ouath/token.php'
TYPE = 'unifiedapi'
URI = 'https://' + VN_SERVER_ADDRESS + '/oauth/token.php' 

# Setup the requests parameters
headers = {"Content-type": "application/x-www-form-urlencoded"}
content = "&client_id=" + APP_KEY + "&client_secret=" + APP_SECRET + "&grant_type=client_credentials&type=" + TYPE + "&redirect_uri=" + REDIRECT_URI
conn = httplib.HTTPSConnection(VN_SERVER_ADDRESS)
conn.request("POST",URI, content, headers)

# Parses the JSON response
response = conn.getresponse()
print json.dumps(json.loads(response.read()), indent=4)

This request will have the following output:

{
    "access_token": "1|W-rhVICLEV-NsP3AAEN-mNCDEBHz-7bf|1|1402415213|x-5nQMXISV_XGTS6Yg2_kOB2TNnH_S0d",
    "token_type": "Bearer",
    "expires_in": 7200
}

Make a Call Between Two Public Numbers

The example below demonstrates how you can use Unified API to connect two public numbers, not registered with VoipNow. It uses the Create Simple PhoneCalls request.

import httplib
import json

# Modify these values with the ones you intend to use
VN_SERVER_ADDRESS   = 'CHANGEME'
API_ACCESS_TOKEN    = 'CHANGEME'
EXTENSION_NUMBER    = 'CHANGEME'
PUBLIC_NUMBER1      = 'CHANGEME'
PUBLIC_NUMBER2      = 'CHANGEME'

# Setup the requests parameters
data = {
    "extension": EXTENSION_NUMBER,
    "phoneCallView" : [{
        "source" : PUBLIC_NUMBER1,
        "destination": PUBLIC_NUMBER2            
    }]
}

headers = {"Content-type": "application/json", "Authorization": "Bearer " + API_ACCESS_TOKEN}

# Makes a HTTP POST request using SSL
conn = httplib.HTTPSConnection(VN_SERVER_ADDRESS)
conn.request("POST", "/uapi/phoneCalls/@me/simple", json.dumps(data), headers)

# Parses the JSON response
response = conn.getresponse()
print json.dumps(json.loads(response.read()), indent=4) 

Make a Sandbox Call

import httplib
import json

# Modify these values with the ones you intend to use
VN_SERVER_ADDRESS 	= 'CHANGEME'
API_ACCESS_TOKEN 	= 'CHANGEME'
EXTENSION_NUMBER    = 'CHANGEME'
SANDBOX_NUMBER 		= 'CHANGEME'

# Setup the requests parameters
data = {
	"extension": EXTENSION_NUMBER,
	"phoneCallView" : [{
		"source" : EXTENSION_NUMBER,
		"destination": SANDBOX_NUMBER			
	}]
}
headers = {"Content-type": "application/json", "Authorization": "Bearer " + API_ACCESS_TOKEN}

# Makes a HTTP POST request using SSL
conn = httplib.HTTPSConnection(VN_SERVER_ADDRESS)
conn.request("POST", "/uapi/phoneCalls/@me/simple", json.dumps(data), headers)

# Parses the JSON response
response = json.loads(conn.getresponse().read())
print json.dumps(response, indent=4)

Park a Phone Call

The example below demonstrates how you can use Unified API to park a party of an ongoing phone call. It uses the Park PhoneCalls request.

'''
4PSA VoipNow UnifiedAPI Example: Phone Call Parking
This script will transfer a public phone call.
@version 1.0.0
@license released under GNU General Public License
@copyright (c) 2013 4PSA. (www.4psa.com). All rights reserved.
@link http://wiki.4psa.com
'''
import httplib
import json
# Modify these values with the ones you intend to use
VN_SERVER_ADDRESS       = 'CHANGEME'
API_ACCESS_TOKEN        = 'CHANGEME'
PHONECALL_ID            = 'CHANGEME'
PHONECALLVIEW_ID        = 'CHANGEME'
# Setup the requests parameters
data = {
    'action': 'Park',
    'phoneCallViewId': PHONECALLVIEW_ID
}
headers = {"Content-type": "application/json", "Authorization": "Bearer " + API_ACCESS_TOKEN}
# Makes a HTTP PUT request using SSL
conn = httplib.HTTPSConnection(VN_SERVER_ADDRESS)
conn.request("PUT", "/unifiedapi/phoneCalls/@me/@self/"+PHONECALL_ID, json.dumps(data), headers)
# Parses the JSON response
response = conn.getresponse()
print json.dumps(json.loads(response.read()), indent=4)

Transfer a Call to a Public Number

The example below demonstrates how you can use Unified API to transfer a call to a public number, not registered with VoipNow. It uses the Transfer PhoneCalls request.

import httplib
import json

# Modify these values with the ones you intend to use
VN_SERVER_ADDRESS            = 'CHANGEME'
API_ACCESS_TOKEN             = 'CHANGEME'
PHONECALL_ID                 = 'CHANGEME'
PHONECALLVIEW_ID             = 'CHANGEME'
TRANSFER_DESTINATION_NUMBER  = 'CHANGEME'

# Setup the requests parameters
data = {
    'action': 'Transfer',
    'sendCallTo': TRANSFER_DESTINATION_NUMBER,
    'phoneCallViewId': PHONECALLVIEW_ID
}
headers = {"Content-type": "application/json", "Authorization": "Bearer " + API_ACCESS_TOKEN}

# Makes a HTTP PUT request using SSL
conn = httplib.HTTPSConnection(VN_SERVER_ADDRESS)
conn.request("PUT", "/uapi/phoneCalls/@me/@self/"+PHONECALL_ID, json.dumps(data), headers)

# Parses the JSON response
response = conn.getresponse()
print json.dumps(json.loads(response.read()), indent=4) 

Record an Ongoing Conversation

The example below demonstrates how you can use Unified API to record an ongoing conversation. This action is possible for phone numbers that are registered with VoipNow. The recording is saved in the wav format and uses the StartRecording PhoneCalls request.

import httplib
import json

# Modify these values with the ones you intend to use
VN_SERVER_ADDRESS       = 'CHANGEME'
API_ACCESS_TOKEN        = 'CHANGEME'
PHONECALL_ID            = 'CHANGEME'
PHONECALLVIEW_ID        = 'CHANGEME'

# Setup the requests parameters
data = {
    'action': 'StartRecording',
    'format': 'wav',
    'phoneCallViewId': PHONECALLVIEW_ID
}
headers = {"Content-type": "application/json", "Authorization": "Bearer " + API_ACCESS_TOKEN}

# Makes a HTTP PUT request using SSL
conn = httplib.HTTPSConnection(VN_SERVER_ADDRESS)
conn.request("PUT", "/uapi/phoneCalls/@me/@self/"+PHONECALL_ID, json.dumps(data), headers)

# Parses the JSON response
response = conn.getresponse()
print json.dumps(json.loads(response.read()), indent=4)

Log in an Agent to a Queue

The example below demonstrates how you can use Unified API to log in an agent to a queue. It uses the Update QueueAgents request.

import httplib
import json

# Modify these values with the ones you intend to use
VN_SERVER_ADDRESS       = 'CHANGEME'
API_ACCESS_TOKEN        = 'CHANGEME'
QUEUE_NUMBER            = 'CHANGEME'
AGENT_NUMBER            = 'CHANGEME'

# Setup the requests parameters
data = {'status': '1'}
headers = {"Content-type": "application/json", "Authorization": "Bearer " + API_ACCESS_TOKEN}

# Makes a HTTP PUT request using SSL
conn = httplib.HTTPSConnection(VN_SERVER_ADDRESS)
conn.request("PUT", "/uapi/extensions/@me/"+QUEUE_NUMBER+"/queue/agents/"+AGENT_NUMBER, json.dumps(data), headers)

# Parses the JSON response
response = conn.getresponse()
print json.dumps(json.loads(response.read()), indent=4)

List the Registration Status of an Extension

The example below demonstrates how you can use Unified API to list the status of an extension. It uses the List Presence request.

import httplib
import json

# Modify these values with the ones you intend to use
VN_SERVER_ADDRESS       = 'CHANGEME'
API_ACCESS_TOKEN        = 'CHANGEME'
EXTENSION_NUMBER        = 'CHANGEME'

# Setup the requests parameters
headers = {"Content-type": "application/json", "Authorization": "Bearer " + API_ACCESS_TOKEN}

# Makes a HTTP GET request using SSL
conn = httplib.HTTPSConnection(VN_SERVER_ADDRESS)
conn.request("GET", "/uapi/extensions/@me/"+EXTENSION_NUMBER+"/presence", None, headers)

# Parses the JSON response
response = conn.getresponse()
print json.dumps(json.loads(response.read()), indent=4)
#trackbackRdf ($trackbackUtils.getContentIdentifier($page) $page.title $trackbackUtils.getPingUrl($page))
  • No labels

Except where otherwise noted, content in this space is licensed under a Creative Commons Attribution 4.0 International.