Skip to main content

Cacofonisk

Cacofonisk is a framework that connects to the Asterisk PBX, listens to events on the Asterisk Management Interface (AMI) and tracks the status of calls currently in progress in Asterisk.

Cacofonisk takes a stream of AMI events as input and uses these to keep track of the channels currently active in Asterisk and how they are related. When something interesting happens to one of the channels, it will call a method on a call state Reporter with interesting information about the call, like who is in the call, and a unique identifier.

This data can then be used to send webhooks regarding a call, to notify a person who is being called, or to log calls being performed.

Status

This product is actively being developed and used at VoIPGRID.

Usage

Requirements

  • Python >= 3.4
  • Panoramisk 1.x
  • Asterisk >= 12

Installation

Cacofonisk is available on Pypi so you can easily install it with pip:

$ pip install cacofonisk

To install the dependencies from source:

$ python3 setup.py install

Running

To run Cacofonisk, you will need two things: a Runner and a Reporter.

A Runner is a class which is responsible for passing AMI events to the Cacofonisk. Two runners are included: an AmiRunner (which connects to the Asterisk Management Interface) and a FileRunner (which imports AMI events from a JSON file).

A Reporter is a class which takes the interesting data from Cacofonisk and does awesome things with it. You can find various Reporters in the examples folder.

To create your own reporter, you can extend the BaseReporter class and implement your own event handlers, like so:

from cacofonisk import AmiRunner, BaseReporter


class ReportAllTheThings(BaseReporter):

    def on_b_dial(self, caller, targets):
        target_channels = [target.name for target in targets]
        caller_number = caller.caller_id.num
        print("{} is now calling {}".format(
            caller_number, ', '.join(target_channels),
        ))

    def on_up(self, caller, target):
        target_number = target.caller_id.num
        caller_number = caller.caller_id.num
        print("{} is now in conversation with {}".format(caller_number, target_number))

    def on_hangup(self, caller, reason):
        caller_number = caller.caller_id.num
        print("{} is no longer calling (reason: {})".format(caller_number, reason))


reporter = ReportAllTheThings()
runner = AmiRunner(['tcp://username:password@127.0.0.1:5038'], reporter)
runner.run()

This reporter can then be passed to a Runner of your choice to process AMI events.

For more information about the parameters of the reporter, please see the docs in BaseReporter.

You can also listen for UserEvents using the on_user_event function. This can be used to pass additional data from Asterisk to your Cacofonisk application.

Running the tests

To run the test suite:

$ python3 -m unittest

Contributing

See the CONTRIBUTING.md file on how to contribute to this project.

Contributors

See the CONTRIBUTORS.md file for a list of contributors to the project.

Roadmap

Changelog

The changelog can be found in the CHANGELOG.md file.

In progress

No features are currently in progress.

Future

No features are currently scheduled. Have great ideas? Please don't hesitate to share them!

Get in touch with a developer

If you want to report an issue see the CONTRIBUTING.md file for more info.

We will be happy to answer your other questions at opensource@wearespindle.com.

License

Cacofonisk is made available under the MIT license. See the LICENSE file for more info.

Release files for cacofonisk 0.7.10

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cacofonisk 0.7.10
File Size Uploaded
cacofonisk-0.7.10.tar.gz 30.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cacofonisk 0.7.10
File Interpreter ABI Platform
cacofonisk-0.7.10-py3-none-any.whl Python 3 none any Details

Total release size: 69.8 kB

Release files / cacofonisk-0.7.10.tar.gz

Download URL cacofonisk-0.7.10.tar.gz
Size 30.3 kB
Tags Source
SHA-256 checksum
How to use checksums
56aca979288c991d9ba3669f9b66a01b18ff23bb510f4b17999398e343893c73
BLAKE2b-256 checksum
How to use checksums
4caef7f03030e00a909188de788d9635211e6f9b4bd2762f67526f0b506e8b66
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.7.17

Release files / cacofonisk-0.7.10-py3-none-any.whl

Download URL cacofonisk-0.7.10-py3-none-any.whl
Size 39.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
67cd7f8fbdfbab197051d056eeaa895388b2df915be32f075c8957d6cac811a0
BLAKE2b-256 checksum
How to use checksums
807ade0d9e1625ca766f3d81f8536fe0fd8ec75e90930eb69d72783177dcacbf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.7.17

Release history Release notifications | RSS feed

This release

0.7.10 This release

2 release files

0.7.9

2 release files

0.7.8

2 release files

0.7.7

2 release files

0.7.6

2 release files

0.7.5

2 release files

0.7.4

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

1 release file

0.7.0

1 release file

0.6.0

1 release file

0.5.1

1 release file

0.5.0

1 release file

0.4.0

1 release file

0.3.0

1 release file

0.2.2

1 release file

0.2.0

1 release file

0.1.0

1 release file

0.0.3

1 release file

0.0.2

1 release file

0.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page