Git Product home page Git Product logo

008's Introduction

008-Banner

008 Event-driven AI powered Open Source Softphone

008 is an open-source event-driven AI powered WebRTC Softphone compatible with macOS, Windows, and Linux.
It is also accessible on the web (though official support for browser-related issues is not provided).

The name '008' or 'agent 008' reflects our ambition: beyond crafting the premier Open Source Softphone, we aim to introduce a programmable, event-driven AI agent. This agent utilizes embedded artificial intelligence models operating directly on the softphone, ensuring efficiency and reduced operational costs.

Here are the planned features in our roadmap

๐Ÿ“ฃ Want to do a quick test it without having to install a SIP server?

Download

You can download the latest version from the Releases page.

Setup

This project is a WebRTC softphone, and communication is achieved via SIP over a socket. Leading PBX systems like Asterisk or Freeswitch support socket connections. If your provider does not offer this feature, consider using a SIP proxy such as Kamailio, Opensip or Routr.

Configuration

The softphone is internally configured using a JSON definition (see details below). The configuration file can be loaded from either a server or a local file. 008 reads the file only once. To apply new settings, you must reload the configuration file as if it were new by clicking the green button in the configuration tab. To do so, follow these steps:

  1. Go to Settings -> Configuration (Gear Icon).
  2. Fill in the 'Settings' input and 'Basic Auth' fields if needed.
  3. Apply the changes by clicking the green button.
{
  "sipUri": "sip:[email protected]",
  "sipPassword": "securepass",
  "sipUser": "JohnDoe",
  "wsUri": "wss://example.com:8089/ws",
  "allowVideo": true,
  "allowTransfer": true,
  "allowBlindTransfer": true,
  "allowAutoanswer": false,
  "autoanswer": 5,
  "statuses": [
    { "value": "online", "text": "Online", "color": "#057e74" },
    { "value": "away", "text": "Away", "color": "#ff00ff" },
    { "value": "offline", "text": "Offline", "color": "#A9A9A9" }
  ],
  "numbers": [
    {
      "number": "+34917370224",
      "tags": ["Main"]
    },
    {
      "number": "+34917370225",
      "tags": ["Sec"]
    }
  ],
  "webhooks": [
    {
      "label": "mywebhook",
      "endpoint": "https://example.com/webhook"
    }
  ],
  "size": {
    "width": 360,
    "height": 500
  },
  "avatar": "https://example.com/avatar.jpg",
  "nickname": "John Doe" // used as Basic Auth user,
  "qTts": true, // enable transcription
  "qSummarization": true //enable summarization
}

Quick test

Do you want to test it without having to install your SIP server? We have you covered! Set https://raw.githubusercontent.com/kunzite-app/008/master/packages/008/web/cfgDemo008.json as your testing configuration. Then, call the number 008.

Quick Test Config

Autoanswer

Autoanswer can be enabled via two options:

  1. Set allowAutoanswer to true and adjust autoanswer to the desired wait time (in seconds).
  2. Have the incoming request include the X-Autoanswer header with the desired wait time. This setting will override any prior setup.

Numbers or Caller IDs

When these are specified under the field numbers, two fields P-Asserted-Identity and X-Number will be added to the SIP header.
This helps identify the desired outgoing number or Caller ID in your PBX system.

Events

One of the standout features is the event system. Every time an event is triggered, the corresponding data is dispatched to the designated webhooks or integrations in the configuration via a REST POST request.
Most of these events also trigger the AI models that enhance the softphone in the Commercial version.
Below, you'll find a detailed description of each event and sample payloads that you can expect at your endpoint.

status:change

Triggered when the user changes the status within the settings. :warning: This event does not determine the current phone network connectivity.

{
  "type": "status:change",
  "data": {
    "status": "online",
    "context": {}
  }
}
contact:click

Triggered when the contact link within the session screen is clicked. This link is available only if the contact can be found in the softphone's contacts.

{
  "type": "phone:terminated",
  "data": {
    "contact": {
      "id": 1,
      "name": "John Doe",
      "phones": ["+1223456869"]
    },
    "context": {}
  }
}
phone:ringing

Triggered after the call is emitted or received; this is determined by the direction field.

{
  "type": "phone:ringing",
  "data": {
    "cdr": {
      "id": "uuid",
      "direction": "inbound|outbound",
      "from": "extension1",
      "to": "extension2",
      "headers": {},
      "video": false,
      "status": "ringing",
      "date": "ISO 8601 date",
      "wait": 0,
      "total": 0,
      "duration": 0
    },
    "context": {}
  }
}
phone:accepted

Triggered once the call is accepted.

{
  "type": "phone:ringing",
  "data": {
    "cdr": {
      "id": "uuid",
      "direction": "inbound|outbound",
      "from": "extension1",
      "to": "extension2",
      "headers": {},
      "video": false,
      "status": "answered",
      "date": "ISO 8601 date",
      "wait": 1,
      "total": 1,
      "duration": 0
    },
    "context": {}
  }
}
phone:terminated

Triggered upon call termination. The status field can have one of two possible values at this point: missed or answered;

{
  "type": "phone:terminated",
  "data": {
    "cdr": {
      "id": "uuid",
      "direction": "inbound|outbound",
      "from": "extension1",
      "to": "extension12",
      "headers": {},
      "video": false,
      "status": "missed|answered",
      "date": "ISO 8601 date",
      "wait": 1,
      "total": 2,
      "duration": 1
    },
    "context": {}
  }
}
phone:recording

Triggered upon the recording is ready. It's sent as a base64 encoded webm file.

{
  "type": "phone:recording",
  "data": {
    "id": "uuid", // the call id
    "audio": {
      "blob": "base64 webm audio file"
    },
    "context": {}
  }
}
phone:transcript

Triggered upon the transcription is ready.

{
  "type": "phone:transcript",
  "data": {
    "id": "uuid", // the call id
    "transcription": [
      {
        "channel": "remote|local",
        "start": 0,
        "end": 0,
        "text": ""
      }
    ],
    "context": {}
  }
}
phone:summarization

Triggered upon the summarization is ready.

{
  "type": "phone:summarization",
  "data": {
    "id": "uuid", // the call id
    "summarization": "text",
    "context": {}
  }
}

Context

All events come with a context field. This includes various account details that help identify who is sending the event, among other common settings:

{
  "nickname": "John Doe",
  "sipUri": "sip:[email protected]",
  "sipUser": "JohnDoe",
  "language": "en",
  "device": "default",
  "status": "online",
  "size": { "width": 360, "height": 500 }
}

Retry

If the http call fails the softphone will try the request 5 times delaying the request gradually up to 2.5 minutes.

CDR payload

Field Info
id ID obtained from SIP headers X-Call-ID or Call-ID in that order
direction Determines the direction of the call: inbound or outbound
from The initiator of the call. It is derived from the P-Asserted-Identity which is a Number if outbound or displayName if inbound
to The receiver of the call. Calculated as the opposite of the from field
video Indicates if the call used video: true or false
status Possible statuses: ringing or answered or missed
date ISO 8601 date format
wait Number of seconds waited before the call is answered
duration Duration of the call in seconds after it is answered
total Total duration of the call in seconds. Calculated by adding the wait and duration values

Community VS Commercial

We offer a commercial version that incorporates embedded AI models and provides integrations with widely recognized CRMs, Helpdesk, and analytics software. If you're interested, please contact us.

Community Commercial
Support Github Dedicated
Desktop Softphone ๐ŸŸข ๐ŸŸข
Mobile Softphone sources ๐ŸŸข
Events ๐ŸŸข ๐ŸŸข
Integrations ๐Ÿ”ด ๐ŸŸข
AI Speech2Text ๐ŸŸข ๐ŸŸข
AI Summarization ๐ŸŸข ๐ŸŸข
AI Sentiment Analysis ๐Ÿ”ด ๐ŸŸข
AI KPI insights ๐Ÿ”ด ๐ŸŸข
Programmable conversational agent ChatGPT ChatGPT embedded

Contributing

Every sort of contribution will be very helpful to enhance 008. How youโ€™ll participate? All your ideas and code are welcome:

  • โญ this repo! It helps us a lot.
  • Report bugs
  • Contribute to 008's code

License

Released under the AGPL-3.0 license.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

If you wish to use our software in a manner that does not allow for AGPL-3.0 compliance (e.g., incorporating our software into proprietary software), you can obtain a commercial license. This commercial license provides more flexibility in terms of integration and redistribution, but comes with its own terms and conditions. If you require a commercial license, please send us an email directly for more information and pricing details.

008's People

Contributors

davidgortega avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

008's Issues

How to set up

Hello. Thank you for your time on this project.
I made the json file, but I don't know where to import it!
There is no upload button in the settings section! Should I copy this file to a specific path?

Roadmap

  • Configuration
    • BasicAuth HTTP request
    • Local file
  • Contacts
    • VCF
    • Google contacts
    • Microsoft Outlook
  • Calls
  • Transfers
    • Blind
    • Attended
  • AutoAnswer
  • "Numbers" or Caller IDs
  • Custom statuses
  • Video
  • Events
  • Multi language
  • AI - Speech2Text with embedded models
  • AI - Summarization with embedded models Commercial
  • AI - Sentiment analysis with embedded models Commercial
  • AI - KPI insights extracted from conversation with embedded models Commercial
  • AI - Programmable conversational agent with embedded LLMs or ChatGPT
  • Multiple calls (simultaneously)
  • Group calling / Video meetings
  • Mobile
    • iOS
    • Android
  • Styling Commercial
  • Semantic Search within app Commercial
  • CDRs Storage by user account
  • Messaging
  • Threaded history like whastapp

Support persian language

Hello
We needs to use this code for our software, but all custuse Farsi ( persian ) languages...

please add persian language support to this app..

008 Tray icon is not visible in Linux

Many flavours of linux do not show correctly the tray icon. It should be shown with the light version but it is shown the dark version.
This has been specially reported in Ubuntu 22

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.