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.
Warning
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 v0.9.x release before attempting a direct installation. We are working 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
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).