NOTE: THIS PRODUCT IS NO LONGER MAINTAINED.
CA11 is about to make telephony more like the Web; accessible, open and without requiring accounts or subscriptions. The frontend is a flexible signalling-agnostic WebRTC webphone and supports the following signalling backends:
- SIP - Centralized WebRTC calls using Asterisk PBX
- ION - Centralized custom SFU signalling (E2EE)
- S11 - Decentralized WebRTC calls using WebCrypto ECDH (E2EE)
- Unix-like operating system
- Docker (or install manually using Docker as reference)
- Node.js 13+ (requires native JavaScript module support)
- Chromium 87 or later
-
Clone the project & install npm dependencies:
git clone git@github.com:open-voip-alliance/ca11.git cd ca11 yarn
-
Generate a TLS certificate & Certificate Authority (CA) for development
This is to enable TLS on locally defined domains without annoying the browser. The CA install script (ca_system.sh) only works on Archlinux at the moment. Other operating systems require manual CA installation. Restart the browser to refresh the TLS certificate.
cd docker/nginx/ssl ./ca_cert.sh dev.ca11.app ./ca_cert.sh sip.dev.ca11.app ./ca_cert.sh sig11.dev.ca11.app ./ca_cert.sh ion.dev.ca11.app sudo ./ca_system.sh cd -
-
Add Hostname lookups for the development domains:
sudo echo "127.0.0.1 dev.ca11.app" >> /etc/hosts sudo echo "127.0.0.1 sip.dev.ca11.app" >> /etc/hosts sudo echo "127.0.0.1 sig11.dev.ca11.app" >> /etc/hosts sudo echo "127.0.0.1 ion.dev.ca11.app" >> /etc/hosts cp docker/.env.example docker/.env # Add hostname lookups in case of linux (Docker host networking): sudo echo "127.0.0.1 asterisk" >> /etc/hosts sudo echo "127.0.0.1 coturn" >> /etc/hosts sudo echo "127.0.0.1 postgresql" >> /etc/hosts sudo echo "127.0.0.1 ion" >> /etc/hosts
-
Setup Docker services
# Use 'yarn backend:bridge' instead on MacOS/Windows yarn backend # Open another shell and initialize the Asterisk database docker exec -w /root/asterisk/contrib/ast-db-manage -it ca11_asterisk alembic -c config.ini upgrade head # Add experimental sig11/asterisk binding table; default password is "ca11ftw" psql -U postgres -h 127.0.0.1 asterisk < docker/postgres/sig11_asterisk.sql # CTRL-C Stop all Docker services
-
Setup custom config files to test with:
cp sig11/.sig11rc.defaults .sig11rc cp webphone/.webphonerc.defaults .webphonerc
-
Start the development stack
yarn backend node sig11/server.js # or use nodemon yarn frontend
-
Open chrome://flags in Chromium and enable Experimental Web Platform features (import maps)
-
Restart the browser and open the url to the softphone
For autoreload, use the livereload extension
-
Verify the SIP stack by calling 1111 using the SIP protocol
-
Start a second webphone from another browser with a fake WebRTC video stream:
chromium --use-fake-device-for-media-stream --enable-experimental-web-platform-features --user-data-dir=~/.chromium-tmp