Fonoster

0

? The open-source alternative to Twilio

Collaboration

kubernetes
cloud-communications-platform
twilio
ucaas

Fonoster: The open-source alternative to Twilio

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.

Fonoster community banner

build release Discord Code Of Conduct GitHub Twitter Follow

[!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.

Features

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

Code Examples

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 call
  • Hangup - Closes the call
  • Play - Takes a URL or file and streams the sound back to the calling party
  • Say - Takes a text, synthesizes the text into audio, and streams back the result
  • Gather - Waits for DTMF or speech events and returns back the result
  • SGather - Returns a stream for future DTMF and speech results
  • Dial - Passes the call to an Agent or a Number at the PSTN
  • Record - It records the voice of the calling party and saves the audio on the Storage sub-system
  • Mute - It tells the channel to stop sending media, effectively muting the channel
  • Unmute - It tells the channel to allow media flow

Voice Application Example:

const VoiceServer = require("@fonoster/voice").default;
const { 
  GatherSource, 
  VoiceRequest, 
  VoiceResponse 
} = require("@fonoster/voice");

new VoiceServer().listen(async (req: VoiceRequest, voice: VoiceResponse) => {
  const { ingressNumber, sessionRef, appRef } = req;

  await voice.answer();

  await voice.say("Hi there! What's your name?");

  const { speech: name } = await res.gather({
    source: GatherSource.SPEECH
  });

  await voice.say("Nice to meet you " + name + "!");

  await voice.say("Please enter your 4 digit pin.");

  const { digits } = await voice.gather({
    maxDigits: 4,
    finishOnKey: "#"
  });

  await voice.say("Your pin is " + digits);

  await voice.hangup();
});

// Your app will live at tcp://127.0.0.1:50061 
// and you can easily publish it to the Internet with:
// ngrok tcp 50061

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 SDK = require("@fonoster/sdk");

async function main(request) {
  const apiKey = "your-api-key";
  const apiSecret = "your-api-secret"
  const accessKeyId = "WO00000000000000000000000000000000";

  const client = SDK.Client({ accessKeyId });
  await client.loginWithApiKey(apiKey, apiSecret);

  const calls = new SDK.Calls(client);
  const response = await calls.createCall(request);

  console.log(response); // successful response
}

const request = {
  from: "+18287854037",
  to: "+17853178070",
  appRef: "3e61ecb7-a1b6-4a93-84c3-4f1979165bca"
};

main(request).catch(console.error);

Getting Started

To get started with Fonoster, use the following resources:

Give a Star! ⭐

Please give it a star if you like this project or plan to use it. Thanks 🙏

Bugs and Feedback

For bugs, questions, and discussions, please use the Github Issues

Contributing

For contributing, please see the following links:

Pedro
Pedro Sanders
Efrain
Efrain Peralta
Wardner
Wardner Lara
Obruche
Obruche Wilfred Oghenechohwo
Richard
Richard HC
Hoan
Hoan Luu Huu
Speedy
Speedy Monster
Nageswari/
Nageswari
Brayan
Brayan Munoz V.
harry_dev/
harry_dev
Dede
Dede kurniawan
gabriel
gabriel duncan
Prasurjya
Prasurjya Pran Borah
Hector
Hector Ventura
Kanishka
Kanishka Chowdhury
0xflotus/
0xflotus
Manish/
Manish
Osama
Osama Sehgol
Paul
Paul Sütterlin
Riad
Riad Vargas
Shailendra
Shailendra Paliwal
The
The Gitter Badger
Yuri/
Yuri
cdrsociate/
cdrsociate
pavan/
pavan
nrjchnd/
nrjchnd
Salami
Salami Bashir
Shivam
Shivam Deepak Chaudhary
showf68/
showf68
telenautical/
telenautical
Wisdom
Wisdom Elendu
Judge
Judge Godwins
Jon
Jon Chin
Harish
Harish Chander
Gary
Gary Barnes
Fidal
Fidal Mathew
Dung
Dung Duc Huynh (Kaka)
Ciprian/
Ciprian
Christopher
Christopher Adigun
Bruno
Bruno Gomes
Bruno
Bruno Arueira
Antonius
Antonius Ostermann
Ali
Ali Firat ARI
Alex/
Alex
Albert
Albert E. Hidalgo Taveras

Sponsors

We're glad to be supported by respected companies and individuals from several industries.

Find all our supporters here

Become a Github Sponsor

Authors

License

Copyright (C) 2024 by Fonoster Inc. MIT License (see LICENSE for details).