Skip to main content

Pure Python3 with Gevent implement the FreeSWITCH Event Socket Protocol Client

Project description


RedFS - FreeSWITCH Event Socket
FreeSWITCH Event Socket Protocol Client Library by Python3:Gevent

Why RedFS ?

It's origin fork from greenswitch, with additional implementation:

  • Minimalize dependency (gevent only)
  • Large scale adaptation
  • Bug fix
  • Python3 syntax improvement

Usage

Installation

pip3 install redfs

FreeSWITCH configuration

event socket module

<configuration name="event_socket.conf" description="Socket Client">
  <settings>
    <param name="nat-map" value="false"/>
    <param name="listen-ip" value="127.0.0.1"/>
    <param name="listen-port" value="8021"/>
    <param name="password" value="your-esl-password"/>
  </settings>
</configuration>

dialplan

<include>
  <context name="default">
    <extension name="daemon-ex">
      <condition regex="all">
        <regex field="destination_number" expression="."/>
        <action application="sched_hangup" data="+60 ALLOTTED_TIMEOUT"/>
        <action application="park"/>
        <anti-action application="hangup" data="REQUESTED_CHAN_UNAVAIL"/>
     </condition>
    </extension>
  </context>
</include>

a simple python application for auto answer.

import gevent
import redfs
import traceback


ESL_HOST = '127.0.0.1'
ESL_PORT = 8021
ESL_PASSWORD = 'your-esl-password'
ESL_TIMEOUT = 10

def realtime(event):
    event_name = event.headers.get('Event-Name')
    uuid = event.headers.get('Unique-ID')
    print(f'Event {event_name} with uuid {uuid}')

    conn = redfs.InboundESL(host=ESL_HOST, port=ESL_PORT, password=ESL_PASSWORD, timeout=ESL_TIMEOUT)
    conn.connect()

    if event_name == 'CHANNEL_PARK':
        cmd = f'api uuid_answer {uuid}'
        res = conn.send(cmd)
        print(cmd, res.data)

def printlog(event):
    event_name = event.headers.get('Event-Name')
    uuid = event.headers.get('Unique-ID')
    print(f'Event {event_name} with uuid {uuid}')

cnx = redfs.InboundESL(host=ESL_HOST, port=ESL_PORT, password=ESL_PASSWORD, timeout=ESL_TIMEOUT)
cnx.connect()

cnx.register_handle(['CHANNEL_PARK', 'CHANNEL_ANSWER'], realtime)
cnx.register_handle('*', printlog)
cnx.send('EVENTS PLAIN ALL')
print('connected')
while True:
    try:
        gevent.sleep(1)
    except KeyboardInterrupt:
        cnx.stop()
        break
    except Exception as e:
        print(e, traceback.format_exc())

Enjoy!

License

MIT

Project details


Download files

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

Source Distribution

redfs-0.0.4rc0.tar.gz (6.2 kB view details)

Uploaded Source

Built Distribution

redfs-0.0.4rc0-py3-none-any.whl (6.3 kB view details)

Uploaded Python 3

File details

Details for the file redfs-0.0.4rc0.tar.gz.

File metadata

  • Download URL: redfs-0.0.4rc0.tar.gz
  • Upload date:
  • Size: 6.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.6

File hashes

Hashes for redfs-0.0.4rc0.tar.gz
Algorithm Hash digest
SHA256 0a350661e413b43fc3e3c60cfad30b300bd77e569952393f66d1aa37a0f9a336
MD5 be1a642be06859cba01a10903ba1a327
BLAKE2b-256 0aa5f33c3bee74ca00750c573553696d946d10571c19a144578ffc700bf92106

See more details on using hashes here.

File details

Details for the file redfs-0.0.4rc0-py3-none-any.whl.

File metadata

  • Download URL: redfs-0.0.4rc0-py3-none-any.whl
  • Upload date:
  • Size: 6.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.6

File hashes

Hashes for redfs-0.0.4rc0-py3-none-any.whl
Algorithm Hash digest
SHA256 669ab77da59d40a82a7ff45b8415380a261e689cfe5ee156026ea7816ce9471d
MD5 884dbaa5b7412824acf450a4b65fd835
BLAKE2b-256 c57c3eaab9a2bff2cd0cc5aad5d6b29dfa09874bcf1a1f1979255b4a2390d795

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page