Clustaar webhook framework
Project description
clustaar.webhook
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
File details
Details for the file clustaar.webhook-0.1.7.tar.gz
.
File metadata
- Download URL: clustaar.webhook-0.1.7.tar.gz
- Upload date:
- Size: 25.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 116ded975aff0993feca81924506af60828a11e0d0802e4ea182961474286688 |
|
MD5 | dc02da0afad3fd627949785b44f9f01e |
|
BLAKE2b-256 | 825630a1051311262f411ba62a39147ecc495cb3e08e237f25c2436e09d29f52 |