The RCC protocol is available on AppWebsocket connections to innovaphone PBX objects, if the object is enabled for the RCC api.

The protocol allows the monitoring of users based on group configuration or based on explicit configuration, which can be deployed in config templtes. For monitored users all calls are indicated

For the monitored users call control functions are available, including call initiation, call connect, forwarding, transfer, hold, retrieve, park and more.

The protocol is designed based on the PBX SOAP API

General structure

{
    "api": "RCC",
    "src": string,
    "mt": string,
}

api
To address this interface the value "RCC" has tp be used for the api property
src
The AppWebsocket src mechanism is supported on the interface. So a src property may be used
mt
The message type identifies the requested operation

Operations

Operations are perfored with a message exchange with message sent to the PBX wit a mt identifying the operation and a result message, with the same mt but "Result" added. For example Initialize/InitializeResult. The src property from the original message is sent back in the Result message

There are messages sent assynchronously from the PBX. These messages end on "Info". Such messages are only sent if requested by a operation initiated by the application. The src property in these messages is set to the src sent in the requesting message.

Initialize

This operation is used to monitor which users are visible to the applications. There are two modes available.

Users by group
This mode is set by sending the boolean property "grp" set tru true in the Initialize message. All users which are members in groups, in which the object used to connect to the PBX is active member, are visible.
Visible members are automatically sent before the InitializeResult message and update are sent whenever the users or groups are changed afterwards.
This mode is useful for a limited number of users, e.g. 50
Users by explicit configuration
This mode is available, if an App object is used to connect to the PBX. All users which have configured access to this App are visible.
All users are sent before the InitializeResult message. Only a limited number of users is sent within one timer tick of 20ms. By default this limit is 50. Because of this updates to users may already sent while the initial list is still transmitted.
Properties
grp:bool
Switches on the users by group mode in case of an App object
limit:integer
Limits the number of users sent with a 20ms timer tick. Maximum is 50.
calls
If set to true, all PBX calls are inicated using the messages "CallAdd", "CallDelete" and "CallUpdate". This option is only availabe on AppWebsocket conections to an App Object so that not any user can read all PBX calls.

Devices

Retrieve the list of devices of a given user

Properties
cn:string
common name of the user
Result
devices:[device]
Array of the devices.

UserInitialize

Start monitoring of a user

Properties
cn:string
common name of the user
xfer:bool
Monitor transfered calls as well
disc:bool
Clear calls to phone with DISC instead of RELEASE. This way the call remains active as long as the phone is not onhook.
hw:string
Select a specific device to monitor
Result
user:integer
The handle which can be used for the other User... requests.
prefixIntl:string
Prefix to be used to dial an international number from this node, including any trunk prefix
prefixNtl:string
Prefix to be used to dial a national number from this node, including any trunk prefix
prefixSubs:string
Prefix to be used to dial a subscriber number from this node, including any trunk prefix
area:string
Area code to be assumed for the user
country:string
Country code to be assumed for the user
maxIntern:integer
Maximum length of internal number
tones:integer
The tones scheme to be used for dialtones
mobile:object
If hw identifies a mobile endpoint, this is a object with the information about the mobile endpoint

CallInfo

This message is used to sent updates for calls

user:integer
Handle of the user
call:integer
Handle of the call
conf:string
Conference Id of the call. This is a guid which identifies all call legs belonging to the same call
state:integer
State
time:integer
The time in seconds since the start of the call
peer:connector
Identifies the peer of the call, which may be called or calling party
no:[connector]
More endpoints related to the same call, like diverting, transfering, ...
msg
Name of signaling message related to this update
dtmf:string
received DTMF event
info:object
Additional call information

Example:

{
    "mt":"CallInfo",
    "api":"RCC",
    "user":1,
    "call":2,
    "state":6,
    "peer":{"e164":"444","h323":""},
    "msg":"r-disc",
    "info":[
        {"type":"cause","vali":1,"vals":"Unallocated (unassigned) number"}
    ]
}

UserEnd

End the monitoring of a user

Properties
user:integer
Handle of the user

UserCall

Initiate an outgoing call

Properties
user:integer
Handle of the user
ftyNoCF:bool
Send the call with a innovaphone proprietary facility to override any configured call diversion
audio:bool
Initiate an audio call instead of a voice call. On ISDN networks this prohibits the use of speech compression, which would affect modem protocols.
rc:integer
e164:string
cn:string
h323:string
srce164:string
Result
call:integer
Handle of the call, which can be used with the other requests to control calls.

UserClear

Clear a call

Properties
call:integer
cause:integer

UserConnect

Connect a call present at the phone

Properties
call:integer

UserRc

Send a remote control code to the phone

Properties
call:integer
rc:integer

UserInfo

Send overlap dialing info

Properties
call:integer
cdpn:string
key:string
dsp:string

UserDTMF

Send DTMF digits

Properties
call:integer
recv:bool
dtmf:string

UserUUI

Send User User Info

Properties
call:integer
recv:bool
uui:string

UserTransfer

Transfer to call legs

Properties
a:integer
b:integer

UserMediaTransfer

Properties
a:integer
b:integer
user:bool
peer:bool

UserPickup

Properties
user:integer
call:integer
cn:string
Properties
call:integer
The handle of the new resulting call

UserRedirect

Properties
call:integer
rc:integer
bool nocf
If true, call forward is not executed on redirect call
cn:string
h323:string
e164:string
Result
error:string
Indicating an error if the operation failed

UserReroute

Properties
call:integer
cn:string
h323:string
e164:string
Result
error:string
Indicating an error if the operation failed

UserCtrlCall

Properties
call:integer
info

UserCtComplete

Properties
call:integer
e164:string
h323:string

UserHold

Properties
call:integer
remote:bool
If added with value true, no MOH is played to local endpoint. Otherwise MOH is played to both endpoints (local and remote).

UserRetrieve

Properties
call:integer

UserPark

Result
call:integer
The call handle of the parked call
Properties
call:integer
cn:string
position:integer

Indications

UserInfo

This message is used to send update to users

update:string
Present if not the initial transmition. A value of "del" indicates a deleted user.
guid:string
Hexstring of the users guid
cn:string
common name
dn:string
display name
h323:string
H.323 Id/SIP URI
e164:string
Extension number
node:string
Numbering Node
pbx:string
PBX
pseudo:string
Type of user
regs[regInfo]

CallAdd

{
    "api": "RCC",
    "src": string,
    "mt": "CallAdd",
    "guid": hexstring,
    "cn": string,
    "call": unsigned,
    "state": unsigned,
    "conf-id": hexstring,
    "call-id": hexstring
}

Indicates that a call was added on the PBX

src
The src value from the Initialize
guid
The guid of the user
cn
The cn of the user
state
The call state 0 - init, 1 - setup, 2 - setup-ack, 3 - call-proc, 4 - alert, 5 - conn, 6 - disc-sent, 7 - disc-received, 8 -parked
Add 128 for outgoing, add 256 for hold, add 512 for held, add 1024 for waiting
conf-id
The conference ID
call-id
The call ID

CallDel

{
    "api": "RCC",
    "src": string,
    "mt": "CallDel",
    "call": unsigned,
}

Indicates the call was deleted from the PBX

CallUpdate

{
    "api": "RCC",
    "src": string,
    "mt": "CallUpdate",
    "call": unsigned,
    "msg": string,
    "local": endpoint,
    "remote": endpoint
}
msg
A message indicating the change of state
local
The local peer inside the PBX with number adjusted
The remote endpoint connected to the user object with normalized number

Objects

Common data objects used by the different messages

regInfo
hw:string
The hardware id identifying the registered device
device
hw:string
The hardware id identifying the device
text:string
Text which is display in the user interface whenever the device has to be identified to the user
connector

Common data object used for information to the endpoint of a connection

type
Type of the connector
cn
The Long Name of the object/user
dn
The display name of the endpoint
h323
H323/SIP id of the endpoint
e164
Number of the endpoint
norm
Normalized number
mobile

Information about a monitored mobile endpoint

e164
The configured mobile number
h323
The configured H323/SIP name of mobile endpoint
off
True if mobile endpoint is configured off.
endpoint
{
    "h323": string,
    "e164": string
}

The addressing information identifying an endpoint

h323
SIP-URI/H323-ID
e164
The phone number
info

Additional call information.

type
The info type: cause, uui
vali
Integer value
vals
String value

Example:

{
    "info":[
        {"type":"cause","vali":1,"vals":"Unallocated (unassigned) number"}
    ]
}