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: 3 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




Wardner


Wardner Lara




Richard


Richard HC




Hoan


Hoan Luu Huu




Speedy


Speedy Monster



Brayan


Brayan Munoz V.




Dede


Dede kurniawan




gabriel


gabriel duncan




Prasurjya


Prasurjya Pran Borah




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




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) 2024 by [Fonoster Inc](https://fonoster.com). MIT License (see [LICENSE](https://github.com/fonoster/fonoster/blob/main/LICENSE) for details).