Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

baresipy

A python wrapper around baresip, the portable SIP user-agent.

Use it to place and receive VoIP calls from python: dial out, answer inbound calls, stream text-to-speech or arbitrary audio into a call, send/receive DTMF, transcribe what a caller says, and build interactive voice bots — with or without a SIP registrar, with or without a sound card.

Install

sudo apt-get install baresip ffmpeg   # Debian/Ubuntu, see docs/setup.md for other distros
pip install baresipy

baresip is the SIP engine baresipy drives via pexpect; ffmpeg is used by pydub for audio conversion. See docs/setup.md for per-distro install commands, SIP account requirements, and troubleshooting.

Optional extras:

extra installs needed for
baresipy[ovos] ovos-plugin-manager, phoonnx, ovos-simple-listener speak()/say() default TTS engine, baresipy.ovos.BareSIPMicrophone, voice bots
baresipy[server] fastapi, uvicorn, python-multipart baresipy-gateway HTTP/WebSocket API, see docs/http-gateway.md
baresipy[test] pytest, pytest-cov, fastapi, httpx, python-multipart, uvicorn running the test suite

Quickstart

Scripted call

Dial a number, speak, hang up:

from baresipy import BareSIP
from time import sleep

b = BareSIP("your_user", "your_password", "your_sip_gateway.example")
b.call("someone@your_sip_gateway.example")

while b.running:
    sleep(0.5)
    if b.call_established:
        b.speak("hello, this is a test")
        b.hang()
        b.quit()
        break

Full runnable version: examples/scripted_call.py.

Answering bot

Subclass BareSIP and override the event handlers:

from baresipy import BareSIP
from time import sleep


class JokeBOT(BareSIP):
    def handle_incoming_call(self, number):
        self.accept_call()

    def handle_call_established(self):
        self.speak("Welcome to the jokes bot")
        self.speak("Goodbye")
        self.hang()


b = JokeBOT("your_user", "your_password", "your_sip_gateway.example")
while b.running:
    sleep(1)

Full runnable version: examples/events.py.

OVOS voice bot

Answer a call and transcribe the caller with an OVOS STT/VAD pipeline, using the incoming call audio as a microphone source:

from baresipy import BareSIP
from baresipy.ovos import BareSIPMicrophone
from ovos_plugin_manager.stt import OVOSSTTFactory
from ovos_plugin_manager.vad import OVOSVADFactory
from ovos_simple_listener import SimpleListener, ListenerCallbacks


class VoiceBot(BareSIP):
    def handle_incoming_call(self, number):
        self.accept_call()

    def handle_call_established(self):
        mic = BareSIPMicrophone(sip=self)
        SimpleListener(mic=mic, wakeword=None,
                        vad=OVOSVADFactory.create(),
                        stt=OVOSSTTFactory.create(),
                        callbacks=ListenerCallbacks()).start()


bot = VoiceBot("your_user", "your_password", "your_sip_gateway.example", record_rx=True)

Full runnable version with two-way TTS replies: examples/voice_bot.py. See docs/ovos-integration.md for the complete walkthrough.

Features

Feature How
Registered SIP account calls BareSIP(user, pwd, gateway)
Registrar-less direct SIP calls BareSIP() + call("sip:user@ip:5060"), see docs/direct-calls.md
Headless operation (no sound card) BareSIP(headless=True)
Text-to-speech into a call speak() via any OPM TTS plugin
Arbitrary audio into a call send_audio(path)
DTMF (send/receive) send_dtmf(digits, mode="keys"), handle_dtmf_received()
Recording inbound call audio record_rx=True, get_rx_wav() / get_rx_stream()
OVOS microphone plugin baresipy.ovos.BareSIPMicrophone
Local contact list baresipy.contacts.ContactList
Event-driven call handling override handle_* methods

Documentation

Credits

This work has been sponsored by Matt Keys, eZuce Inc

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

baresipy-1.1.0a1.tar.gz (44.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

baresipy-1.1.0a1-py3-none-any.whl (54.5 kB view details)

Uploaded Python 3

File details

Details for the file baresipy-1.1.0a1.tar.gz.

File metadata

  • Download URL: baresipy-1.1.0a1.tar.gz
  • Upload date:
  • Size: 44.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for baresipy-1.1.0a1.tar.gz
Algorithm Hash digest
SHA256 820b8872b3931071b8a8e2f19c6bf36b6e5b0e5fa9231fb9991eca6174656d87
MD5 8ac6f5f7ea0456659b113835955b3f20
BLAKE2b-256 2025a232c30a916593d39712f100067da0af994473c4d59656aa14dab97e5fed

See more details on using hashes here.

File details

Details for the file baresipy-1.1.0a1-py3-none-any.whl.

File metadata

  • Download URL: baresipy-1.1.0a1-py3-none-any.whl
  • Upload date:
  • Size: 54.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for baresipy-1.1.0a1-py3-none-any.whl
Algorithm Hash digest
SHA256 45bf5406d7cea5561ce4e3428a10380bf966dd21ee0e1baf22cf834631b4c721
MD5 f3edfe5e66810a6d5439b04d25c703d3
BLAKE2b-256 4da5a1dfb504d14c489ec3ec50894f8f9691fdc86c1b7497c5cc40b29d7cf219

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page