{"id":51409518,"url":"https://github.com/estvita/exten_bot","last_synced_at":"2026-07-23T06:00:35.926Z","repository":{"id":295375290,"uuid":"988936439","full_name":"estvita/exten_bot","owner":"estvita","description":"Speech-to-Speech OpenAI Realtime VoIP Bot (SIP Extension) with Function Calling and External MCP Servers","archived":false,"fork":false,"pushed_at":"2025-09-10T04:45:37.000Z","size":172,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-10T08:31:46.806Z","etag":null,"topics":["asterisk","conversation","dify","django","extension","freepbx","function-calling","mcp-client","openai-realtime-api","opensips","pbx","python","sip","sip-server","speech-to-speech","voice-bot","voip","workflow"],"latest_commit_sha":null,"homepage":"https://exten.bot","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/estvita.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-23T09:53:59.000Z","updated_at":"2025-09-10T04:45:40.000Z","dependencies_parsed_at":"2025-05-25T08:18:35.974Z","dependency_job_id":"2872f016-e40a-403d-b4f6-1059347e0547","html_url":"https://github.com/estvita/exten_bot","commit_stats":null,"previous_names":["estvita/exten_bot"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/estvita/exten_bot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/estvita%2Fexten_bot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/estvita%2Fexten_bot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/estvita%2Fexten_bot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/estvita%2Fexten_bot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/estvita","download_url":"https://codeload.github.com/estvita/exten_bot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/estvita%2Fexten_bot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35791261,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-23T02:00:06.683Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asterisk","conversation","dify","django","extension","freepbx","function-calling","mcp-client","openai-realtime-api","opensips","pbx","python","sip","sip-server","speech-to-speech","voice-bot","voip","workflow"],"created_at":"2026-07-04T14:00:27.788Z","updated_at":"2026-07-23T06:00:35.921Z","avatar_url":"https://github.com/estvita.png","language":"Python","funding_links":[],"categories":["AI \u0026 Machine Learning"],"sub_categories":["Telecom LLMs \u0026 AI Assistants"],"readme":"# exten.bot\n\nexten.bot is a Django-based web interface for creating VoIP voice bots that can be connected to any software or hardware PBX supporting SIP.\n\nThe system is built on an OpenSIPS server and the [opensips-ai-voice-connector](https://github.com/OpenSIPS/opensips-ai-voice-connector-ce).\n\nFor AI, it uses the OpenAI real-time API.\n\nThe platform supports custom functions and MCP servers for extending bot capabilities and integrating with external systems.\n\nYou can test its features at [exten.bot](https://exten.bot).\n\n## Installation\n\nOS: Debian 12\nDB: MySQL\n\n### SIP Server OpenSIPS\n\n+ You need to install the OpenSIPS 3.6 server; please use the [official documentation](https://www.opensips.org/Documentation/Manual-3-6) for this.\n\n+ Install [opensips-cli](https://github.com/OpenSIPS/opensips-cli/blob/master/docs/INSTALLATION.md)\n+ Install opensips modules: opensips-mysql-module, opensips-mysql-dbschema, opensips-json-module, opensips-http-modules, opensips-restclient-module, opensips-auth-modules, opensips-dialplan-module\n```\ncurl https://apt.opensips.org/opensips-org.gpg -o /usr/share/keyrings/opensips-org.gpg\necho \"deb [signed-by=/usr/share/keyrings/opensips-org.gpg] https://apt.opensips.org bookworm 3.6-releases\" \u003e/etc/apt/sources.list.d/opensips.list\necho \"deb [signed-by=/usr/share/keyrings/opensips-org.gpg] https://apt.opensips.org bookworm cli-nightly\" \u003e/etc/apt/sources.list.d/opensips-cli.list\n\napt update\n\napt install opensips opensips-cli opensips-mysql-module opensips-mysql-dbschema opensips-json-module opensips-http-modules opensips-restclient-module opensips-auth-modules opensips-dialplan-module\n```\n+ Optional: install [openssips-cp](https://github.com/OpenSIPS/opensips-cp)\n+ place the configuration files [opensips.cfg](examples/opensips.cfg) and [opensips-cli.sfg](examples/opensips-cli.cfg) in the folder \n/etc/opensips and replace the database connection data with your own\n+ create opensips db: opensips-cli -x database create\n+ add your sip exten.bot domain (exten.example.com) to opensips domains tables\n\n### Exten.bot Web App\n\n```\nsudo apt-get install build-essential libmysqlclient-dev python3-dev libssl-dev pkg-config\ngit clone https://github.com/estvita/exten_bot.git\ncd exten_bot\ncp examples/.env.example .env\nMake the necessary changes to your .env\npython3 -m venv .venv\nsource .venv/bin/activate\npip install -r requirements/production.txt\n```\n\nAfter installing the required packages and dependencies, proceed with the basic configuration.\n\n```\npython manage.py migrate\npython manage.py collectstatic\npython manage.py createsuperuser\n\npython manage.py runserver 0.0.0.0:8000\n```\n\nin the admin panel /admin/authtoken/ create and save user token\n\n### AI Voice Connector \nUse my fork of the [voice connector](https://github.com/estvita/opensips-ai-voice-connector-ce) for enhanced functionality\n\nI haven't tested my connection with installing the openai voice connector in Docker, so for now we'll run it in a virtual python environment.\n\n```\ngit clone https://github.com/estvita/opensips-ai-voice-connector-ce connector\ncd connector \npython3 -m venv .venv\nsource .venv/bin/activate\npip install -r requirements.txt\ncp docs/config.example config.ini\n```\n\nmake changes to the config.ini\n\n```\n[opensips]\nip = 127.0.0.1\nport = 8080\n\n[rtp]\nip = 192.168.3.29 vyour Opensips server external address\nmin_port = 10000\nmax_port = 20000\n\n[engine]\nevent_ip = 127.0.0.1\nbind_ip = 0.0.0.0\nevent_port = 50060\napi_url = http://127.0.0.1:8000/api/bots/ your exten.bot api url\napi_key = XXXXXXXXXXXXX token generated in exten.bot Django admin\n```\n\ntry running the voice connector\n\n\n```\npython src/main.py -c config.ini -l INFO\n```\n\nin the logs/app.log you should see something like this\n\n```\n2025-05-25 11:44:11,575 - tid: 139832749932608 - INFO - Starting server at 127.0.0.1:50060\n```\nAfter testing you can run voice connector as a [debian service](examples/connector.service)\n\n## Settings\n\ngo to the admin panel at your_domain/admin and fill in the following data\n\n+ /admin/bot/domain/ add the domain (exten.example.com), the same as in the opensips domain settings\n+ /admin/bot/model/ add models [gpt-4o-realtime-preview](https://platform.openai.com/docs/models/gpt-4o-realtime-preview)\n+ /admin/bot/voice/ add bot [voices](https://platform.openai.com/docs/guides/realtime-conversations#voice-options)\n\n+ /admin/workflow/function/ add custom functions that the voice bot can call during conversations\n+ /admin/workflow/mcp/ add MCP servers for extended bot capabilities\n\nNow you can create a voice bot\n+ /admin/bot/bot/ add bot\n\nDescription of fields\n\n+ Owner - the user to whom the bot will be linked\n+ Username and Password - are generated automatically, you will use this data to connect to the SIP\n+ Domain - your exten.bot SIP domain\n+ Token - [openai token](https://platform.openai.com/api-keys)\n+ Model - openai realtime model\n+ Voice - openai voice\n+ Instruction - text instruction for the bot\n+ Welcome msg - the message that the bot will voice when connecting\n+ Transfer uri - sip uri to which the voice bot will forward the call at the user's request (sip:operator@pbx.com)\n+ Functions - Select custom functions that the voice bot can access during conversations\n+ MCP Servers - Select MCP servers for extended bot capabilities\n\nAfter this, check that the account has been created in the opensips database (subscriber table).\n\nif everything is ok, you can use the received credentials of the sip account on your softphone or PBX to call [openai@exten.example.com] and talk to your voice bot on the phone\n\nTo diagnose the SIP connection on your server, use the console utility [sngrep]\n\n## Functions and MCP Servers\n\n### Custom Functions\n- Go to `/admin/workflow/function/` to create custom functions\n- Each function requires: name, URL, JSON schema, and optional input schema\n- Functions are linked to bots and can be called during conversations\n- Only bot owners can link their own functions to their bots\n\n### MCP Servers\n- Go to `/admin/workflow/mcp/` to add MCP servers\n- Each server requires: base URL, optional API key, and approval settings\n- Server labels are auto-generated but can be edited\n- MCP servers provide extended capabilities to voice bots\n- Only bot owners can link their own MCP servers to their bots\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Festvita%2Fexten_bot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Festvita%2Fexten_bot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Festvita%2Fexten_bot/lists"}