Tools and Tricks

Tools and Tricks #

Here we list some useful tools to streamline your development process with Genesis.

filtrate #

The filtrate decorator allows you to filter FreeSWITCH events based on a key-value pair. A handler decorated with filtrate will only execute if the specified key exists in the event and, optionally, if its value matches.

ArgumentTypeRequiredDefault
keystrYesN/A
valuestrNoN/A
regexboolNoFalse

Filter by Key #

This example processes any sofia::register event that contains the from-user key.

@app.handle('sofia::register')
@filtrate('from-user')
def register(event):
    domain = event['from-host']
    username = event['from-user']
    date = event['Event-Date-Local']
    print(f'[{date}] {username}@{domain} - Registered.')

Filter by Key and Value #

This example processes sofia::register events only if the from-user key has a value of 1000.

@app.handle('sofia::register')
@filtrate('from-user', '1000')
def register(event):
    domain = event['from-host']
    username = event['from-user']
    date = event['Event-Date-Local']
    print(f'[{date}] {username}@{domain} - Registered.')

Filter by Key and Regex Value #

This example uses a regular expression to process sofia::register events where the from-user value is a 4-digit number starting with 1.

@app.handle('sofia::register')
@filtrate('from-user', '^1[0-9]{3}$', regex=True)
def register(event):
    domain = event['from-host']
    username = event['from-user']
    date = event['Event-Date-Local']
    print(f'[{date}] {username}@{domain} - Registered.')