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...
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
157
- fix bug in recordings (SiPbxDomain vs LiCfDomain mixup)
156
155
- autoconfig: tac2 uses, e.g., /usr/local/NetSapiens/SiPbx/nms.ini for db connections
154
- revamped dialplans/dialrules
150
147 Fri Jun 19
146
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
140 2009/3/24
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
- 1.0.136 2008-02-18
- fixed /operators resource
- 1.0.134 2008-02-12
- registrar_config: use default_values
- 1.0.133 2008-02-12
- subscriber_config: use default_values
- 1.0.129 2008-02-03
- rework recordings api to handle orig_callid
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
1.0.115
1.0.114
1.0.113
- callqueue_config and huntgroup_config
1.0.102 (2008-10-21)
1.0.100 (2008-09-18)
- added 60 second auth cache
1.0.99 (2008-09-17)
1.0.98 (2008-09-17)
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
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)
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