Redswitch is a freeswitch ESL agent that recives jobs via Redis to control Freeswitch.
Redswitch can be configured with the following environment variables:
Name | Description | Default Value |
---|---|---|
ESL_PASSWORD | Password for ESL connection. | ClueCon |
ESL_PORT | Port of ESL server. | 8021 |
ESL_URL | URL of ESL server. | 127.0.0.1 |
PUBSUB_REDIS_TIMEOUT | Timeout when connecting to Redis. Integer. | 10 |
PUBSUB_REDIS_URL | URL to Redis cluster. | redis://127.0.0.1:6379 |
A Redswitch Job is where initial calls begin a job that can be handled by any instance of Redswitch. Each job directive is associated with a set of expected responses.
An asp call is pushed to talkiq-asp.calls
. Because freeswitch hangs up a
channel when a call fails, the reasons for a failed call are denoted in the
Hangup-Cause.
{
"type": "asp-call",
"call_provider": "talk_call_provider",
"callee_number": "1415697098",
"caller_id_lega": "15105625882",
"caller_id_legb": "14157697098",
"caller_number": "15105625882",
"dial_id": "talkiq_dial_id",
"org_id": "talkiq_org_id",
"user_id": "talkiq_user_id",
}
Call control messages are used to control active Redswitch job. Any time a
redswitch job is answered, the responsible instance of Redswitch becomes a
subscriber to a channel named after the dial_id
and it awaits call control
messages for the dial_id
in question.
- Dial IDs are implicit !!! they are are the channel your working on!
{
"type": "hangup"
}
Barging creates a new call which allows the barger to listen in on the
specified dial_id
.
{
"type": "barge",
"phone_number": "15105625882",
"caller_id": "777-777-7777",
}
Whisper allows a barger to start talking to the call initiator.
{
"type": "whisper",
}
Mute causes the barger to return to muted.
{
"type": "mute",
}
threeway allows the barger to talk both to the caller and to the callee
{
"type": "threeway",
}
unthreeway allows the barger to talk both to the caller and to the callee
{
"type": "unthreeway",
}
Call events are events that happen on calls that may not have initiating call control events.
- side 0: phone of the caller
- side 1: phone of the callee
Dial_ids are still implicit.
call-start is is published when freeswitch initiates the call
{
"type": "call-start",
"dial_id": <dial_id>
}
{
"type": "hangup-event",
"side": "call-side",
"cause": "see https://wiki.freeswitch.org/wiki/Hangup_Causes",
}
{
"type": "answer-event",
"side": "call-side",
}
<<<<<<< HEAD
Whisper allows a barger to start talking to the call initiator.
{
"type": "whisper",
}
Mute causes the barger to return to muted.
{
"type": "mute",
}
threeway allows the barger to talk both to the caller and to the callee
{
"type": "threeway",
}
unthreeway allows the barger to talk both to the caller and to the callee
{
"type": "unthreeway",
}
failure gets published to the dial_id when a call will not even be attempted by freeswitch
{
"type": "failure",
"cause: "the cause of the failure"
}
All call control messages respond to acknowledgements as follows
{
"type": "ack",
"event": "callcontrol_message"
}
Redswitch keeps track of all active calls in redis, each active call is represented as a list with the fallowing format.
redswitch.<dial_id>.<org_id>.<user_id>
each value of the list represents a call side in the following format
<state>.<side>
- Currently the only state is 'ACTIVE'
- When a side is hung up, the list item is removed
- Active calls expire after 24hrs
Redsiwitch tracks the event history hisetory of active calls on a per user baises the list is formated as fallows
redswitch_history.<org_id>.<user_id>
- List Values are identical to redswitch events
- Event history is deleted at the start of every new call
- Event historys expire after 4 hrs
Redswitch requires an accessible Redis cluster and a Freeswitch instance.
The shiznit/redis
library can be used for the former:
cd /path/to/shiznit/redis
docker-compose up -d
You can connect a local redswitch
to the above network and a test Freeswitch
instance with
docker build -t redswitch .
docker run --rm --name redswitch --net redis_default -it \
-e PUBSUB_REDIS_URL=redis://node0:6379 \
-e ESL_URL=174.36.124.235 \
-e ESL_PASSWORD=ClueCon \
-v ${PWD}/redswitch:/src \
-v ${PWD}/tester:/opt/sensu/service/vader-tester \
redswitch
You can verify your connections to Redis and Freeswitch with
docker exec redswitch /opt/sensu/service/vader-tester/esl.py
docker exec redswitch /opt/sensu/service/vader-tester/redis.py
You can run lpop.py
against it to send test commands with
docker exec redswitch /src/lpop.py --help