Sending Call Events to NATS
Routr ships with a NATS publisher that can be used to send call events to a NATS server. Call events are a function of the EdgePort. To enable the NATS publisher, you will need to update your EdgePort service to set the environment variable NATS_PUBLISHER_ENABLED
to true
as well as the environment variable NATS_PUBLISHER_URL
to the URL of your NATS server. For example:
version: "3"
services:
routr:
image: fonoster/routr-one:latest
ports:
- 51908:51908
- 5060:5060/udp
environment:
- NATS_PUBLISHER_ENABLED=true
- NATS_PUBLISHER_URL=nats:4222
Once you have enabled the NATS publisher, you can subscribe to the routr.call.started or routr.call.ended subjects to receive call events. As of the writing of this book, only the routr.call.started and routr.call.ended subjects are supported. However, we plan to add more subjects in the future. Be sure to check in later to see if any more have been added.
To begin receiving call events, you can use the nats sub command line tool. To do this, first connect to your NATS server by running the following command:
nats context add nats \
--server demo.nats.io:4222 \
--description "nats events" \
--select
You should then see something like this:
In the previous command, we connected to the demo.nats.io
server, which is a public NATS server. You can use your own NATS server if you have one.
Then, you can subscribe to the routr.call.started
subject by running the following command:
nats sub routr.call.started
The routr.call.started
event contains the following fields:
callId
: The unique identifier of the callfrom
: The caller's phone numberto
: The callee's phone numberstartTime
: The time the call started formatted as an ISO 8601 stringextraHeaders
: Any extra headers that were sent with the call
Every header startarting with X-
is considered an extra header. For example, if you send a call with the following headers:
X-My-Header: my-value
X-Another-Header: another-value
Then, the extraHeaders
field will contain the following:
{
"X-My-Header": "my-value",
"X-Another-Header": "another-value"
}
After subscribing to the subject and making a call, you should see something like this:
Similarly, you can subscribe to the routr.call.ended subject to receive call-ended events.
nats sub routr.call.ended
The routr.call.ended
event contains the following fields:
callId
: The unique identifier of the callendTime
: The time the call ended formatted as an ISO 8601 stringhangupCause
: The reason the call endedextraHeaders
: Any extra headers that were sent with the call
Please see the HangupCause.java class for a list of possible hangup causes.
Lastly, you can subscribe to the routr.endpoint.registered
subject to receive endpoint registered events.
nats sub routr.endpoint.registered
The routr.endpoint.registered
event contains the following fields:
aor
: The address of record of the endpointregisteredAt
: The time the endpoint registered formatted as an ISO 8601 stringexpires
: The time in seconds the endpoint will remain registeredextraHeaders
: Any extra headers that were sent with the call
You can use the NATS_PUBLISHER_SUBJECT
environment variable to change the based subject name. For example, you can set it to myserver
to receive call events in the myserver.calls.started
subject.