Skip to main content

Clustaar webhook framework

Project description

clustaar.webhook

Code style: black

clustaar.webhook is a framework to build webhooks for the clustaar platform.

More documentation is available for building webhooks on https://developers.clustaar.com

Example

Here is a webhook that will trigger an handler function each times it receives a conversation.step_reached event.

from clustaar.webhook import Webhook, events
from clustaar.schemas.models import StepReachedResponse, ConversationSession

def handler(request, response, notification):
    session = ConversationSession(values={"name": "John"})
    return StepReachedResponse(actions=[], session=session)


app = Webhook()
app.on(events.CONVERSATION_STEP_REACHED, handler)

Routing

Event

Routing is achieved by specifying an event name to the on() method while configuring your webhook :

app.on(events.CONVERSATION_STEP_REACHED, handler)

Filters

If you want to add some condition to route events based on the request received you can use filters.

In this example, handler will receive the requests only when the event is of type events.CONVERSATION_STEP_REACHED and the value of the JSON key data.step.id equals "507f191e810c19729de860ea" :

from clustaar.webhook.filters import JSONKeyEquals
app.on(events.CONVERSATION_STEP_REACHED,
       handler,
       filter=JSONKeyEquals("data.step.id", "507f191e810c19729de860ea"))

JSONKeyEquals

Validates that a JSON key equals an expected value.

data = {
    "user": {
        "id": 1
    }
}
filter = JSONKeyEquals("user.id", 1)
assert filter(data)
data["user"]["id"] = 2
assert not filter(data)

JSONKeyIn

Validates that a key is present in a defined set of values.

data = {
    "user": {
        "id": 1
    }
}
filter = JSONKeyIn("user.id", [1, 2])
assert filter(data)
data["user"]["id"] = 2
assert filter(data)
data["user"]["id"] = 3
assert not filter(data)

JSONKeyExists

Validates that a JSON key is present.

data = {
    "user": {
        "id": 1
    }
}
filter = JSONKeyExists("user.id")
assert filter(data)
del data["user"]["id"]
assert not filter(data)

StepID

Validates that the data.step.id correspond to the expected id.

data = {
	"data": {
	    "step": {
	        "id": "507f191e810c19729de860ea"
	    }
    }
}
filter = StepID("507f191e810c19729de860ea")
assert filter(data)
del data["data"]["step"]["id"]
assert not filter(data)

If you pass a list of step IDs to the StepID filter it will validate the the data.step.id is present in the list.

Security

Request signature

If you want to validate the signature of the requests sent by clustaar, you need to provide a private key.
This private key must be set in your bot's webhook configuration.

app = Webhook(private_key="XXXXXXXXXX")

Authentication

If you want to add some authentication to your application you can pass the HTTP basic authentication credentials that you defined in your webhook's configuration.

app = Webhook(auth_username="XXXXXXXXXX", auth_password="YYYYYYYYY")

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

clustaar.webhook-0.1.6.tar.gz (22.8 kB view details)

Uploaded Source

File details

Details for the file clustaar.webhook-0.1.6.tar.gz.

File metadata

  • Download URL: clustaar.webhook-0.1.6.tar.gz
  • Upload date:
  • Size: 22.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.4.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.7.6

File hashes

Hashes for clustaar.webhook-0.1.6.tar.gz
Algorithm Hash digest
SHA256 f796d28c9a2b41ab183bbe14b79e66d913cfe958629172a9cd2d5eae09d3ce3f
MD5 fdc0335611a0abf6fe3d297438e5db0a
BLAKE2b-256 d8a3f2cff3b2f8dd8f304292316b50081392cfcd0ff812c7c5cbd33710420eb1

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