Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/fonoster/fonoster

πŸš€ The open-source alternative to Twilio.
https://github.com/fonoster/fonoster

cloud cloud-communications-platform cpaas customer-engagement customer-experience javascript kubernetes nodejs programmable-voice telephony twilio typescript ucaas voip webrtc

Last synced: 5 days ago
JSON representation

πŸš€ The open-source alternative to Twilio.

Awesome Lists containing this project

README

        

# Fonoster: The open-source alternative to Twilio

[Fonoster Inc](https://fonoster.com) 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](https://github.com/fonoster/fonoster/workflows/unit%20tests/badge.svg) [![release](https://github.com/fonoster/fonoster/actions/workflows/release.yaml/badge.svg)](https://github.com/fonoster/fonoster/actions/workflows/release.yaml) [![Discord](https://img.shields.io/discord/1016419835455996076?color=5865F2&label=Discord&logo=discord&logoColor=white)](https://discord.gg/4QWgSz4hTC) Code Of Conduct ![GitHub](https://img.shields.io/github/license/fonoster/fonoster?color=%2347b96d) ![Twitter Follow](https://img.shields.io/twitter/follow/fonoster?style=social)

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

- [x] Multitenancy
- [x] Easy deployment of PBX functionalities
- [x] Programmable Voice Applications
- [x] NodeJS SDK
- [x] Support for Amazon Simple Storage Service (S3)
- [x] Secure API endpoints with Let's Encrypt
- [x] Authentication with OAuth2
- [X] Authentication with JWT
- [x] Role-Based Access Control (RBAC)
- [x] Plugins-based Command-line Tool
- [x] 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:

```typescript
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:

```typescript
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:

- [Deploying Fonoster with Docker](./docs/self-hosting/deploy-with-docker.md)
- [Guide for Early Access User](./docs/early-access/overview.md)
- [Getting started with Fonoster](https://fonoster.com/docs/overview/)
- [How we created an open-source alternative to Twilio and why it matters](https://dev.to/fonoster/how-we-created-an-open-source-alternative-to-twilio-and-why-it-matters-434g)

## 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](https://github.com/fonoster/fonoster/issues)

## Contributing

For contributing, please see the following links:

- [Contribution Documents](https://github.com/fonoster/fonoster/blob/main/CONTRIBUTING.md)
- [Contributors](https://github.com/fonoster/fonoster/contributors)



Pedro


Pedro Sanders




Efrain


Efrain Peralta




Obruche


Obruche Wilfred Oghenechohwo




Wardner


Wardner Lara




Richard


Richard HC




Hoan


Hoan Luu Huu



Speedy


Speedy Monster




harry_dev/


harry_dev




Nageswari/


Nageswari




Kanishka


Kanishka Chowdhury




Brayan


Brayan Munoz V.




Dede


Dede kurniawan



gabriel


gabriel duncan




Prasurjya


Prasurjya Pran Borah




Jordan/


Jordan




Hector


Hector Ventura




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




Enmanuel


Enmanuel Toribio




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](https://github.com/sponsors/fonoster)

> [Become a Github Sponsor](https://github.com/sponsors/fonoster)

## Authors

- [Pedro Sanders](https://github.com/psanders)

## License

Copyright (C) 2025 by [Fonoster Inc](https://fonoster.com). MIT License (see [LICENSE](https://github.com/fonoster/fonoster/blob/main/LICENSE) for details).