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.

Examples

Example Demonstrates
examples/scripted_call.py dial out, speak, send DTMF, hang up
examples/events.py subclassing BareSIP to auto-answer and speak
examples/voice_bot.py two-way OVOS STT/TTS voice bot
examples/voicemail.py voicemail / answering machine, with optional transcription
examples/call_transfer.py receptionist-style call transfer
examples/outbound_campaign.py sequential outbound dialing campaign
examples/conversational_agent.py barge-in voice agent with a pluggable response function
examples/multi_line.py concurrent multi-line SIP in one process
examples/secure_trunk.py registered account over TLS transport + SRTP media
examples/gateway_client.py driving baresipy-gateway over HTTP/WebSocket
examples/contact_list.py local JSON contact store
examples/ivr_menu.py IVR menu (DTMF-driven call routing) - not yet added, see docs/call-control.md for the DTMF primitives it will use

See docs/call-control.md for transfer, DTMF, barge-in, and call-metadata details used across these examples.

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.2.0a2.tar.gz (54.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.2.0a2-py3-none-any.whl (68.3 kB view details)

Uploaded Python 3

File details

Details for the file baresipy-1.2.0a2.tar.gz.

File metadata

  • Download URL: baresipy-1.2.0a2.tar.gz
  • Upload date:
  • Size: 54.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.2.0a2.tar.gz
Algorithm Hash digest
SHA256 58a50faaa346fe5c275114460fab6dc3230ca4dc815fe1a88ad7851a6ff51096
MD5 f44e17ba7524423507c7490520c7a6f4
BLAKE2b-256 d0e85758eef56d9cd1aa7447d88a679861f75d3edfa3027c88f49e35c62b9a6e

See more details on using hashes here.

File details

Details for the file baresipy-1.2.0a2-py3-none-any.whl.

File metadata

  • Download URL: baresipy-1.2.0a2-py3-none-any.whl
  • Upload date:
  • Size: 68.3 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.2.0a2-py3-none-any.whl
Algorithm Hash digest
SHA256 688dd8e3198dfa3ca63ec61c28ce0ff6e197787e7a0c682a27b341a4be912c6d
MD5 3f5bcf718a0e2f4c5a7a275fec1392e1
BLAKE2b-256 c1eb8356dbc26c8baaee567dde8ddf67e0f1fc57b295de9378822252bf14f13a

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