FAQs‎ > ‎

API (tacserver2) Documentation

NetSapiens Low-Level Web Api (aka tac2).

This document describes NetSapiens tacserver2, a RESTful web service for NetSapiens applications (e.g., Nms, Ncs, etc...) that provides direct internal access to the NetSapiens platform. The advantage of the low level api is that it allows you (the administrator/developer) to do 'everything'. The disadvantage is, because it is direct access to the NetSapiens platform internals, the interface is subject to change of varying degree from time to time. One way to mitigate this disadvantage is to create an abstraction layer to isolate the implementation details.

Note for admin- when installing tacserver2, be sure to put the following lines in /etc/httpd/conf.d/ssl.conf inside the <VirtualHost _default_:443> directive

AllowEncodedSlashes On
RewriteEngine On
RewriteOptions Inherit

Otherwise you'll get obscure percentDecoding issues on resource paths that have / and % characters, etc...

Contents

  1. 1 Overview
    1. 1.1 GET
      1. 1.1.1 where
      2. 1.1.2 ranges
    2. 1.2 PUT
    3. 1.3 POST
    4. 1.4 DELETE
    5. 1.5 Method Tunneling
  2. 2 Resources
    1. 2.1 time_zone_name
    2. 2.2 config_config
    3. 2.3 ui_config
    4. 2.4 /activecalls/{term_callid}
      1. 2.4.1 Transfer
    5. 2.5 proc
    6. 2.6 callrequest_config
      1. 2.6.1 Example: click to call
      2. 2.6.2 Example: leave voicemail
    7. 2.7 cdr
      1. 2.7.1 get cdr
    8. 2.8 dialplans
      1. 2.8.1 Example: create a dialplan
    9. 2.9 dial rules
      1. 2.9.1 Example: create a dial rule
      2. 2.9.2 Example: update a dialplan
      3. 2.9.3 Example: delete a dialplan
    10. 2.10 domains_config
    11. 2.11 subscriber_config
      1. 2.11.1 /subscriber_config/
      2. 2.11.2 /domains_config/{aor_host}/subscriber_config/
      3. 2.11.3 /domains_config/{aor_host}/subscriber_config/{aor_user}
      4. 2.11.4 GET
      5. 2.11.5 PUT
      6. 2.11.6 DELETE
    12. 2.12 feature_config
    13. 2.13 phone_book
      1. 2.13.1 /domains_config/{domain}/subscriber_config/{user}/phone_book/{last_name,first_name,middle_name}
      2. 2.13.2 GET
      3. 2.13.3 PUT
      4. 2.13.4 DELETE
    14. 2.14 speeddial
      1. 2.14.1 get speeddial
      2. 2.14.2 set speeddial
      3. 2.14.3 delete speeddial
    15. 2.15 registrar_config
      1. 2.15.1 GET
      2. 2.15.2 PUT
      3. 2.15.3 DELETE
    16. 2.16 vmail
    17. 2.17 conference_config
      1. 2.17.1 example
    18. 2.18 participant_config
      1. 2.18.1 /domains_config/{}/subscriber_config/{}/conference_config/{conference_match}/participant_config{participant_match}
    19. 2.19 NpsDomain.account
      1. 2.19.1 signup a prepaid account
      2. 2.19.2 Refill prepaid account
      3. 2.19.3 Prepaid cards (new feature)
      4. 2.19.4 Signup a postpaid account
      5. 2.19.5 Pay balance due on postpaid account
      6. 2.19.6 Trigger a callback
    20. 2.20 NpsDomain.audit_log
    21. 2.21 NpsDomain.recharge_cards
      1. 2.21.1 /recharge_cards/{domain},{serial_number}
    22. 2.22 GET
    23. 2.23 PUT
    24. 2.24 DELETE
    25. 2.25 /operators
    26. 2.26 huntgroup_config
    27. 2.27 huntgroup_entry_config
    28. 2.28 Nms - Lidf (recordings, delivery function)
    29. 2.29 /lidf_lea_config/{lea_id}
    30. 2.30 /cdr/{term_callid}/licf_cdc
    31. 2.31 /cdr/{term_callid}/lidf_lea_config/{lea_id}/lidf_lic_config/{case_id}/licf_cdc
    32. 2.32 /cdr/{term_callid}/lidf_lea_config/{lea_id}/lidf_lic_config/{case_id}/licf_cdc/{call_id}
      1. 2.32.1 Example
    33. 2.33 Licf (recordings, collection function)
    34. 2.34 /licf_cdc/{acc_elm}/{case_id}/{call_id}
    35. 2.35 /licf_cdc/{acc_elm}/{case_id}/{call_id}/licf_ccc
    36. 2.36 /licf_cdc/{acc_elm}/{case_id}/{call_id}/licf_ccc.wav
      1. 2.36.1 GET
    37. 2.37 /phones_config/{mac}
  3. 3 Appendix
    1. 3.1 More Examples
      1. 3.1.1 get domains
      2. 3.1.2 get subscribers
      3. 3.1.3 create subscriber
      4. 3.1.4 get subscriber
      5. 3.1.5 suspend subscriber
      6. 3.1.6 unsuspend subscriber
      7. 3.1.7 get subscriber devices
      8. 3.1.8 create subscriber device
      9. 3.1.9 get subscriber device
      10. 3.1.10 delete subscriber device
      11. 3.1.11 delete subscriber
  4. 4 History

Overview

TacServer is a web service agent that works on behalf of a NetSapiens daemon service. For example, if TacServer is installed on a Nms server then TacServer acts as a web service agent for Nms.

GET

In TacServer, generally speaking, urls return a list of 0 or more resources, encoded as html forms. The html forms serve to (a) document the resource and (b) make it easy to debug/explore the api with a web browser, e.g,. firefox.

where

When retrieving resource lists, you can specify "where" critera, e.g.:

GET /cdr/?orig_domain=example.com

ranges

When retrieving resource lists, you can specify "range" critera in [x,y) format, e.g.:

To get a list of all cdrs for the month of January, 2007:

GET /cdr/?time_release=2007-01,2007-02

To get a list of all cdrs with a time_talking less than 10 seconds:

GET /cdr/?time_talking=,10

To get a list of all cdrs with a time_talking 10 seconds and greater:

GET /cdr/?time_talking=10,

Note- that still only returns the first 20 cdrs; you still need to use _start and _limit to page thru the entire result set. _sort

e.g., _sort=-time_release

use + and - for "ascending" or "descending" sort order _start and _limit

By default tacserver2 returns the first 20 results of any resource list query. That is, by default, _start=0 and _limit=20. Getting resources

PUT

e.g., set domains_config.description to "NetSapiens, Inc."

PUT /domains_config/netsapiens.com HTTP/1.1 Content-Type: application/x-www-form-urlencoded Content-Length: zzz

description=NetSapiens,+Inc.

POST

A post request is a non-idempotent request.

An example of a post request is posting a callrequest resource to the "/callrequest/" url to let the platform choose a request_id.

DELETE

To delete a resource simply issue a http delete request to the resource's url.

Method Tunneling

Web browsers typically do not support HTTP PUT and HTTP DELETE.

You can tunnel a PUT request thru a POST request by setting _method=put, e.g., the following requests are equivalent:

PUT /domains_config/example.com HTTP/1.0

moh=yes&description=foo
POST /domains_config/example.com?_method=put HTTP/1.0

moh=yes&description=foo

You can tunnel a DELETE request thru a GET request by setting _method=delete, e.g., the following requests are equivalent:

DELETE /domains_config/example.com HTTP/1.0
GET /domains_config/example.com?_method=delete HTTP/1.0


Resources

time_zone_name

config_config

ui_config

/activecalls/{term_callid}

action
  • nop
  • drop
  • xfer_orig
  • xfer_term
  • tap

To end an an active call issue HTTP DELETE to /activecalls/{term_callid}

Transfer

(a) set action="xfer_orig" or "xfer_term" (depending on whether you want to transfer the caller or the callee) (b) set action_parameter to the transfer target, e.g., "sip:2001@mydomain.com" or "sip:2125551212@mydomain.com"

Transfer is a "fire and forget" operation. If you want to poll for completion then poll "action" for "nop". proc

proc

/proc/{pid}

callrequest_config

/callrequest_config/{request_id}

request_address
the account the call is charged against
orig_address
aka "1st leg"
dest_address
aka "2nd leg"
request 
the call request kind:
  • Call-Back
  • Call-Play : "message" contains greeting wav file to play
  • Call-Record-Account
  • Call-Record-Greeting
  • Call-Record-Name
  • Call-Record-Reply
  • Call-Record-Reply-Group
  • Call-Record-Reply-Domain
  • Call-Record-WordFile
  • Call-Say-Time
  • Call-To-Announce

// "with intro"

  • Call-To-Forward (individual)
  • Call-To-Forward-Group
  • Call-To-Forward-Domain
  • Call-To-Talk
  • Call-To-Listen

// "without intro"

  • VMail-Forward (individual)
  • VMail-Forward-Group
  • VMail-Forward-Domain
request_status 
pending failed queued calling answered confirmed completed

Example: click to call

This is an example of how to invoke "click to call":

curl -X POST -u "login:password" "https://api.netsapiens.com/api/callrequest_config/" -d request=Call-To-Talk -d request_address=1212@example.com -d orig_address=1212@example.com -d dest_address=18004664411
login 
tacserver api login
password 
tacserver api password

This example causes the platform to make a call from user 1212 to a pstn number, charged against user 1212. User 1212 called and then connected to the pstn number.

Example: leave voicemail

Here is an example of how to invoke "leave voicemail" from user 1212 to user 3434 (charged against 1212)

request 
Call-Record-Reply
request_address 
1212@example.org
request_status 
pending
orig_address 
1212@example.org
dest_address 
3434@example.org

This will cause the platform to call user 1212 to record voicemail and then leave that voicemail in user 3434's new folder.

cdr

orig_callid and term_callid together form the primary key for a cdr

orig_callid

orig_ip

orig_match

orig_sub
subscriber_config.aor_user
orig_domain
subscriber_config.aor_host
orig_from_uri

orig_from_name

orig_from_user
(convenience)
orig_from_host
(convenience)
orig_req_uri

orig_req_user
(convenience)
orig_req_host
(convenience)
orig_to_uri

orig_to_user
(convenience)
orig_to_host
(convenience)
by_action

by_sub
subscriber_config.aor_user
by_domain
subscriber_config.aor_host
by_uri

by_callid

term_callid

term_ip

term_match

term_sub
subscriber_config.aor_user
term_domain
subscriber_config.aor_host
term_to_uri

time_start

time_ringing

time_answer

time_release

time_talking

time_holding

duration

time_insert

time_disp

release_code

release_text

codec

rly_prt_0

rly_prt_a

rly_prt_b

rly_cnt_a

rly_cnt_b

image_codec

image_prt_0

image_prt_a

image_prt_b

image_cnt_a

image_cnt_b

video_codec

video_prt_0

video_prt_a

video_prt_b

video_cnt_a

video_cnt_b

disp_type

disposition

reason

notes

pac

orig_logi_uri

term_logi_uri

batch_tim_beg

batch_tim_ans

batch_hold

batch_dura

orig_id

term_id

by_id

route_to

route_class

get cdr

GET /cdr/{orig_callid},{term_callid}

dialplans

/domains_config/{domain}/dialplans/{dialplan}

a dialplan has 0 or more dialrules

dialplan 
e.g., "Default for netsapiens.com"
domain 
the domain of the owner of the dial plan or "*" for a global dial plan
description 
a description for the dialplan

to retrieve a list of dialplans issue a HTTP GET to /domains_config/{domain}/dialplans/

list can be paged thru using start and limit query parameters

e.g., GET /domains_config/netsapiens.com/dialplans/?start=20&limit=10

Example: create a dialplan

PUT /domains_config/vbox.netsapiens.com/dialplans/netsapiens.com/My%20Default HTTP/1.1

dial rules

a dialplan_config is a dial rule

a dial plan has 0 or more dial rules

/domains_config/{domain}/dialplans/{dialplan}/dialplan_config/{matchrule},{match_from},{dow},{tod_from},{tod_to},{valid_from},{valid_to}

domain 
can be (a) * (b) admin-only (c) or a valid domain from /domains_config
dialplan 

matchrule 

match_from 

dow 

tod_from 

tod_to 

valid_from
valid_to 

responder 

parameter 

to_scheme 

to_user 

to_host 

from_name 

from_scheme 

from_user 

from_host 

plan_description 

Example: create a dial rule

typical case is 11 digits@* (but could be different), e.g., sip:12125551212@*

Here we're gonna leverage two (2) conventions: (a) use the "admin-only" pseudo domain and (b) use the "DID Table" dial plan.

The admin-only pseudo domain is a global/platform-wide psuedo domain that is used for dial plans that do not apply to any particular domain, e.g., used for incoming DIDs.

The "DID Table" dial plan is a global/platform-wide dial plan that is used to contain all of the DIDs that the platform handles.

PUT /domains_config/admin-only/dialplans/DID+Table/dialplan_config/sip%3A12125551212%40*,*,*,*,*,*,* HTTP/1.1
Content-Length:x

from_name=[*]&
from_scheme=sip:&
from_user=[*]&
from_host=[*]&
to_scheme=sip:&
to_user=1212&
to_host=mydomain.com&
responder=sip:start@to-user&
plan_description=DID+for+12125551212

note the percentEncoding, i.e., "DID Table" => "DID+Table" and sip:12125551212@* => sip%3A12125551212%40*

Example: update a dialplan

PUT /domains_config/vbox.netsapiens.com/dialplans/netsapiens.com/dialplan_config/sip%3A5000%40*,*,*,*,*,*,* HTTP/1.1
Content-Length:x

description=my%20new%20description

Example: delete a dialplan

DELETE /domains_config/vbox.netsapiens.com/dialplans/netsapiens.com/dialplan_config/sip%3A5000%40*,*,*,*,*,*,* HTTP/1.1

domains_config

/domains_config/{domain}

To create a domain issue a HTTP PUT.

PUT /domains_config/mydomain.com

200 OK

To update a domain issue a HTTP PUT.

PUT /domains_config/mydomain.com

200 OK

To delete a domain issue a HTTP DELETE.

DELETE /domains_config/mydomain.com HTTP/1.0

200 OK

subscriber_config

presence 
(readOnly)
  • open (i.e., onhook)
  • closed (e.g., doNotDisturb)
  • inuse (i.e., offhook)
  • inactive (e.g., no registered devices)
portal_status 
subscriber's text status, e.g., "Available", "Busy", "Watching television"
email_vmail 
whether to send voice-mail notifications via email
  • no: disable
  • yes: enable - send notification with hyperlink
  • attnew: enable - send notification with attachment, leave in new folder
  • attsave: enable - send notification with attachment, move to saved folder
  • atttrash: enable - send notification with attachment, move to trash folder
  • brief: enable - send brief notification with hyperlink
  • briefattnew: enable - send brief notification with attachment, leave in new folder
  • briefattsave: enable - send brief notification with attachment, move to saved folder
  • briefatttrash: enable - send brief notification with attachment, move to trash folder

/subscriber_config/

list of subscribers

/domains_config/{aor_host}/subscriber_config/

list of subscribers for aor_host

/domains_config/{aor_host}/subscriber_config/{aor_user}

subscriber instance

GET

GET /domains_config/example.com/subscriber_config/1212

HTTP/1.1 200 OK Content-Type: text/html

<html>
 <head>
  <title>/domains_config/example.com/subscriber_config/1212</title>
 </head>
 <body>
  <div>
   <a href="1212/">1212/</a>
  </div>
  <form method="post">
   <table>
    <tr>
     <td>reject</td>
     <td>
      <input name="reject" type="text" value="" />
     </td>
    </tr>
    <tr>
     <td>callid_name</td>
     <td>
      <input name="callid_name" type="text" value="NetSapiens" />
     </td>
    </tr>
    <tr>
     <td>vmail_say_time</td>
     <td>
      <input name="vmail_say_time" type="text" value="no" />
     </td>
    </tr>
   </table>
   <input type="submit" value="put" />
   <input name="_method" type="hidden" value="put" />
  </form>
 </body>
</html>

To create or update a subscriber issue a HTTP PUT, e.g.,

PUT

PUT /domains_config/example.com/subscriber_config/1212

last_name=Simpson&first_name=Homer&subscriber_pin=0000

To delete a subscriber issue a HTTP DELETE, e.g.,

DELETE

DELETE /domains_config/example.com/subscriber_config/1212 HTTP/1.0

feature_config

/domains_config/{aor_host}/subscriber_config/{aor_user}/feature_config/{name},{caller_match},{day_match},{tod_from},{tod_to}

day_match is defined 0-6 (sun-sat) or * for all days

tod_from and tod_to are defined 00:00-23:59 or * for all day.

phone_book

/domains_config/{domain}/subscriber_config/{user}/phone_book/{last_name,first_name,middle_name}

GET

list of personal contacts

PUT

update phone_book resource

DELETE

delete phone_book resource

speeddial

user
e.g., 1212
domain
e.g., acme.com
speeddial
a two digit speedial number, e.g,. 01 or 02
last_name

first_name

middle_name

number
the phone number associated with the speeddial
recorded_name

get speeddial

list of speedial resources

e.g.,

GET /domains_config/example.com/subscriber_config/1212/speeddial/

set speeddial

PUT /domains_config/{domain}/subscriber_config/{user}/speeddial/{speeddial}

number=1800GOOG411

delete speeddial

DELETE /domains_config/{domain}/subscriber_config/{user}/speeddial/{speeddial}

registrar_config

GET

list of device resources

/domains_config/{domain}/subscriber_config/{subscriber}/registrar_config/{termination_match}

PUT

update device resource

DELETE

delete device resource

vmail

/domains_config/{domain}/subscriber_config/{subscriber}/vmail/new/*.wav

/domains_config/{domain}/subscriber_config/{subscriber}/vmail/save/*.wav

/domains_config/{domain}/subscriber_config/{subscriber}/trash/*.wav

/domains_config/{domain}/subscriber_config/{subscriber}/greeting/*.wav

These resources represent the subscriber's vmail. They also respond to "Accept:" request headers.

For HTTP GET, "Accept:text/html" returns the Html representation which is the metadata name/value pairs in the .inf file. For HTTP GET, "Accept:application/x-wav" returns a WAV representation. [future] For HTTP GET, "Accept:text/plain" invokes speech-to-text.

If Accept header is not specified, text/html is assumed.

For HTTP PUT, "Content-Type:text/html" indicates that metadata name/value pairs are being transmitted. For HTTP PUT, "Content-Type:application/x-wav" indicates that a WAV file is being transmitted. For HTTP PUT, "Content-Type:text/plain" invokes cepstral text-to-speech (if installed).

If Content-Type header is not specified then text/html is assumed.

Move/Rename

To move/rename a vmail, use the special "_src" parameter. For example, to move a vmail from the "new" folder to the "trash" folder:

PUT /tac2/domains_config/abc.com/subscriber_config/9000/vmail/trash/vm-123456789.wav&_src=/domains_config/abc.com/subscriber_config/9000/vmail/new/vm-123456789.wav

conference_config

leader_login 
the subscriber_login of the owner of the conference room

example

TODO make this tac2

	 XmlKey xmlKey = new XmlKey();
			xmlKey.put("matchrule", "sip:7005@conference-bridge");
			XmlRow xmlRow = new XmlRow();
			xmlRow.put("participants_pin", "1234");
			xmlRow.put("max_participants", "5");
			xmlRow.put("time_begin", "0000-00-00");
			xmlRow.put("time_end", "0000-00-00");
			xmlRow.put("gmt_offset", "-8");
			xmlRow.put("activate", "yes");
			xmlRow.put("announce_join", "Ding-Dong.wav");
			xmlRow.put("announce_depart", "Dong-Ding.wav");
			xmlRow.put("name", "my conference room!");
			xmlRow.put("remove", "no");
			XmlSet set = new XmlSet();
			set.put("conference_update", xmlKey, xmlRow);
			adapter.postXml(set, new XmlSet());

participant_config

conference participant resource

/domains_config/{}/subscriber_config/{}/conference_config/{conference_match}/participant_config{participant_match}

participant_match 
sip uri
conference_match 
sip uri
aor_user 
convenience field: user part of participant_match
aor_host 
convenience field: host part of participant_match
mode 
operational status readOnly
mode.active 
connected
mode.inactive 
disconnected
mode.muted 
connected + muted
mode.login
mode.error
mode.calling 
aka connecting
mode.disconnecting
leader 
(yes/no) - ?!?
control 
a write only "action" parameter


  • normal - unmute the participant
  • call - if participant mode is "inactive" then connects the participant call
  • disconnect - if participant mode is "active" then disconnects the participant call
  • mute - mute the participant
  • leader_chat

NpsDomain.account

To update account balance in an atomic/transactional way, do a HTTP POST to an exiting account resource with a balance delta, e.g., to add 5 dollars:

POST /tac2/domains/mydomain.com/account/1001 HTTP/1.0

balance=5

To substract 10 dollars:

POST /tac2/domains/mydomain.com/account/1001 HTTP/1.0

balance=-10

All such transactions are logged to the "/tac2/audit_log/" list resource.

TO delete existing account, use DELETE.

signup a prepaid account

PUT /tac2/domains/acme.com/account/1212
account_user
e.g. "1212"
account_domain
e.g., "acme.com"
account_pin
e.g., "1234"
account_status
e.g., "active"
valid_from
e.g., "2005-01-01"
valid_to

valid_period
e.g., "1 year"
date_1st_use
readOnly
date_last_use
readOnly
date_expire

orig_balance
e.g., "100"
balance
e.g., "100"
rateplan
e.g., "netsapiens_rating"
service_plan
e.g., "Basic VoIP"
srv_charge_rate
e.g., "10"
srv_charge_period
e.g., "1 month"
srv_charge_last

srv_charge_next

reset_next
e.g., "never"

Refill prepaid account

POST /tac2/domains/acme.com/accounts/1212

balance=0

Prepaid cards (new feature)

Signup a postpaid account

PUT /tac2/domains/acme.com/account/1212
account_user
e.g. "1212"
account_domain
e.g., "acme.com"
account_pin
e.g., "1234"
account_status
e.g., "active"
valid_from
e.g., "2005-01-01"
valid_to

valid_period
e.g., "1 year"
date_1st_use
readOnly
date_last_use
readOnly
date_expire

orig_balance
e.g., "100"
balance
e.g., "100"
rateplan
e.g., "netsapiens_rating"
service_plan
e.g., "Basic VoIP"
srv_charge_rate
e.g., "10"
srv_charge_period
e.g., "1 month"
srv_charge_last

srv_charge_next

reset_next
e.g., "never"

Pay balance due on postpaid account

curl -X POST /tac2/domains/acme.com/accounts/1212 -dbalance=0

Trigger a callback

NpsDomain.audit_log

List of transactions against NpsDomain.account.

NpsDomain.recharge_cards

/recharge_cards/{domain},{serial_number}

To get a list of recharge cards, do a "GET /recharge_cards/".

To get a particular recharge card, do, e.g., "GET /recharge_cards/foobar.com,5"

GET

PUT

DELETE

/operators

returns the list of operators and their related queues

/operators/{operator_domain}/{operator_user}/{queue_domain}/{queue_name}

operator_status 
active or inactive; the administrative configuration of the operator; if "active" then operator can login
device_aor 
unused
oper_domain 

refresh_period 

huntgroup_config

/domains_config/{domain}/huntgroup_config/{huntgroup_name}

description
huntgroup_option 
"1stAvail" or "Linear"
connect_to 
connect timeout in seconds

huntgroup_entry_config

/domains_config/{domain}/huntgroup_config/{huntgroup_name}/huntgroup_entry_config/{device_aor}

entry_status 
"available" or "unavailable"

e.g., to "make available" a device_aor, set "entry_status" = "available"; if the Nms is unable to make the device available then the value of "entry_status" will pop back to "unavailable".

Nms - Lidf (recordings, delivery function)

term_callid 
the unique identifier for a cdr
lea_id 

case_id 
aka device_aor
call_id 
orig_callid or term_callid e.g., "20091029384756012345@example.org"

/lidf_lea_config/{lea_id}

aka a recording server

ccc_ip 
the ip address of the remote recording server
api_url 
optional; remote recording server api base url; if provided then Nms api can seamlessly proxy recordings from Licf api (e.g., https://nms.example.com/tac2)
api_login
api_passwd

/cdr/{term_callid}/licf_cdc

returns the list of licf_cdc urls related to the given cdr

typically, the list will be 0, 1 or 2

/cdr/{term_callid}/lidf_lea_config/{lea_id}/lidf_lic_config/{case_id}/licf_cdc

returns the list of licf_cdc resources related to the given cdr and case_id

typically, the list will be 0 or 1 (or 2 for the corner case of a recorded device calling itself)

if you follow a convention whereby case_id is device_aor then the url used to check to see if a recording exists can be hardcoded

/cdr/{term_callid}/lidf_lea_config/{lea_id}/lidf_lic_config/{case_id}/licf_cdc/{call_id}

returns a 302 redirect to the related licf_cdc resource

Example

Given a cdr identified by term_callid=20091231235959012345@example.com, to check to see if any recordings exist for the cdr:

http://nms.example.com/tac2/cdr/20091231235959012345@example.com/licf_cdc

or, optionally, say you're interested in a particular device... choose that device, e.g., device_aor=sip:1212@example.com then the api url used to check to see if the recording exists is (remember, you're following the convention whereby case_id is device_aor):

http://nms.example.com/tac2/cdr/20091231235959012345@example.com/lidf_lea_config/Recording-Server/lidf_lic_config/sip:1212@example.com/licf_cdc

if the url returns a zero length list then a recording does not exist

if the url returns one or more licf_cdc resources then recordings exist

Tip: a programmatic client can search for <a> elements with class="licf_cdc".

To get the actual .wav file, append "/licf_cdc/licf_ccc.wav to the url:

http://nms.example.com/tac2/cdr/20091231235959012345@example.com/lidf_lea_config/Recording-Server/lidf_lic_config/sip:1212@example.com/licf_cdc/20091231235959012345@example.com

depending on your application, licf_cdc and licf_ccc resources might be just gobbledygook (i.e., your application might just be interested in the .wav file)

Licf (recordings, collection function)

acc_elm 
access element, e.g., "Recording-Server"
case_id 
by convention, same as device_aor, e.g., "sip:1212@example.org"
call_id 
orig_callid or term_callid e.g., "20091029384756012345@example.org"

/licf_cdc/{acc_elm}/{case_id}/{call_id}

licf_cdc "data" resource ("data" is the "d" in cdc)

iff server is acting in a "licf" role (cf=collect function)

GET /licf_cdc/nms@example.org/sip:1212@example.org/20091231235959012345@example.org

/licf_cdc/{acc_elm}/{case_id}/{call_id}/licf_ccc

the related icf_ccc "content" resource ("content" is the middle c in ccc)

/licf_cdc/{acc_elm}/{case_id}/{call_id}/licf_ccc.wav

GET

the related .wav file (contentType=audio/wav)

/phones_config/{mac}

hw mac addr must be lower case

Appendix

More Examples

Notes:

  • name/value pairs must be url encoded
  • tip: add an entry for "myserver" to your /etc/hosts file and you should be able to click these links directly!
  • note http method tunneling via _method=put and _method=delete

get domains

http://myserver/tac2/domains_config/

get subscribers

http://myserver/tac2/domains_config/mydomain/subscriber_config/

create subscriber

http://myserver/tac2/domains_config/mydomain/subscriber_config/1212?_method=put&subscriber_login=1212@mydomain&firstname=Homer&lastname=Simpson&subscriber_pin=1234&dial_plan=Default&dial_policy=Permit+All

Note- subscriber_login must be unique per platform

get subscriber

http://myserver/tac2/domains_config/mydomain/subscriber_config/1212

suspend subscriber

http://myserver/tac2/domains_config/mydomain/subscriber_config/1212?_method=put&dial_policy=Deny+All

unsuspend subscriber

http://myserver/tac2/domains_config/mydomain/subscriber_config/1212?_method=put&dial_policy=Permit+All

get subscriber devices

http://myserver/tac2/domains_config/mydomain/subscriber_config/1212/registrar_config/

create subscriber device

http://myserver/tac2/domains_config/mydomain/subscriber_config/1212/registrar_config/sip:1212@mydomain?_method=put&authentication_realm=myrealm&termination_match=sip:1212@mydomain&expires=10&nat_wan=automatic&authentication_key=1234&authenticate_register=yes&authenticate_invite=yes

get subscriber device

http://myserver/tac2/domains_config/mydomain/subscriber_config/1212/registrar_config/sip:1212@mydomain

delete subscriber device

http://myserver/tac2/domains_config/mydomain/subscriber_config/1212/registrar_config/sip:1212@mydomain?_method=delete

delete subscriber

http://myserver/tac2/domains_config/mydomain/subscriber_config/1212?_method=delete


History

187

  • db connection pool

157

  • fix bug in recordings (SiPbxDomain vs LiCfDomain mixup)

156

  • autoconfig ndp

155

  • autoconfig: tac2 uses, e.g., /usr/local/NetSapiens/SiPbx/nms.ini for db connections

154

  • revamped dialplans/dialrules

150

  • recharge_cards acl

147 Fri Jun 19

  • authmd5
  • proxy .wav files

146

  • write vmail .inf files

145

  • callrequest_config: wait for _update

143/144

  • query subscriber_config by "rank", e.g., /domains_config/netsapiens.com/subscriber_config/1000/subscriber_config

141 2009/4/2

  • added "recharge_cards"

140 2009/3/24

  • added speeddial resource

139 2009/03/13

  • unconditional "service httpd reload" (for tomcat5 migration)
  • fix bug in huntgroup_entry_update whereby order/priority was being clobbered

138 20009/03/13

  • use tomcat5
  • 1.0.136 2008-02-18
    • fixed /operators resource
  • 1.0.135 2008-02-12
    • phones_config (Ndp)
  • 1.0.134 2008-02-12
    • registrar_config: use default_values
  • 1.0.133 2008-02-12
    • subscriber_config: use default_values
  • 1.0.131 2008-02-03
    • use audio/wav
  • 1.0.129 2008-02-03
    • rework recordings api to handle orig_callid
  • 1.0.128 2008-02-02
    • recordings api

1.0.127 (2009-01-29)

  • fixed bug when moving vmail (or greetings) via GET request w/_method=put (i.e,. missing contentType; default to application/x-www-form-urlencoded)

1.0.126

  • 302 redirect on post

1.0.115

  • huntgroup_config

1.0.114

  • huntgroup_config

1.0.113

  • callqueue_config and huntgroup_config

1.0.102 (2008-10-21)

  • sort vmail

1.0.100 (2008-09-18)

  • added 60 second auth cache

1.0.99 (2008-09-17)

  • fixed time_zone_name

1.0.98 (2008-09-17)

  • fixed vmail move

1.0.97 (2008-09-05)

  • serialize cepstral access

1.0.96 (2008-08-26)

  • cepstral text-to-speech via PUT w/ContentType=text/plain

1.0.95

  • handle voicemail text/html

1.0.94

  • fixed voicemail _src bug

1.0.93

  • fixed bug when passing name/value pairs via url parameters only (i.e., empty body)
  • voicemail rename via _src parameter
  • fixed sublte java.lang.Exception auth bug

1.0.91 (2008-07-22)

  • ping database connection to eliminate /etc/my.cnf wait_timeout issues

1.0.87 (2008-07-11)

  • fixed subtle /tac/tac2 vs /tac2 url issue

1.0.86 (2008-07-10)

  • added bulk list capability... GET on resources that end with "/" now return list of resources (as html forms) instead of just list of hyperlinks

1.0.84 (2008-06-23)

  • fix feature_config put bug (select _config entry first and then insert/update _update entry)

1.0.83 (2008-06-23)

  • fix feature_config put bug (select _config entry first and then insert/update _update entry)

1.0.82 (2008-06-23)

  • fix comma parsing bug, e.g., be able to parse something as crazy as ".../phone_book/,," which is blank last,first,middle

1.0.81 (2008-06-23)

  • fix percentEncoding bug in vmail

1.0.79 (2008-06-13)

  • workaround another apache httpd mod_write percentDecoding bug: compensate for mod_write "NE" option apparently not working...

1.0.78 (2008-06-13)

  • fixed getPath bug

1.0.77 (2008-06-13)

  • time_zone_name
  • fixed percentEncoding bug

1.0.76 (2008-06-10)

  • implemented PUT/DELETE for feature_config

1.0.75 (2008-06-03)

  • workaround for nasty percentDecoding "bug" in ProxyPass for httpd < 2.2.7

1.0.74 (2008-05-31)

  • fixed a url encoding bug found against feature_config

1.0.73 (2008-05-30)

  • added config_config and ui_config

1.0.72 (2008-05-30)

  • fixed subscriber update bug

1.0.71 (2008-05-30)

  • bugfix: use absolute paths when returning .wav file list resources

1.0.70 (2008-05-30)

  • added the following resources under /domains_config/{domain]/subscriber_config/{user}
    • /vmail/save
    • /trash
    • /greeting

1.0.69 (2008/05/29)

  • added per-domain and per-user activecalls and cdr
    • /domains_config/{domain}/activecalls
    • /domains_config/{domain}/cdr
    • /domains_config/{domain}/subscriber_config/{user}/activecalls
    • /domains_config/{domain}/subscriber_config/{user}/cdr