logofirst
logofirst

Create custom events for webhooks in Label Studio

If you want to trigger custom events for webhooks in Label Studio, you can extend the webhook event model.

Create a custom webhook event

To create a custom webhook event, add your own action to the WebhookActions model.

For example:

class WebhookAction(models.Model):
    ...
    SOMETHING_HAPPENED = 'SOMETHING_HAPPENED'
    ...
    ACTIONS = {
        SOMETHING_HAPPENED: {
            'name': _('Something happened'),
            'description': _("A thing happened. We wanted to let you know."),
            'key': 'something',
        },
        ...
    ...

After declaring the action and the associated properties and payload details in the WebhookAction class, call the event action in the code where it occurs. For example:

...python
result = do_something()
emit_webhooks(organization, WebhookAction.SOMETHING_HAPPENED, {'something': [result]})
...

You can retrieve the organization details using Organization.objects.first().

Call event actions with Python functions

There are several functions you can use to call event actions. Refer to the following table:

Python function When to use Additional details
get_active_webhooks() Get all active webhooks.
run_webhook() Run one webhook and pass some payload.
emit_webhooks() Send requests for all webhooks for an action.
emit_webhooks_for_instances() Send serialized instances with webhook requests. You must declare a serializer in the WebhookAction.ACTIONS model.

Call event actions with decorators in API source code

You can use decorators with the CRUD REST methods to send event actions to webhooks. You can use the following:

Decorator syntax When to use Details
@api_webhook() POST/PUT/PATCH requests Expects a response with an id and uses the .get_object() function after the request to send that information.
@api_webhook_for_delete() DELETE Sends only the id field after a successfully delete operation.