# Shared Line Appearance (SLA)#

Legacy PBXes often had a feature called Shared Line Appearance for incoming calls. The functionality basically allowed multiple phones to have a line key tied to an extension or DID and offered several features:

• Incoming calls would ring all configured phones simultaneously
• When a phone answered the call, the status light would turn green; on the other phones, the status light would turn red
• If the caller is placed on hold, all phones' (answering or not) status lights will blink red
• Any phone with SLA can pickup the on-hold call
• When the call completes, all status lights turn off.

## Simulating SLA#

Simulating most of SLA on a Kazoo system is possible. Let's take a look at how this might be achieved.

### Incoming calls ring all devices#

This is pretty straight-forward. In Kazoo, one of the callflow actions is a ring group. Put any endpoints (devices, users, or groups) into the ring group and all calls to the callflow will ring the endpoints according to the strategy provided.

### Status lights#

Kazoo allow updating a pre-defined presence_id to with BLF updates. You can set this presence_id on the device or user documents, or you can use the manual_presence callflow action to toggle this. Configure the phones' BLF light to subscribe for this presence_id value to have it update during calls.

#### Placing on hold for others#

The closest way to put a call on hold so others could pick it up is using call parking. Rather than using the hold button on the phone, the answering device can transfer the caller to a parking slot. Once parked, any device that knows the slot number can pick up the call.

## Example SLA simulation#

Consider the typical executive with an administrative assistant. The assistant's phone has a line key that will ring when the executive is called. The easiest way to do this is create two devices in Kazoo and assign them to the executive's Kazoo user.

### Create the assistant#

1. Create the assitant's device
curl -X PUT \
-H "X-Auth-Token: $AUTH_TOKEN" \ -d '{"data":{"name":"Assistant Device", "sip":{"username":"assistant", "password":"to_the_stars"}}}' \ http://{SERVER}:8000/v2/accounts/$ACCOUNT_ID/devices

{
"data":{
"id":"{ASSISTANT_DEVICE_ID}"
,...
}
,...
}


### Create the executive#

1. Create a user for the executive. Be sure to include presence_id="EXT" in the user object - this is what BLF lights will be tied to when setting up presence.
curl -X PUT \
-H "X-Auth-Token: {AUTH_TOKEN}" \
-d '{"data":{"first_name":"Exec", "last_name":"Utive", "presence_id":"1000"}}'
http://{SERVER}:8000/v2/accounts/{ACCOUNT_ID}/users

{
"data":{
"id":"{EXECUTIVE_USER_ID}"
,...
}
,...
}

2. Create a device for the executive.
curl -X PUT \
-H "X-Auth-Token: $AUTH_TOKEN" \ -d '{"data":{"name":"Executive Device", "owner_id":"{EXECUTIVE_USER_ID}", "sip":{"username":"executive", "password":"high_roller"}}}' \ http://{SERVER}:8000/v2/accounts/$ACCOUNT_ID/devices

{
"data":{
"id":"{EXECUTIVE_DEVICE_ID}"
,...
}
,...
}

3. Create the callflow using the ring group action to ring both the executive's and assistant's phones. This will also cause a BLF update to presence_id@account.realm to update the assistant's BLF key.
curl -X PUT \
-H "X-Auth-Token: $AUTH_TOKEN" \ -d '{"data":{"numbers":["1000"], "flow":{"module":"ring_group","data":{"endpoints":[{"id":"{EXECUTIVE_USER_ID}", "endpoint_type":"user"}, {"id":"{ASSISTANT_DEVICE_ID}", "endpoint_type":"device"}]}}}}' \ http://{SERVER}:8000/v2/accounts/$ACCOUNT_ID/callflows

{
"data":{
"id":"{EXECUTIVE_CALLFLOW_ID}"
,...
}
}


Now calls to extension 1000 should ring both the executive and the assistant devices.

### Create the call park/pickup callflow#

Create a callflow, *4{presence_id}, that will have the park callflow action. This will be used by the BLF key to simulate the hold/pickup of SLA. You should set the action to auto and the slot to presence_id. shell curl -X PUT \ -H "X-Auth-Token: $AUTH_TOKEN" \ -d '{"data":{"patterns":["*4(\\d+)"], "flow":{"module":"park","data":{"action":"auto"}}}}' \ http://{SERVER}:8000/v2/accounts/$ACCOUNT_ID/callflows

json
{
"data":{
"id":"{PARK_CALLFLOW_ID}"
,...
}
}


auto will retrieve a call if one is parked or park the call if the slot is empty.

### Create the BLF key#

Create a BLF key configuration on the assistant's phone to:

a. The "value" (or equivalent) will be presence_id b. The "extension" (or equivalent) will be *4{presence_id}

This will light up with the corresponding call.

When the assistant puts the call on hold, the BLF can be used to pickup the call.