Fonoster Inc is researching an innovative Programmable Telecommunications Stack that will allow businesses to connect telephony services with the Internet entirely through a cloud-based utility.
Attention
β οΈ :Exploring Fonoster: We encourage new users to initially explore Fonoster's features through our SaaS (Software as a Service) option. This platform is free to start and offers a comprehensive experience of what Fonoster can do.
Installation Advisory: Please note that the current installation process for Fonoster is complex. We are actively working to simplify this process. We recommend waiting for our upcoming 0.4 or 0.5 release before attempting a direct installation. These future releases are designed to offer a more user-friendly installation experience.
Thank you for your interest in Fonoster. We are committed to enhancing your experience with every release.
The most notable features of Fonoster 0.4 are:
- Multitenancy
- Easy deployment of PBX functionalities
- Programmable Voice Applications
- NodeJS SDK
- Support for Amazon Simple Storage Service (S3)
- Secure API endpoints with Let's Encrypt
- Authentication with OAuth2
- Authentication with JWT
- Role-Based Access Control (RBAC)
- Plugins-based Command-line Tool
- Support for Google Speech APIs
- Secrets managed by Hashicorp Vault
A Voice Application is a server that takes control of the flow in a call. A Voice Application can use any combination of the following verbs:
Answer
- Accepts an incoming callHangup
- Closes the callPlay
- Takes a URL or file and streams the sound back to the calling partySay
- Takes a text, synthesizes the text into audio, and streams back the resultGather
- Waits for DTMF or speech events and returns back the resultSGather
- Returns a stream for future DTMF and speech resultsDial
- Passes the call to an Agent or a Number at the PSTNRecord
- It records the voice of the calling party and saves the audio on the Storage sub-systemMute
- It tells the channel to stop sending media, effectively muting the channelUnmute
- It tells the channel to allow media flow
Voice Application Example:
const { VoiceServer } = require("@fonoster/voice");
const serverConfig = {
pathToFiles: `${process.cwd()}/sounds`,
};
new VoiceServer(serverConfig).listen(
async (req, res) => {
console.log(req);
await res.answer();
await res.play(`sound:${req.selfEndpoint}/sounds/hello-world.sln16`);
await res.hangup();
}
);
// your app will live at http://127.0.0.1:3000
// and you can easily publish it to the Internet with:
// ngrok http 3000
Everything in Fonoster is an API first, and initiating a call is no exception. You can use the SDK to start a call with a few lines of code.
Example of originating a call with the SDK:
const Fonoster = require("@fonoster/sdk");
const callManager = new Fonoster.CallManager();
callManager.call({
from: "9842753574",
to: "17853178070",
webhook: "https://5a2d2ea5d84d.ngrok.io/voiceapp"
})
.then(console.log)
.catch(console.error);
To get started with Fonoster, use the following resources:
- Deploying Fonoster with Docker
- Getting started with Fonoster
- Connecting Fonoster with Dialogflow
- Using Google Speech APIs
- How we created an open-source alternative to Twilio and why it matters
Please give it a star if you like this project or plan to use it. Thanks π
For bugs, questions, and discussions, please use the Github Issues
For contributing, please see the following links:
We're glad to be supported by respected companies and individuals from several industries.
Find all our supporters here
Copyright (C) 2024 by Fonoster Inc. MIT License (see LICENSE for details).