Python SIP and FreeSWITCH

Introduction

In this article, we will explore how to use Python to interact with FreeSWITCH, an open-source telephony platform. We will specifically focus on utilizing the Session Initiation Protocol (SIP) module in Python to establish and manage voice calls through FreeSWITCH. We will provide code examples to demonstrate the concepts discussed.

Prerequisites

To follow along with the examples in this article, ensure that you have the following software and libraries installed:

  • Python (version 3 or above)
  • FreeSWITCH (installed and running)
  • pysip library (pip install pysip)

Setting up a SIP Call

To initiate a SIP call using Python, we need to establish a connection to the FreeSWITCH server. We can achieve this by creating a SIP account and configuring it with the necessary credentials:

from pysip import PJSUA

# Create a SIP account
account = PJSUA.create_account("sip:username@domain.com", "password")

# Connect to the SIP server
account.connect()

# Make a call
call = account.make_call("sip:destination@domain.com")

The above code creates a SIP account with the provided username and password. We then connect to the SIP server and initiate a call to a destination SIP address.

Call Handling

Once the call is established, we can handle various call events and perform actions accordingly. For example, we can play an audio file when the call is answered:

def on_call_state(call, state):
    if state == "ANSWERED":
        call.play_audio_file("welcome.wav")

# Register the event handler
call.set_call_state_callback(on_call_state)

In the above code, we define an on_call_state function that is triggered when the call changes its state. If the state is "ANSWERED", we play an audio file using the play_audio_file method.

Call Control

We can also control the call by performing actions such as muting, holding, or transferring the call. Here's an example of muting the call when a specific key is pressed:

import keyboard

def on_key_press(event):
    if event.name == "m":
        call.mute()

# Register the key press event handler
keyboard.on_press(on_key_press)

# Wait for the call to end
call.wait()

In the above code, we use the keyboard library to detect key presses. When the "m" key is pressed, the call is muted using the mute method.

Conclusion

Python provides a convenient way to interact with FreeSWITCH using the SIP module. We explored how to establish a SIP call, handle call events, and control the call using code examples. This article only scratched the surface of what is possible with Python and FreeSWITCH. We encourage you to explore further and leverage the power of Python to build telephony applications and services.