# Webhook

## Select the running environment

The first step to develop a new webhook type plugin is to determine what environment is going to be used:

* Python
* NodeJS

## Create the file structure

Set up a directory structure with the following files

```
├── src
│   ├── control.py || control.js  
│   ├── function.py || function.js
│   ├── user_code.py || user_code.js
│   ├── view.xml
├── LICENSE
├── README.md
├── manifest.toml 
```

## control, function and user\_code scripts

Fill those files with the content that you require according to the table below, then save them.

<table><thead><tr><th width="127">Script</th><th width="244">Executed </th><th width="379">Purpose</th></tr></thead><tbody><tr><td>control</td><td>Only once when the plugin is created</td><td>Perform one time setup tasks</td></tr><tr><td>function</td><td>Triggered by webhook</td><td>Perform any task</td></tr><tr><td>user_code</td><td>Triggered by webhook if invoked by function script</td><td>Perform any task</td></tr></tbody></table>

## view\.xml&#x20;

Populate this file with content based on the form you'd like displayed when creating this plugin.

## LICENSE and README.md

Write the contents of the README.md and LICENSE and files.&#x20;

## manifest.toml

According to the webhook section within the Private Plugins page, the manifest.toml should look like:

```webmanifest
manifest_version = 2.0
 
[settings] 
version = "1.0.56" 
runtime = "nodejs:20" | "python:3.11" 
plugin_type = "webhook" 
license_name = "MIT license" 

[settings.webhook]
default_http_method = "POST" | "GET"
allowed_http_methods =  ["POST", "GET"]

[pricing]
price = 0
```

## Compressing the files

Compress the files in zip format from the root of the file structure, not the parent folder.
