[{"content":"JS This filter allows to extend the basic driplane\u0026rsquo;s filter, defining Javascript scripts. It is based on islazy/plugin which in turn is based on robertkrimen/otto.\nDefining a JS file with our custom logic, it is possible create a complex filter.\nParameters Parameter Type Default Description path STRING empty path of the Javascript file (it can contains multiple functions) function STRING empty name of the function in the JS file to call when a Message is received ... | js(path=\u0026quot;script.js\u0026quot;, function=\u0026quot;MyFunction\u0026quot;) | ...\rOutput The output Message of this filter depends on the return value of the JS function itself.\nExamples Soon\u0026hellip; ","description":"","id":0,"section":"doc","tags":null,"title":"Basics","uri":"https://matrix86.github.io/driplane/en/doc/filters/js/basics/"},{"content":"Build and install Launching the follow command go will take care of the downloading, the dependency resolving, the building and finally of the installation of the binary in the $GOBIN directory.\ngo get -u github.com/Matrix86/driplane/\u0026hellip; ","description":"","id":1,"section":"doc","tags":null,"title":"Build and install","uri":"https://matrix86.github.io/driplane/en/doc/installation/build/"},{"content":"First look Driplane include a simple language to define where to get the stream and what operation to exec, or how to filter the data.\nIn the rule could be defined 3 type of nodes:\nFEEDER : it is the node responsible for creating of a stream of data (it reads every changes on a file, gets tweets from Twitter, etc..)\nFILTER : it receives data from a feeder or another filter and checks some conditions on them or makes some changes on them. It sends the data to the next filter ONLY if the condition is verified.\nRULE CALL : every rule has a name, so you can define a rule with a preset feeder or a pipe of filters and connect them to another filter/feeder.\nIt is possible to define custom parameters for feeders or filters. Each one of them has a different type of parameters that can change their behaviour and you can find a list of them in the related section.\n","description":"","id":2,"section":"doc","tags":null,"title":"First look","uri":"https://matrix86.github.io/driplane/en/doc/rules/definition/"},{"content":"Docker driplane is containerized using a really lightweight Linux distribution called Alpine Linux.\nTo pull the latest image version:\ndocker pull matrix86/driplane To run it:\ndocker run \u0026ndash;rm -v config:/app/config -it matrix86/driplane:latest -config config/config.yaml where the config directory contains the config.yaml file, the rule directory, the js directory and the templates directory.\nLink to the Docker repository\n","description":"","id":3,"section":"doc","tags":null,"title":"Docker","uri":"https://matrix86.github.io/driplane/en/doc/installation/docker/"},{"content":"Entrypoint The JS file consists of one or more functions, and they can be used in different filters or in combination between them.\nThe function must respect some constraints:\nthe function\u0026rsquo;s name contained in the function parameter of the filter has to start with a capital letter; the function prototype must 3 variables; the function must return a JS object with at least the filtered field; Function\u0026rsquo;s prototype The function\u0026rsquo;s name specified in the function parameter of the filter, receives 3 input parameters:\nmain: it is a string with the content of the field main of the input Message; extra: a JS object that can be seen like an associative array, containing the extra fields of the input Message; params: a JS object like the previous, but it contains the configurations from the custom and the general sections. So for example we can define a function like the follow:\n1 2 3 function Entry(main, extra, params) { ... } Return value The JS function has to return a value back to the filter, so that the filter can use it to propagate the Message or drop it.\nThe method used on function parameter can return a JS object containing at least the filtered field.\nIf this field has been set to true, the Message will be sent to the next filter, otherwise if the filtered field has been set to false, the filter will drop the Message.\nWe would change the fields of the Message, and to do that we can use the data field in the returned object.\nIt could be an associative array or an array of associative array (for multiple messages to send through the pipeline) and it will be mapped in a map[string]string/[]map[string] object in the Go env.\nThe key of the array\u0026rsquo;s row is the name of the field to add or change, while the value is the string that field\u0026rsquo;s Message will contain after the return.\n1 2 3 4 5 6 7 8 9 function Entry(mainData, extra, params) { return { \u0026#34;filtered\u0026#34;: true, \u0026#34;data\u0026#34;: { \u0026#34;main\u0026#34;: \u0026#34;main field of the input Message changed\u0026#34;, \u0026#34;new_field\u0026#34;: \u0026#34;new_field will be added as Message\u0026#39;s extra field\u0026#34; } }; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 function Entry(mainData, extra, params) { return { \u0026#34;filtered\u0026#34;: true, \u0026#34;data\u0026#34;: [ { \u0026#34;main\u0026#34;: \u0026#34;main field of the input Message changed\u0026#34;, \u0026#34;new_field\u0026#34;: \u0026#34;new_field will be added as Message\u0026#39;s extra field\u0026#34; }, { \u0026#34;main\u0026#34;: \u0026#34;main field of the secondo Message\u0026#34;, \u0026#34;new_field\u0026#34;: \u0026#34;new_field will be added as Message\u0026#39;s extra field\u0026#34; }, ] }; } ","description":"","id":4,"section":"doc","tags":null,"title":"Entrypoint","uri":"https://matrix86.github.io/driplane/en/doc/filters/js/entrypoint/"},{"content":"Packages Since the JS doesn\u0026rsquo;t have all the useful functions to perform operations like on file manipulation or http request (see otto docs for more info), driplane maps and export to the JS environment some Go functions as packages.\nThese mapped functions are not definitive and they could change over time. File This package contains functions for manipulating files.\nReturn The return value will be a JS object containing 2 fields:\nName Type Description Status BOOL if true the operation was successful Error STRING if status is false it contains the reason of the failure Functions Prototype Description file.Move(src string, dest string) Move the file src to the new position dest file.Copy(src string, dest string) Copy the file src to the position dest file.Truncate(filename string, size int) set or adjust the file called filename by size bytes file.Delete(filename string) Remove the file called filename file.Exists(filename string) Return Status = true if filename exists on disk file.AppendString(filename string, text string) Append the string text to the file filename Log This package contains functions for writing strings on the logs.\nReturn It doesn\u0026rsquo;t have a return value.\nFunctions Prototype Description log.Info(format string, \u0026hellip;) Write an Info line on the log log.Error(src string, \u0026hellip;) Write an Error line on the log log.Debug(src string, \u0026hellip;) Write a Debug line on the log Strings This package contains functions for manipulating strings.\nReturn The return value will be a JS object containing 2 fields:\nName Type Description Status BOOL if true the operation was successful Error STRING if status is false it contains the reason of the failure Functions Prototype Description strings.StartsWith(str string, substr string) Status = true if str start with substr Util This package contains miscellaneous functions.\nReturn The return value will be a JS object containing 2 fields:\nName Type Description Status BOOL if true the operation was successful Error STRING if status is false it contains the reason of the failure Value STRING this string contains the returned value Functions Prototype Description util.Sleep(seconds int) wait for seconds seconds util.Getenv(name string) get the value of the name environment variables, if it exists, and return it on the Value field of the returned value util.Md5File(filename string) calculate the MD5 hash of the filename and return it on the Value field util.Sha1File(filename string) calculate the SHA1 hash of the filename and return it on the Value field util.Sha256File(filename string) calculate the SHA256 hash of the filename and return it on the Value field util.Sha512File(filename string) calculate the SHA512 hash of the filename and return it on the Value field Http This package contains functions to perform HTTP requests.\nReturn The return value will be a JS object containing 4 fields:\nName Type Description Status BOOL if true the operation was successful Error STRING if status is false it contains the reason of the failure Response OBJECT it returns the http.Response object Body STRING it contains the body of the response converted in string Functions Prototype Description http.Request(method string, uri string, headers interface{}, data interface{}) http.Get(url string, headers map[string]string) http.Post(url string, headers map[string]string, data interface{}) http.DownloadFile(filepath string, method string, uri string, headers interface{}, data interface{}) http.UploadFile(filename string, fieldname string, method string, uri string, headers interface{}, data interface{}) Cache This package contains functions for add and get values from the global cache.\nReturn The return value will be a JS object containing the following fields:\nName Type Description Status BOOL if true the operation was successful Error STRING if status is false it contains the reason of the failure Value STRING if status is true it contains the resulting value Functions Prototype Description cache.Put(key string, value string, ttl int64) add the value in the cache using the key key and it will be deleted after ttl seconds cache.Get(key string) get the value stored in the cache with the key key Exec COmmand This package contains functions for executing system commands and handling system interactions.\nReturn The return value will be a JS object containing the following fields:\nName Type Description Status BOOL if true the operation was successful Error STRING if status is false it contains the reason of the failure Value STRING if status is true it contains the standard output Functions Prototype Description util.ExecCommand(commandParts []string, inputData string) Executes the system command defined in commandParts. - commandParts[0] is the executable. - commandParts[1:] are the arguments. - inputData` is written to the Standard Input (stdin) of the command. ","description":"","id":5,"section":"doc","tags":null,"title":"Plugin Packages","uri":"https://matrix86.github.io/driplane/en/doc/filters/js/packages/"},{"content":"Syntax The syntax of the driplane\u0026rsquo;s rules is very simple. As for the BASH every filter\u0026rsquo;s output is sent to the next filter\u0026rsquo;s input concatenating the two of them with the | character.\nAll the rules have to start with a name and end with a ; char.\nImport Using the directive import it is possible to include one or more files and their rules in another one. All the rules defined in an included file\nare available for the file that imports them.\nTo use this directive the path of the file can be absolute or relative to the rules directory specified in the configuration:\nExample:\n#import \u0026quot;file_to_import.rule\u0026quot;\nRule Name and Rule Call Each rule has to start with an identifier follow by =\u0026gt;. This identifier identifies rule name and it could be used in another rule to concatenate 2 rules together.\nThis name must be unique in the rules.\rExample:\nIDENTIFIER =\u0026gt; ... ;\nIt can be included in another rule (rule call) prepending the @ to it.\nExample:\nIDENTIFIER1 =\u0026gt; ... ;\nIDENTIFIER2 =\u0026gt; ... | @IDENTIFIER1 | ... ;\nFeeder The feeder creates the stream, so they don\u0026rsquo;t accept inputs. For this reason, they can be positioned ONLY to the beginning of a rule.\nThe feeder definition starts with a \u0026lt; char followed by an identifier. That\u0026rsquo;s the type of the feeder we want to use.\nAfter the type we found a : char followed by a list of parameters comma separated and a \u0026gt;.\nThe parameters are in the form of key/value where the value is between double quotes key=\u0026quot;value\u0026quot;.\rExample:\nIDENTIFIER =\u0026gt; \u0026lt;FEEDER_TYPE: param1=\u0026quot;value1\u0026quot;, param2=\u0026quot;value2\u0026quot;\u0026gt; | ... ;\nFilter The filters are the main operators of a rule, because they decide if a data is interesting and perform operations.\nThe definition of a filter start with his name and it is followed by parameters contained between ( and ).\nAccording to the settings a Filter can change his behaviour and can modify the data passing through it.\nExample:\nIDENTIFIER =\u0026gt; ... | FILTER_TYPE( param1=\u0026quot;value1\u0026quot;, ... ) | ... ;\nThe operator NOT ! can be used on filter to negate his result (propagate the data if the condition is not verified).\nIt has to be put before the filter definition: !FILTER_TYPE(...)\rAll the parameters have to be enclosed in quotes.\nJSON requires double quotes to encode strings, so in order to define a JSON string you need to escape the quotes \\\u0026quot;.\rData message and Extra The data stream in driplane is based on text and the basic object that is part of it is the Message.\nThe Message is an object that contains the text that needs to be filtered and extra.\nThe main string is identified as text in the filters, whereas the extra data are identified by a key.\nThere are fixed extra, created from driplane itself and other extras related to a feeder or filter.\nName Description source_feeder the name of the feeder creates this Message rule_name the name of the rule that contains this filter ","description":"","id":6,"section":"doc","tags":null,"title":"Syntax","uri":"https://matrix86.github.io/driplane/en/doc/rules/syntax/"},{"content":"Templates Many filters in driplane support Go templates in their parameters. Templates allow you to dynamically compose strings using the fields of the current Message (both the main field and any extra fields).\nTemplates are based on the standard Go text/template package and are extended with all the functions from the Sprig library, giving you access to over 100 useful functions for string manipulation, math, date formatting, encoding, and more.\nBasic syntax Inside a template, you can reference any field of the Message using the {{ .field_name }} syntax:\n{{ .main }} - the main text of the Message {{ .file_name }} - an extra field called file_name {{ .user_username }} - an extra field called user_username ... | format(template=\u0026quot;Author: {{ .author }} wrote: {{ .main }}\u0026quot;) | ...\rSprig functions All Sprig functions are available in templates. Functions can be called using the pipe | operator or the function call syntax.\nString functions Function Description Example Result upper Convert to uppercase {{ .main | upper }} HELLO lower Convert to lowercase {{ .main | lower }} hello trim Remove leading/trailing whitespace {{ .main | trim }} hello trimPrefix Remove prefix {{ .main | trimPrefix \u0026quot;http://\u0026quot; }} example.com trimSuffix Remove suffix {{ .main | trimSuffix \u0026quot;.txt\u0026quot; }} file replace Replace occurrences {{ .main | replace \u0026quot; \u0026quot; \u0026quot;_\u0026quot; }} hello_world contains Check if string contains substring {{ if contains \u0026quot;error\u0026quot; .main }}...{{ end }} hasPrefix Check prefix {{ if hasPrefix \u0026quot;http\u0026quot; .main }}...{{ end }} hasSuffix Check suffix {{ if hasSuffix \u0026quot;.pdf\u0026quot; .main }}...{{ end }} repeat Repeat a string N times {{ .main | repeat 3 }} hellohellohello substr Extract substring {{ substr 0 5 .main }} hello nospace Remove all whitespace {{ .main | nospace }} helloworld trunc Truncate to length {{ .main | trunc 5 }} hello abbrev Abbreviate with ellipsis {{ .main | abbrev 10 }} hello w... quote Wrap in double quotes {{ .main | quote }} \u0026quot;hello\u0026quot; squote Wrap in single quotes {{ .main | squote }} 'hello' title Convert to title case {{ .main | title }} Hello World snakecase Convert to snake_case {{ .main | snakecase }} hello_world camelcase Convert to camelCase {{ .main | camelcase }} HelloWorld kebabcase Convert to kebab-case {{ .main | kebabcase }} hello-world Encoding functions Function Description Example b64enc Base64 encode {{ .main | b64enc }} b64dec Base64 decode {{ .main | b64dec }} sha256sum SHA256 hash {{ .main | sha256sum }} sha1sum SHA1 hash {{ .main | sha1sum }} Default and conditional functions Function Description Example default Provide a default value {{ .name | default \u0026quot;unknown\u0026quot; }} empty Check if value is empty {{ if empty .main }}no content{{ end }} coalesce Return first non-empty value {{ coalesce .name .username \u0026quot;anonymous\u0026quot; }} ternary Ternary operator {{ ternary \u0026quot;yes\u0026quot; \u0026quot;no\u0026quot; (contains \u0026quot;ok\u0026quot; .main) }} List functions Function Description Example list Create a list {{ list \u0026quot;a\u0026quot; \u0026quot;b\u0026quot; \u0026quot;c\u0026quot; }} join Join list elements {{ list \u0026quot;a\u0026quot; \u0026quot;b\u0026quot; \u0026quot;c\u0026quot; | join \u0026quot;,\u0026quot; }} split Split string into map {{ (split \u0026quot;,\u0026quot; .main)._0 }} splitList Split string into list {{ .main | splitList \u0026quot;,\u0026quot; }} Math functions Function Description Example add Addition {{ add 1 2 }} sub Subtraction {{ sub 10 3 }} mul Multiplication {{ mul 2 5 }} div Division {{ div 10 2 }} max Maximum value {{ max 1 5 3 }} min Minimum value {{ min 1 5 3 }} Date functions Function Description Example now Current time {{ now }} date Format date {{ now | date \u0026quot;2006-01-02\u0026quot; }} dateModify Modify a date {{ now | dateModify \u0026quot;-24h\u0026quot; }} Chaining functions Functions can be chained using the pipe operator:\n{{ .main | lower | trim | replace \u0026quot; \u0026quot; \u0026quot;_\u0026quot; }} - lowercase, trim whitespace, replace spaces with underscores\n{{ .main | upper | trunc 50 }} - uppercase then truncate to 50 characters\n{{ .name | default \u0026quot;anonymous\u0026quot; | upper }} - use default if empty, then uppercase\nConditionals Go templates support conditional logic:\n{{ if contains \u0026quot;error\u0026quot; .main }}ALERT: {{ .main }}{{ else }}{{ .main }}{{ end }}\n{{ if and (not (empty .name)) (contains \u0026quot;@\u0026quot; .name) }}{{ .name }}{{ end }}\nFilters supporting templates The following filters accept Go templates (with Sprig functions) in one or more of their parameters:\nFilter Parameters supporting templates Format template, file Override name, value System cmd Http url, download_to, data values, rawData Mail body Slack to, text, filename, url Telegram to, to_chatid, filename, text LLM prompt, system_prompt Pdf filename XLS filename MIME type filename More information For the complete list of Sprig functions, visit the Sprig documentation.\nFor the full Go template syntax, see the Go text/template documentation.\n","description":"","id":7,"section":"doc","tags":null,"title":"Templates","uri":"https://matrix86.github.io/driplane/en/doc/rules/templates/"},{"content":"LLM This filter sends the received Message to a Large Language Model (LLM) and propagates the response. It uses any-llm-go to support multiple LLM providers through a unified interface.\nBoth the prompt and system_prompt parameters support templates, allowing you to dynamically compose prompts using the main field and any extra fields of the incoming Message.\nSupported Providers OpenAI, Anthropic, Ollama, DeepSeek, Groq, Mistral, Gemini, llama.cpp, Llamafile.\nParameters Parameter Type Default Description model STRING (required) The model name to use (e.g. \u0026quot;gpt-4\u0026quot;, \u0026quot;claude-3-opus-20240229\u0026quot;, \u0026quot;llama3\u0026quot;) prompt STRING (required) The user prompt sent to the LLM. Supports templates with Message fields system_prompt STRING empty An optional system prompt. Supports templates with Message fields provider STRING \u0026ldquo;openai\u0026rdquo; The LLM provider to use: openai, anthropic, ollama, deepseek, groq, mistral, gemini, llamacpp, llamafile api_key STRING empty API key for the provider (required for cloud providers like OpenAI, Anthropic, etc.) api_url STRING empty Custom base URL for the API endpoint (useful for proxies or self-hosted instances) target STRING \u0026ldquo;main\u0026rdquo; The field of the Message where the LLM response will be stored. Use \u0026quot;main\u0026quot; to replace the message content, or any other name to set an extra field temperature FLOAT 0.7 Sampling temperature for the model (higher values produce more random output) max_tokens INT 1024 Maximum number of tokens to generate in the response ... | llm(model=\u0026quot;gpt-4\u0026quot;, prompt=\u0026quot;Summarize: {{ .main }}\u0026quot;, api_key=\u0026quot;sk-...\u0026quot;, provider=\u0026quot;openai\u0026quot;) | ...\rOutput The LLM response text is placed in the field specified by target (default: main). The following extra fields are set on the output Message:\nExtra Field Description llm_model The model name returned by the provider llm_prompt_tokens Number of tokens in the prompt llm_completion_tokens Number of tokens in the completion llm_total_tokens Total tokens used (prompt + completion) llm_raw_response The full JSON response from the provider The Message is dropped if the LLM request fails or returns no response choices.\rExamples Using OpenAI to summarize text:\n... | llm(model=\u0026quot;gpt-4\u0026quot;, prompt=\u0026quot;Summarize the following text:\\n{{ .main }}\u0026quot;, system_prompt=\u0026quot;You are a helpful assistant.\u0026quot;, api_key=\u0026quot;sk-...\u0026quot;, provider=\u0026quot;openai\u0026quot;) | ...\rUsing a local Ollama instance:\n... | llm(model=\u0026quot;llama3\u0026quot;, prompt=\u0026quot;{{ .main }}\u0026quot;, provider=\u0026quot;ollama\u0026quot;, api_url=\u0026quot;http://localhost:11434\u0026quot;) | ...\rUsing templates with extra fields and a custom target:\n... | llm(model=\u0026quot;gpt-4\u0026quot;, prompt=\u0026quot;Translate '{{ .main }}' to {{ .language }}\u0026quot;, target=\u0026quot;translation\u0026quot;, api_key=\u0026quot;sk-...\u0026quot;, provider=\u0026quot;openai\u0026quot;) | ...\r","description":"","id":8,"section":"doc","tags":null,"title":"LLM","uri":"https://matrix86.github.io/driplane/en/doc/filters/llm/"},{"content":"WebRSS This feeder creates a stream by scraping a website and extracting articles using CSS selectors.\nIt is useful for websites that do not expose an RSS/Atom feed. It is based on Colly so you can refer to it for more info on how selectors work.\nParameters Parameter Type Default Description url STRING empty URL of the page to scrape item_selector STRING empty CSS selector matching each article/item block on the page title_selector STRING empty CSS selector for the article title (relative to the item block) link_selector STRING empty CSS selector for the article link (relative to the item block) desc_selector STRING empty CSS selector for the article description (relative to the item block) date_selector STRING empty CSS selector for the article date (relative to the item block) link_attr STRING \u0026ldquo;href\u0026rdquo; HTML attribute to read the URL from on the matched link element freq DURATION 60m how often the page should be scraped ... | \u0026lt;webrss: url=\u0026quot;https://website.io/blog\u0026quot;, item_selector=\u0026quot;a[href^='/blog/']\u0026quot;, title_selector=\u0026quot;h4, h3\u0026quot;, link_selector=\u0026quot;self\u0026quot;, desc_selector=\u0026quot;p\u0026quot;, freq=\u0026quot;1h\u0026quot;\u0026gt; | ...\rOutput Text The main field of the Message will contain the title of the article extracted via title_selector.\nExtra Name Description title title of the article extracted via title_selector link absolute URL of the article extracted via link_selector description description or excerpt of the article extracted via desc_selector published_at publication date of the article extracted via date_selector description and published_at will be empty if the respective selectors (desc_selector, date_selector) are not configured or the element is not found on the page.\rNotes Relative URLs are automatically resolved to absolute URLs based on the scraped page URL. Already seen links are tracked in memory and will not be propagated again within the same run. This prevents duplicate messages across polling cycles. The selectors for title_selector, link_selector, desc_selector and date_selector are evaluated relative to the element matched by item_selector. Examples Soon\u0026hellip; ","description":"","id":9,"section":"doc","tags":null,"title":"WebRSS","uri":"https://matrix86.github.io/driplane/en/doc/feeders/webrss/"},{"content":"Telegram This filter allows you to download files received from the Telegram feeder or send messages.\nNote: it can be used only in a rule with the Telegram Feeder.\nParameters The following parameters are required from this filter:\nParameter Type Default Description action STRING \u0026ldquo;send_message\u0026rdquo; action to perform: \u0026ldquo;send_message\u0026rdquo;, \u0026ldquo;download_file\u0026rdquo; to STRING \u0026quot;\u0026quot; used with action send_message, it has to contain the recipient of the message: username, @username, phone number with the country code (supports templates) to_chatid STRING empty the recipient of the message will be a chat filename STRING \u0026quot;\u0026quot; specified the path of where to store the downloaded file: msg_filename in the extra will contain the name of the file (supports templates) text STRING \u0026quot;\u0026quot; the text of the file (supports templates) Each action can use different parameters:\naction = send_message Parameter Type Default Description to STRING \u0026quot;\u0026quot; used with action send_message, it has to contain the recipient of the message: username, @username, phone number with the country code (supports templates) to_chatid STRING empty the recipient of the message will be a chat text STRING \u0026quot;\u0026quot; the text of the file (supports templates) action = download_file Parameter Type Default Description filename STRING \u0026quot;\u0026quot; specified the path of where to store the downloaded file: msg_filename in the extra will contain the name of the file (supports templates) ... | telegram(action=\u0026quot;send_message\u0026quot;, to=\u0026quot;@username\u0026quot;, text=\u0026quot;the file '{{ .msg_filename }}' received from {{ .user_username }} has been downloaded.\u0026quot;) | ...\rExamples telegramRule =\u0026gt; \u0026lt;telegram: app_id=\u0026quot;xxx\u0026quot;, app_hash=\u0026quot;yyyy\u0026quot;, phone_number=\u0026quot;+1123654789\u0026quot;, session_folder=\u0026quot;/tmp/sessions\u0026quot;\u0026gt; | text(target=\u0026quot;chan_id\u0026quot;, pattern=\u0026quot;123456\u0026quot;) | telegram(action=\u0026quot;download_file\u0026quot;, filename=\u0026quot;/tmp/{{ .msg_filename }}\u0026quot;) | telegram(action=\u0026quot;send_message\u0026quot;, to=\u0026quot;@username\u0026quot;, text=\u0026quot;the file '{{ .msg_filename }}' received from {{ .user_username }} has been downloaded.\u0026quot;)\rtelegramRule =\u0026gt; \u0026lt;telegram: app_id=\u0026quot;xxx\u0026quot;, app_hash=\u0026quot;yyyy\u0026quot;, phone_number=\u0026quot;+1123654789\u0026quot;, session_folder=\u0026quot;/tmp/sessions\u0026quot;\u0026gt; | text(target=\u0026quot;main\u0026quot;, pattern=\u0026quot;help\u0026quot;) | telegram(action=\u0026quot;send_message\u0026quot;, to=\u0026quot;{{ .user_username }}\u0026quot;, text=\u0026quot;Hi {{ .user_username }}! You wrote the following message: {{ .main }}.\u0026quot;)\r","description":"","id":10,"section":"doc","tags":null,"title":"Telegram","uri":"https://matrix86.github.io/driplane/en/doc/filters/telegram/"},{"content":"Telegram This feeder creates a stream using the Telegram API.\nIn order to use this feeder, you need to create a Telegram Application and get app_id and app_hash.\nIf you set the session folder the session will be stored and only the first run it will ask for the code received from the phone number specified in the config.\nBased on gotd/td\nParameters Parameter Type Default Description app_id STRING empty app ID (see this) app_hash STRING empty App hash (see this) phone_number STRING empty Phone number of the account to use (it should contain the country code) session_folder STRING empty Path of the folder where storing the sessions *events = \u0026ldquo;channel_message\u0026rdquo;,\u0026ldquo;chat_message\u0026rdquo;\n... | \u0026lt;telegram: app_id=\u0026quot;xxx\u0026quot;, app_hash=\u0026quot;yyyy\u0026quot;, phone_number=\u0026quot;+1123654789\u0026quot;, session_folder=\u0026quot;/tmp/sessions\u0026quot;\u0026gt; | ...\rOutput The messages propagated by this feeder could contain different info and they depend from the type of the event received.\nEvery propagated Message will have a type extra field with the name of the events (see the above list).\nEvent chat_message We received a message from a group or a user.\nThe main field of the Message contains the text of the message.\nName Description type it contains chat_message for this event msg_edited \u0026ldquo;true\u0026rdquo; if it is an edit event of a message text text of the message msg_hasmedia \u0026ldquo;true\u0026rdquo; if the message contains a media (photo or doc) msg_medianame name of the file sent msg_mediaext extension of the file sent msg_mediasize size of the file sent msg_timestamp timestamp of the message msg_date only the date of when the message has been received msg_time only the time of when the message has been received msg_id ID of the message chat_callactive \u0026ldquo;true\u0026rdquo; if there is a call active chat_creator \u0026ldquo;true\u0026rdquo; if the user is the creator chat_deactivated \u0026ldquo;true\u0026rdquo; if the chat has been deactivated chat_id ID of the chat chat_partecipantscount number of partecipants chat_title title of the chat chat_version version of the chat user_bot \u0026ldquo;true\u0026rdquo; if the user is a bot user_isclosefriend \u0026ldquo;true\u0026rdquo; if the user is a close friend user_iscontact \u0026ldquo;true\u0026rdquo; if the user is a contact user_isdeleted \u0026ldquo;true\u0026rdquo; if the user has been deleted user_isfake \u0026ldquo;true\u0026rdquo; if the user has been flagged as fake/spam user_id ID of the user user_accesshash access hash of the user user_mutualcontact \u0026ldquo;true\u0026rdquo; if we are a contact of the user and viceversa user_premium \u0026ldquo;true\u0026rdquo; if the user has a premium account user_verified \u0026ldquo;true\u0026rdquo; if the user is verified user_firstname name of the user user_lastname lastname of the user user_username username of the user user_language language of the user user_phone phone number of the user Event channel_message We received a message from a group or a user.\nThe main field of the Message contain the text of the message.\nName Description type it contains channel_message for this event msg_edited \u0026ldquo;true\u0026rdquo; if it is an edit event of a message text text of the message msg_hasmedia \u0026ldquo;true\u0026rdquo; if the message contains a media (photo or doc) msg_medianame name of the file sent msg_mediaext extension of the file sent msg_mediasize size of the file sent msg_timestamp timestamp of the message msg_date only the date of when the message has been received msg_time only the time of when the message has been received msg_id ID of the message chan_broadcast \u0026ldquo;true\u0026rdquo; if it is a broadcast channel chan_callactive \u0026ldquo;true\u0026rdquo; if there is a call active chan_creator \u0026ldquo;true\u0026rdquo; if the user is the creator chan_fake \u0026ldquo;true\u0026rdquo; if the channel has been flagged as fake chan_forum \u0026ldquo;true\u0026rdquo; if the channel is a forum chan_gigagroup \u0026ldquo;true\u0026rdquo; if the channel is a gigagroup chan_hasgeo \u0026ldquo;true\u0026rdquo; if the channel has geoposition chan_haslink \u0026ldquo;true\u0026rdquo; if the channel has a link chan_id ID of the channel chan_hasJoinRequest \u0026ldquo;true\u0026rdquo; if the users has to be approved by admins chan_ismegagroup \u0026ldquo;true\u0026rdquo; if the channel is a megagroup chan_isrestricted \u0026ldquo;true\u0026rdquo; if the channel is restricted chan_title title of the channel chan_verified \u0026ldquo;true\u0026rdquo; if the channel is verified chan_partecipantscount number of partecipants chan_username username of the channel user_bot \u0026ldquo;true\u0026rdquo; if the user is a bot user_isclosefriend \u0026ldquo;true\u0026rdquo; if the user is a close friend user_iscontact \u0026ldquo;true\u0026rdquo; if the user is a contact user_isdeleted \u0026ldquo;true\u0026rdquo; if the user has been deleted user_isfake \u0026ldquo;true\u0026rdquo; if the user has been flagged as fake/spam user_id ID of the user user_accesshash access hash of the user user_mutualcontact \u0026ldquo;true\u0026rdquo; if we are a contact of the user and viceversa user_premium \u0026ldquo;true\u0026rdquo; if the user has a premium account user_verified \u0026ldquo;true\u0026rdquo; if the user is verified user_firstname name of the user user_lastname lastname of the user user_username username of the user user_language language of the user user_phone phone number of the user Examples telegramRule =\u0026gt; \u0026lt;telegram: app_id=\u0026quot;xxx\u0026quot;, app_hash=\u0026quot;yyyy\u0026quot;, phone_number=\u0026quot;+1123654789\u0026quot;, session_folder=\u0026quot;/tmp/sessions\u0026quot;\u0026gt; | text(target=\u0026quot;chan_id\u0026quot;, pattern=\u0026quot;123456\u0026quot;) | telegram(action=\u0026quot;download_file\u0026quot;, filename=\u0026quot;/tmp/{{ .msg_filename }}\u0026quot;) | telegram(action=\u0026quot;send_message\u0026quot;, to=\u0026quot;@username\u0026quot;, text=\u0026quot;the file '{{ .msg_filename }}' received from {{ .user_username }} has been downloaded.\u0026quot;)\r","description":"","id":11,"section":"doc","tags":null,"title":"Telegram","uri":"https://matrix86.github.io/driplane/en/doc/feeders/telegram/"},{"content":"Imap This feeder creates a stream starting from emails received on the account read by an IMAP client. It is possible to define how often the email account should be checked.\nEvery time the email inbox is parsed a Message is sent down the lane.\nParameters Parameter Type Default Description host STRING empty Host of the IMAP server port STRING empty Port of the IMAP server username STRING empty Username of the account password STRING empty Password of the account mailbox STRING \u0026ldquo;INBOX\u0026rdquo; Name of the mailbox to read freq DURATION \u0026ldquo;1m\u0026rdquo; how often the email account should be checked start_from_beginning BOOL \u0026ldquo;true\u0026rdquo; if \u0026ldquo;true\u0026rdquo; it reads all the emails in the mailbox from the beginning get_attachments BOOL \u0026ldquo;false\u0026rdquo; if \u0026ldquo;true\u0026rdquo; it reads also the attachments ... | \u0026lt;imap: host=\u0026quot;imap.gmail.com\u0026quot;, port=\u0026quot;993\u0026quot;, username=\u0026quot;test@gmail.com\u0026quot;, password=\u0026quot;xxxxx\u0026quot;, get_attachments=\u0026quot;true\u0026quot;, freq=\u0026quot;30m\u0026quot;\u0026gt; ...\rOutput Text The main field of the Message will contain the email\u0026rsquo;s subject.\nExtra Name Description from List of the senders in the form email@mail.com Name to List of the recipients in the form email@mail.com Name reply_to List of address in the \u0026ldquo;Reply-To\u0026rdquo; header in_reply_to Parent Message-id cc List of the CC Header Addresses in the form email@mail.com Name bcc List of the BCC Header Addresses in the form email@mail.com Name sender Message sender message_id Message-Id of the current email date Message Date subject Subject of the email is_attachment It is \u0026ldquo;true\u0026rdquo; if has the following 2 fields attachment_filename Name of the attachment attachment_body Binary content of the attachment Not all the Extra field could be filled. If the relative tag is not present on the feed it will be empty.\rExamples Soon\u0026hellip; ","description":"","id":12,"section":"doc","tags":null,"title":"Imap","uri":"https://matrix86.github.io/driplane/en/doc/feeders/imap/"},{"content":"XLS This filter allows you to extract all the rows from a Excel file.\nBased on the qax-os/excelize library.\nParameters Parameter Type Default Description target STRING \u0026ldquo;main\u0026rdquo; the field of the Message that should be used for the filter (it could be the main or and extra field) filename STRING empty the filename of the XLS file to parse (supports templates) ... | xls(target=\u0026quot;{{ .extra_field }}\u0026quot;) | ...\rThe filename field override the target. They are mutually exclusive, so you can specify only one of them.\rOutput The filter produces one Message for each row of the XLS file.\nExamples Soon\u0026hellip; ","description":"","id":13,"section":"doc","tags":null,"title":"XLS","uri":"https://matrix86.github.io/driplane/en/doc/filters/xls/"},{"content":"RateLimit This filter allows you to set a rate limit on the messages that can go through it. So for example if we don\u0026rsquo;t want to limit the number of messages in a pipe to 5 messages per second we just to set the parameter rate to 5.\nParameters Parameter Type Default Description rate STRING \u0026ldquo;0\u0026rdquo; how many event per second you want to have as rate limiter ... | ratelimit(rate=\u0026quot;5\u0026quot;) | ...\rOutput The filter will slow down the rate of the messages as specified on the parameter rate.\nExamples Soon\u0026hellip; ","description":"","id":14,"section":"doc","tags":null,"title":"RateLimit","uri":"https://matrix86.github.io/driplane/en/doc/filters/ratelimit/"},{"content":"Json This filter is used to extract information from a JSON doc received through the Message.\nIt is possible to use XPath query for JSON specifying a selector to search in the doc and extract data (it uses jsonquery).\nParameters Parameter Type Default Description target STRING \u0026ldquo;main\u0026rdquo; the field of the Message that should be used for the filter (it could be main or an extra field) selector STRING \u0026quot;\u0026quot; the selector to find the data in the JSON ... | json(selector=\u0026quot;id\u0026quot;, target=\u0026quot;doc\u0026quot;) | ...\rOutput The filter will generate one or more Messages. It is possible to use more than 1 time this filter.\nThe field fulltext will contain the original target string.\nExamples Soon\u0026hellip; ","description":"","id":15,"section":"doc","tags":null,"title":"Json","uri":"https://matrix86.github.io/driplane/en/doc/filters/json/"},{"content":"Html This filter is used to extract information from an HTML page received through the Message.\nLike jQuery for JS, we can set a selector to find in the page, extract text from the tags and the html content (we are using goquery library under the hood).\nParameters Parameter Type Default Description target STRING \u0026ldquo;main\u0026rdquo; the field of the Message that should be used for the filter (it could be main or an extra field) selector STRING \u0026quot;\u0026quot; the selector to find in the HTML page get STRING \u0026ldquo;html\u0026rdquo; what do we want to retrieve on the tags found in the selected one: html, text, attr attr STRING \u0026quot;\u0026quot; if get is attr you can define what attr name it should extract ... | html(selector=\u0026quot;.link\u0026quot;, get=\u0026quot;attr\u0026quot;, attr=\u0026quot;href\u0026quot;) | ...\rOutput The filter will generate one or more Messages. It is possible to use more than 1 time this filter.\nThe field fulltext will contain the original target string.\nExamples Soon\u0026hellip; ","description":"","id":16,"section":"doc","tags":null,"title":"Html","uri":"https://matrix86.github.io/driplane/en/doc/filters/html/"},{"content":"Apt feeder This feeder can create the stream starting from an apt repository. It supports also flat repositories.\nIt is possible to specify the frequency of the quering and receive a message every time a new package is published.\nParameters Parameter Type Default Description url STRING empty URL of the apt repo freq DURATION 60s how often the feed should be parsed suite STRING \u0026ldquo;stable\u0026rdquo; suite of the repo to keep under control arch STRING empty\u0026quot; architecture of the repo, if empty the first arch returned by the Release file will be used index STRING empty URL of the Packages file (it overrides the url parameter) insecure BOOL false allow repository with insecure certificates ... | \u0026lt;apt: url=\u0026quot;http://apt.modmyi.com/dists/stable/Release\u0026quot;, insecure=\u0026quot;true\u0026quot;, freq=\u0026quot;3h\u0026quot;\u0026gt; | ...\rOutput Text The main field of the Message will contain the filename of the package and all the other field will be present in extra fields.\nExtra List of the supported field that will be returned as extra field.\nName Filename Size MD5sum SHA1 SHA256 DescriptionMD5 Depends InstalledSize Package Architecture Version Section Maintainer Homepage Description Tag Author Name Examples Soon\u0026hellip; ","description":"","id":17,"section":"doc","tags":null,"title":"Apt","uri":"https://matrix86.github.io/driplane/en/doc/feeders/apt/"},{"content":"ElasticSearch This filter writes on ElasticSearch all the message it receives as input and return as output the document ID.\nYou can also specify what message\u0026rsquo;s field it should use as input.\nParameters Parameter Type Default Description target STRING \u0026ldquo;main\u0026rdquo; the field of the Message that should be used for filter\u0026rsquo;s output (it could be main or an extra field) ... | elasticsearch(target=\u0026quot;input_field\u0026quot;) | ...\rOutput The main field will contain the docID returned by ElasticSearch.\nExamples Soon\u0026hellip; ","description":"","id":18,"section":"doc","tags":null,"title":"Elasticsearch","uri":"https://matrix86.github.io/driplane/en/doc/filters/elasticsearch/"},{"content":"File This filter get as input the path of a local file, read it and return the content back to the pipeline.\nParameters Parameter Type Default Description target STRING \u0026ldquo;main\u0026rdquo; the field of the Message that should be used for filter\u0026rsquo;s output (it could be main or an extra field) ... | file(target=\u0026quot;file_content\u0026quot;) | ...\rOutput The output will contain the content of the read file. Using the target parameter you can specify the output field\u0026rsquo;s name.\nExamples Soon\u0026hellip; ","description":"","id":19,"section":"doc","tags":null,"title":"File","uri":"https://matrix86.github.io/driplane/en/doc/filters/file/"},{"content":"StripTag This filter is used to remove all the HTML tags from a string.\nParameters Parameter Type Default Description target STRING \u0026ldquo;main\u0026rdquo; the field of the Message that should be used for the filter (it could be main or an extra field) ... | striptag(target=\u0026quot;main\u0026quot;) | ...\rOutput The main of the output Message will have the text extracted from the target config, stripped by all the HTML tags.\nA new extra field is created: fulltext will contain the original target string.\nExamples Soon\u0026hellip; ","description":"","id":20,"section":"doc","tags":null,"title":"Striptag","uri":"https://matrix86.github.io/driplane/en/doc/filters/striptag/"},{"content":"Timer feeder This feeder trigger a pipeline every time the timer is fired.\nParameters Parameter Type Default Description freq DURATION 60s The intervals (in duration) on how often to execute the pipeline \u0026lt;timer: freq=\u0026quot;30s\u0026quot;\u0026gt; | ...\rOutput Text The main field of the Message will contain time in rfc3339 format.\nExtra Name Description rfc3339 time in rfc3339 format timestamp time in Unix timestamp Examples Soon\u0026hellip; ","description":"","id":21,"section":"doc","tags":null,"title":"Timer","uri":"https://matrix86.github.io/driplane/en/doc/feeders/timer/"},{"content":"Folder feeder This feeder can create the stream of fsnotify events for a given folder or for cloud platform storage like Amazon S3,\nGoogle Drive and Dropbox.\nThe feeder use cloudwatcher to keep track of changes on the chosen directory.\nParameters Parameter Type Default Description name STRING empty the path of the folder that it has to keep track type STRING \u0026ldquo;local\u0026rdquo; the type of service to use local, dropbox, gdrive, s3 or git freq DURATION 2s how often the directory should be checked for updates Some services like Gdrive, S3 and Dropbox require additional configurations (you can check them from here).\nYou can pass them using the config file (more here) OR\ndefine them in the rule itself: \u0026lt;folder: name=\u0026quot;/\u0026quot;, type=\u0026quot;gdrive\u0026quot;, client_id=\u0026quot;xxx\u0026quot;, client_secret=\u0026quot;yyy\u0026quot;, token=\u0026quot;zzz\u0026quot;\u0026gt; \u0026lt;folder: name=\u0026quot;/tmp\u0026quot;, type=\u0026quot;local\u0026quot;\u0026gt; | ...\rOutput Text The main field of the Message will contain the filename while the op extra the type of event.\nExtra Name Description op type of event: FileCreated, FileChanged, FileDeleted, TagsChanged size for some events you can find the size of the file that triggered the event Examples Soon\u0026hellip; ","description":"","id":22,"section":"doc","tags":null,"title":"Folder","uri":"https://matrix86.github.io/driplane/en/doc/feeders/folder/"},{"content":"Slack This filter allows you to send files, messages and download files from Slack.\nIt can be used alone or with the Slack Feeder to create a simple Slack bot for events API.\nParameters The following parameters are required from this filter:\nParameter Type Default Description action STRING \u0026ldquo;send_message\u0026rdquo; action to perform: \u0026ldquo;send_message\u0026rdquo;, \u0026ldquo;send_file\u0026rdquo;, \u0026ldquo;download_file\u0026rdquo;, \u0026ldquo;user_info\u0026rdquo; token STRING \u0026quot;\u0026quot; Slack bot Token Each action can use different parameters:\naction = send_message Parameter Type Default Description to STRING \u0026quot;\u0026quot; channel ID or User ID that should receive the message (supports templates) target STRING \u0026ldquo;main\u0026rdquo; if text is not used you can choose which field of Message to use as text text STRING \u0026quot;\u0026quot; you can define the text of the message to send (supports templates) blocks BOOL false if true you can use the Slack template blocks (block builder) action = send_file Parameter Type Default Description to STRING \u0026quot;\u0026quot; channel ID or User ID that should receive the message (supports templates) target STRING \u0026ldquo;main\u0026rdquo; if filename is not specified you can choose which field of Message has to be used as file content to send filename STRING \u0026quot;\u0026quot; path of the file to send (supports templates) action = download_file Parameter Type Default Description url STRING \u0026quot;\u0026quot; it should contain the Slack private url for the file download (supports templates) target STRING \u0026ldquo;urlprivate\u0026rdquo; if url is not specified you can choose which field of Message contains the Slack private url filename STRING \u0026quot;\u0026quot; path of where to save the downloaded file. If not specified the file content will be inserted in the main field (supports templates) action = user_info Parameter Type Default Description target STRING \u0026ldquo;user\u0026rdquo; this field has to contain the USERID In the output Message you can find all the user information returned by Slack:\nuser_id user_teamid user_name user_deleted user_color user_realname user_tz user_tzlabel user_tzoffset user_profile user_isbot user_isadmin user_isowner user_isprimaryowner user_isrestricted user_isultrarestricted user_isstranger user_isappuser user_isinviteduser user_has2fa user_hasfiles user_presence user_locale user_updated user_enterprise ... | slack(action=\u0026quot;user_info\u0026quot;, target=\u0026quot;user\u0026quot;) | slack(action=\u0026quot;send_message\u0026quot;, to=\u0026quot;{{.channel}}\u0026quot;, text=\u0026quot;Hi {{.user_realname}}\u0026quot;) | ...\n... | random(output=\u0026quot;random_num\u0026quot;, min=\u0026quot;9\u0026quot;, max=\u0026quot;90\u0026quot;) | slack(action=\u0026quot;download_file\u0026quot;, filename=\u0026quot;/tmp/store_{{ .random_num }}.data\u0026quot;) | ...\rExamples Soon\u0026hellip; ","description":"","id":23,"section":"doc","tags":null,"title":"Slack","uri":"https://matrix86.github.io/driplane/en/doc/filters/slack/"},{"content":"Slack This feeder creates a stream using the Slack Events API.\nIn order to use this feeder, you need to create a Slack App, define its Bot Token scopes and finally enable the Event Subscriptions.\nThe feeder will start a webserver to receive the events, so it should be reachable by slack. If you are behind a NAT or Firewall, you can enable localtunnel.\nBased on slack-go/slack\nParameters Parameter Type Default Description bot_token STRING empty token Bot (starting with xoxb-*) app_token STRING empty App token (starting with xapp-*) verification_token STRING empty token to verify the requests (you can find it in the Basic information section) addr STRING \u0026ldquo;:3000\u0026rdquo; address and port in the form IP:PORT socket_mode BOOL false enable the Socket Mode lt_enable BOOL false enable localtunnel for the server lt_baseurl STRING \u0026ldquo;https://localtunnel.me\u0026rdquo; URL to the Proxy server lt_subdomain STRING empty specify a subdomain to use with localtunnel events STRING *events comma separated event list to handle ignore_bot BOOL true if true the bot will ignore mentions and messages created by another bot *events = \u0026ldquo;app_mention\u0026rdquo;,\u0026ldquo;app_home_opened\u0026rdquo;,\u0026ldquo;app_uninstalled\u0026rdquo;,\u0026ldquo;grid_migration_finished\u0026rdquo;,\u0026ldquo;grid_migration_started\u0026rdquo;,\u0026ldquo;link_shared\u0026rdquo;,\u0026ldquo;message\u0026rdquo;,\u0026ldquo;member_joined_channel\u0026rdquo;,\u0026ldquo;member_left_channel\u0026rdquo;,\u0026ldquo;pin_added\u0026rdquo;,\u0026ldquo;pin_removed\u0026rdquo;,\u0026ldquo;reaction_added\u0026rdquo;,\u0026ldquo;reaction_removed\u0026rdquo;,\u0026ldquo;tokens_revoked\u0026rdquo;,\u0026ldquo;file_shared\u0026rdquo;\n... | \u0026lt;slack: token=\u0026quot;xoxb-xxx\u0026quot;, verification_token=\u0026quot;xxxx\u0026quot;, lt_enable=\u0026quot;true\u0026quot;, lt_subdomain=\u0026quot;domaintesttt\u0026quot;\u0026gt; | ...\rOutput The messages propagated by this feeder could contain different info and they depend from the type of the event it received.\nEvery propagated Message will have a type extra field with the name of the events (see the above list).\nEvent app_mention The bot has been mentioned by someone.\nThe main field of the Message contain the text of the event.\nName Description type it contain app_mention for this event user user who triggered the events text text of the message timestamp timestamp threadtimestamp timestamp of the thread channel channel name eventtimestamp timestamp of the event userteam filled when a message comes from a channel that is shared between workspaces sourceteam filled when a message comes from a channel that is shared between workspaces botid filled out when a bot triggers the app_mention event Event app_home_opened User clicked into your App Home.\nThe main field of the Message contains the type name of the event.\nName Description type it contain app_home_opened for this event user user who triggered the events channel channel name eventtimestamp timestamp of the event tab filled when a message comes from a channel that is shared between workspaces Event app_uninstalled Your Slack app was uninstalled.\nThe main field of the Message contains the type name of the event.\nName Description type it contain app_uninstalled for this event Event grid_migration_finished An enterprise grid migration has finished on this workspace.\nThe main field of the Message contains the type name of the event.\nName Description type it contain grid_migration_finished for this event enterpriseid enterprise id Event grid_migration_started An enterprise grid migration has started on this workspace.\nThe main field of the Message contains the type name of the event.\nName Description type it contain grid_migration_started for this event enterpriseid enterprise id Event link_shared A message was posted containing one or more links relevant to your application.\nThe main field of the Message contains the shared URL.\nName Description type it contain link_shared for this event timestamp timestamp of the message threadtimestamp timestamp of the thread domain domain of the shared link link shared link Event file_shared A message was posted containing one or more links relevant to your application.\nThe main field of the Message contains the text of the message used to share the file.\nName Description id id of the file upload created timestamp timestamp of the event name name of the file mimetype mimetype of the file filetype extension of the file prettytype user user who triggered the event size size of the file urlprivatedownload url to download the file imageexifrotation originalw width of the file if it is an image originalh height of the file if it is an imange permalink permalinkpublic Event message A message was posted as direct message or in a channel/group.\nThe main field of the Message contains the text of the message.\nName Description type it contain message for this event timestamp timestamp of the message threadtimestamp timestamp of the thread botid filled if the message has been sent by a bot channel channel id channeltype type of the channel (im, group, mpim, channel) clientmsgid id of the message subtype sub type of the message text text of the message user user who sent the message username filled if it is a bot_message userteam filled when the message comes from a channel that is shared between workspaces sourceteam filled when the message comes from a channel that is shared between workspaces Event member_joined_channel An user just joined in a channel or it has been invited.\nThe main field of the Message contains the type of the message.\nName Description type it contain member_joined_channel for this event user user who has been invited channel channel id channeltype type of the channel (im, group, mpim, channel) inviter user who invited team filled when the message comes from a channel that is shared between workspaces Event member_left_channel An user just left the channel.\nThe main field of the Message contains the type of the message.\nName Description type it contain member_left_channel for this event user user who has been invited channel channel id channeltype type of the channel (im, group, mpim, channel) team filled when the message comes from a channel that is shared between workspaces Event pin_added / pin_removed A pin has been added or removed.\nThe main field of the Message contains the type of the message.\nName Description type it contain pin_added or pin_removed for this event user user who triggered the event channel channel id eventtimestamp type of the channel (im, group, mpim, channel) haspins item it contains the object slackevents.Item that can be used from the slack filter Event reaction_added/reaction_removed A member has added an emoji reaction to an item.\nThe main field of the Message contains the type of the message.\nName Description type it contain reaction_added or reaction_removed for this event user user who triggered the event itemuser eventtimestamp timestamp of the event item it contains the object slackevents.Item that can be used from the slack filter Examples Soon\u0026hellip; ","description":"","id":24,"section":"doc","tags":null,"title":"Slack","uri":"https://matrix86.github.io/driplane/en/doc/feeders/slack/"},{"content":"Cache This filter introduces a simple cache mechanism in the rule. It is a TTL based cache and it can have a local visibility (cache is only visible to the current filter) or a global visibility (cache shared across ALL the rules).\nIf the target of the Message as input has been cached before, and his TTL is not expired, it will be dropped and not propagated to the next filter.\nOtherwise if the target of the Message is new to the cache, it is inserted in it and propagated to the next filter.\nParameters Parameter Type Default Description target STRING \u0026ldquo;main\u0026rdquo; the field of the Message that should be used for the filter (it could be main or and extra field) refresh_on_get BOOL \u0026ldquo;true\u0026rdquo; the TTL is refreshed if the key has been looked up ttl DURATION 24h how long after the key will be deleted sync_time DURATION 5m how often the sync on file should be called name STRING \u0026quot;\u0026quot; named global cache: this cache will be available for ALL the rules also for different files global BOOL \u0026ldquo;false\u0026rdquo; make this cache global: like for the name param this cache is available to all the rules with the name \u0026ldquo;global\u0026rdquo; file STRING \u0026quot;\u0026quot; enable cache persistence. It loads and writes the cache from a file ignore_first_run BOOL \u0026ldquo;false\u0026rdquo; if true the messages that arrives to the cache with the firstRun flag enabled will be send to the next filter ... | cache(ttl=\u0026quot;24h\u0026quot;, global=\u0026quot;true\u0026quot;) | ...\rOutput The output is not being changed. This filter can only stop or not the propagation of the Message.\nExamples Soon\u0026hellip; ","description":"","id":25,"section":"doc","tags":null,"title":"Cache","uri":"https://matrix86.github.io/driplane/en/doc/filters/cache/"},{"content":"Changed This filter is similar to the cache. It can only stop the propagation of the Message across the lane, but only if the target of the received Message is different from the previous one.\nParameters Parameter Type Default Description target STRING \u0026ldquo;main\u0026rdquo; the field of the Message that should be used for the filter (it could be main or and extra field) ... | changed(target=\u0026quot;original_author\u0026quot;) | ...\rOutput The output is not being changed. This filter can only stop or not the propagation of the Message.\nExamples Soon\u0026hellip; ","description":"","id":26,"section":"doc","tags":null,"title":"Changed","uri":"https://matrix86.github.io/driplane/en/doc/filters/changed/"},{"content":"Echo This filter prints the Message on the logs. It is mostly used to debug the rules.\nParameters Parameter Type Default Description extra BOOL \u0026ldquo;false\u0026rdquo; print also all the extra fields ... | echo(extra=\u0026quot;false\u0026quot;) | ...\rOutput The output is not being changed. This filter prints the received Message and send it to the next filter in the rule.\nExamples Soon\u0026hellip; ","description":"","id":27,"section":"doc","tags":null,"title":"Echo","uri":"https://matrix86.github.io/driplane/en/doc/filters/echo/"},{"content":"File feeder This feeder can create the stream starting from a file. Like the tail -f command it opens the specified file and propagates a data message if a line is being added to the file.\nParameters Parameter Type Default Description filename STRING empty the path of the file that it has to keep track toend BOOL \u0026ldquo;false\u0026rdquo; the feeder will start to create data messages only for new added lines ... | \u0026lt;file: filename=\u0026quot;path/of/the/file.txt\u0026quot;, toend=\u0026quot;false\u0026quot;\u0026gt; | ...\rOutput Text The main field of the Message will contain the new read line.\nExtra Name Description file_name the name of the read file Examples Soon\u0026hellip; ","description":"","id":28,"section":"doc","tags":null,"title":"File","uri":"https://matrix86.github.io/driplane/en/doc/feeders/file/"},{"content":"Format This filter is used to format the received Message. It is based on\nGo templates and it can load templates from the template_path\ndirectory specified in the configuration file. All Sprig functions are available.\nParameters Parameter Type Default Description type STRING \u0026ldquo;text\u0026rdquo; specify the type of template to use : \u0026quot;text\u0026quot; or \u0026quot;html\u0026quot; template STRING empty a template could be specified directly here, instead of load it from file (supports templates) file STRING empty load the template from file (supports templates) target STRING \u0026ldquo;main\u0026rdquo; the field of the Message that should be used for the filter (it could be main or an extra field) In the template is allowed to use all the fields of the received Message: main or extra.\n... | format(type=\u0026quot;html\u0026quot;, template=\u0026quot;main : {{.main}} extra : {{.file_name}}\u0026quot;) | ...\rOutput The new formatted text is sent to the next filter in the main field of the Message if the target parameter is not specified.\nThe extra fields do not undergo changes.\nExamples Soon\u0026hellip; ","description":"","id":29,"section":"doc","tags":null,"title":"Format","uri":"https://matrix86.github.io/driplane/en/doc/filters/format/"},{"content":"Hash This filter is used to search or extract hashes from a Message.\nSupported types of hashes are:\nMD5 SHA1 SHA256 SHA512 Parameters Parameter Type Default Description target STRING \u0026ldquo;main\u0026rdquo; the field of the Message that should be used for the filter (it could be main or an extra field) extract BOOL \u0026ldquo;false\u0026rdquo; if \u0026quot;true\u0026quot; the main field of the output Message will be the extracted hash md5 BOOL \u0026ldquo;true\u0026rdquo; if \u0026quot;false\u0026quot; md5 hashes will be ignored sha1 BOOL \u0026ldquo;true\u0026rdquo; if \u0026quot;false\u0026quot; sha1 hashes will be ignored sha256 BOOL \u0026ldquo;true\u0026rdquo; if \u0026quot;false\u0026quot; sha256 hashes will be ignored sha512 BOOL \u0026ldquo;true\u0026rdquo; if \u0026quot;false\u0026quot; sha512 hashes will be ignored ... | hash(target=\u0026quot;description\u0026quot;, extract=\u0026quot;true\u0026quot;) | ...\rOutput If the extract parameter is \u0026ldquo;false\u0026rdquo;, the received Message will be propagated only if at least one hash is found in it.\nOtherwise, if extract is \u0026ldquo;true\u0026rdquo; and the Message contains one or more hashes, the main field of the propagated Message will contain only the extracted hash.\nIf the extract parameter is \u0026ldquo;true\u0026rdquo; and the message is propagated, a new extra field is created: fulltext will contain the original target string.\nIf the targeted field contains multiple hashes, the filter will create and propagate multiple messages, one for each hash.\rExamples Soon\u0026hellip; ","description":"","id":30,"section":"doc","tags":null,"title":"Hash","uri":"https://matrix86.github.io/driplane/en/doc/filters/hash/"},{"content":"HTTP This filter allows you to send HTTP requests. When a Message arrives to the filter, we can decide if use the main field of the Message as URL on the request, or its content for the HTTP data.\nThis behaviour can be handled with the parameters.\nParameters Parameter Type Default Description url STRING empty URL of the web page. It is possible use templates to use fields of the Message download_to STRING empty path of where to download the file. It is possible use templates to use fields of the Message text_only BOOL \u0026ldquo;false\u0026rdquo; if \u0026ldquo;true\u0026rdquo; it removes all the tags from the body response method STRING \u0026ldquo;GET\u0026rdquo; HTTP method to use on the request headers JSON empty Headers to use in the request data JSON empty POST fields to send with the request (it\u0026rsquo;s not possible to use in combination with rawData) rawData STRING empty raw body of the request (it\u0026rsquo;s not possible to use in combination with data) status STRING empty the filter will propagate the Message only if the returned status has the specified value cookies STRING empty Path of the JSON file containing the cookies to use ... | http(url=\u0026quot;{{ .main }}\u0026quot;, cookies=\u0026quot;exported.json\u0026quot;, headers=\u0026quot;{\\\u0026quot;Content-type\\\u0026quot;: \\\u0026quot;application/json\\\u0026quot;}\u0026quot;) | ...\rOutput If the request was successful, the output Message will have the main field set to the HTTP body response. If the status is set, and the response http status is different from it, the Message will be dropped.\nThe Message is dropped if the request is failed.\rExamples Soon\u0026hellip; ","description":"","id":31,"section":"doc","tags":null,"title":"Http","uri":"https://matrix86.github.io/driplane/en/doc/filters/http/"},{"content":"Mail This filter allows you to send an e-mail. When a Message arrives to the filter, we can decide if use the main field of the Message as URL on the request, or its content for the HTTP data.\nThis behaviour can be handled with the parameters.\nParameters Parameter Type Default Description body STRING empty the body of the e-mail (supports templates) username STRING empty username for the host authentication password STRING empty password for the host authentication host STRING empty host server used to send the e-mail port STRING empty port of the host server fromAddr STRING empty source e-mail address fromName STRING empty source name address to STRING empty destination e-mail address (supports multi-destination, comma separated) subject STRING empty subject field of the e-mail to send use_auth BOOL \u0026ldquo;false\u0026rdquo; if \u0026ldquo;true\u0026rdquo; the sendmail server will receive the credentials specified in username and password fields ... | http(url=\u0026quot;{{ .main }}\u0026quot;, cookies=\u0026quot;exported.json\u0026quot;, headers=\u0026quot;{\\\u0026quot;Content-type\\\u0026quot;: \\\u0026quot;application/json\\\u0026quot;}\u0026quot;) | ...\rEvery default\u0026rsquo;s value can be set in the configuration, creating a section with the name of theFilter/Feeder.\nmore info\rOutput The input Message is always propagated to the next filter without changes.\nExamples Soon\u0026hellip; ","description":"","id":32,"section":"doc","tags":null,"title":"Mail","uri":"https://matrix86.github.io/driplane/en/doc/filters/mail/"},{"content":"MIME type This filter allows you to detect the MIME type of a file and its extension.\nBased on the gabriel-vasile/mimetype library.\nParameters Parameter Type Default Description target STRING \u0026ldquo;main\u0026rdquo; the field of the Message that should be used for the filter (it could be the main or and extra field) filename STRING empty the filename of the file to detect (supports templates) ... | mime(target=\u0026quot;{{ .extra_field }}\u0026quot;) | ...\rThe filename field override the target. They are mutually exclusive, so you can specify only one of them.\rOutput The propagated Message will contain the mimetype\u0026rsquo;s string in the main field and the extension in the extra field mimetype_ext.\nExamples Soon\u0026hellip; ","description":"","id":33,"section":"doc","tags":null,"title":"MIME type","uri":"https://matrix86.github.io/driplane/en/doc/filters/mimetype/"},{"content":"Number This filter allows you to treat a string from the input Message as numeric value and apply some operator on it (for example, check if this field contains a number greater than X).\nParameters Parameter Type Default Description target STRING \u0026ldquo;main\u0026rdquo; the field of the Message that should be used for the filter (it could be main or and extra field) op STRING \u0026quot;\u0026quot; Compare operator to use for the numeric value (\u0026quot;\u0026gt;\u0026quot;, \u0026ldquo;\u0026gt;=\u0026rdquo;, \u0026ldquo;\u0026lt;\u0026rdquo;, \u0026ldquo;\u0026lt;=\u0026rdquo;, \u0026ldquo;!=\u0026rdquo;, \u0026ldquo;==\u0026rdquo;) value STRING \u0026quot;\u0026quot; It has to be a numeric value and it is the number to use for the comparison ... | number(target=\u0026quot;num_field\u0026quot;, op=\u0026quot;\u0026gt;=\u0026quot;, value=\u0026quot;44\u0026quot;) | ...\rOutput If the comparison is verified the received Message will be propagated.\nExamples Soon\u0026hellip; ","description":"","id":34,"section":"doc","tags":null,"title":"Number","uri":"https://matrix86.github.io/driplane/en/doc/filters/number/"},{"content":"Override This filter allows you to change a field of a Message, before sending it to the next filter. Templates with Sprig functions can be used.\nParameters Parameter Type Default Description name STRING empty name of the field to change (supports templates) value STRING empty new value to assign to the Message\u0026rsquo;s field specified (supports templates) ... | override(name=\u0026quot;description\u0026quot;, value=\u0026quot;{{ .title }}\u0026quot;) | ...\rOutput The propagated Message will be identical to the original, with only the specified field changed.\nExamples Soon\u0026hellip; ","description":"","id":35,"section":"doc","tags":null,"title":"Override","uri":"https://matrix86.github.io/driplane/en/doc/filters/override/"},{"content":"Pdf This filter allows you to extract plain text from a PDF file.\nBased on the ledongthuc/pdf library.\nParameters Parameter Type Default Description target STRING \u0026ldquo;main\u0026rdquo; the field of the Message that should be used for the filter (it could be the main or and extra field) filename STRING empty the filename of the PDF file to parse (supports templates) ... | pdf(target=\u0026quot;{{ .extra_field }}\u0026quot;) | ...\rThe filename field override the target. They are mutually exclusive, so you can specify only one of them.\rOutput The propagated Message contains the plain text of the input PDF file (fulltext will be set to the file name received as input).\nExamples Soon\u0026hellip; ","description":"","id":36,"section":"doc","tags":null,"title":"Pdf","uri":"https://matrix86.github.io/driplane/en/doc/filters/pdf/"},{"content":"Random This filter is used to inject an extra field with a random number in the propagated Message.\nParameters Parameter Type Default Description output STRING \u0026ldquo;main\u0026rdquo; the field of the propagated Message that will contain the random number min STRING \u0026ldquo;0\u0026rdquo; the min value of the extracted number is min max STRING \u0026ldquo;999999\u0026rdquo; the max value of the extracted number is max ... | random(output=\u0026quot;random_field\u0026quot;, min=\u0026quot;9\u0026quot;, max=\u0026quot;90\u0026quot;) | ...\rOutput The output Message will be equal to the input, but it will also include the new random field.\nExamples Soon\u0026hellip; ","description":"","id":37,"section":"doc","tags":null,"title":"Random","uri":"https://matrix86.github.io/driplane/en/doc/filters/random/"},{"content":"RSS This feeder creates a stream starting from a feed RSS, ATOM or JSON.\nIt is based on gofeed so you can refer to it for more info and supported formats.\nParameters Parameter Type Default Description url STRING empty URL of the feed freq DURATION 60s how often the feed should be parsed start_from_beginning BOOL \u0026ldquo;false\u0026rdquo; if \u0026ldquo;true\u0026rdquo; it starts to parse the feed from the beginning (the first time it will ignore the pubdate field of the feed) ignore_pubdate BOOL \u0026ldquo;false\u0026rdquo; if \u0026ldquo;true\u0026rdquo; it ignores the pubdate and it returns all the feed content every time ... | \u0026lt;rss: url=\u0026quot;https://example.rss\u0026quot;, freq=\u0026quot;5s\u0026quot;, start_from_beginning=\u0026quot;false\u0026quot;\u0026gt; | ...\rOutput Text The main field of the Message will contain the item.Title string of the gofeed.Item struct.\nExtra Name Description feed_title title of the feed (feed.Title) feed_feedlink feed url (feed.FeedLink) feed_updated time of the last update (feed.Updated) feed_published date of publication (feed.Published) feed_author author in the form name \u0026lt;e-mail\u0026gt; (feed.Author.Name) feed_language language of the feed (feed.Language) feed_copyright copyright (feed.Copyright) feed_generator generator used to create the feed (feed.Generator) In addition to the feed tags, the Extra will also contain the item\u0026rsquo;s fields. Since they could be different from feed to feed and it is possible to configure custom tag, you will find all them in the extra with their name.\nNot all the Extra field could be filled. If the relative tag is not present on the feed it will be empty.\rExamples Soon\u0026hellip; ","description":"","id":38,"section":"doc","tags":null,"title":"RSS","uri":"https://matrix86.github.io/driplane/en/doc/feeders/rss/"},{"content":"System This filter allows you to exec a command on the host machine. The received Message can be used to create the command to launch.\nIt supports templates with Sprig functions.\nParameters Parameter Type Default Description cmd STRING empty command line to exec for each received Message (supports templates) ... | system(cmd=\u0026quot;echo '{{ .author }} wrote {{ .main }}' \u0026gt;\u0026gt; logs.txt\u0026quot;) | ...\rOutput The propagated Message will contain the output of the command if it is provided, and it is not failed.\nExamples Soon\u0026hellip; ","description":"","id":39,"section":"doc","tags":null,"title":"System","uri":"https://matrix86.github.io/driplane/en/doc/filters/system/"},{"content":"Text This filter searches or extracts strings from the received Message. It can be used with a regular expression or a simple string.\nIf the string is found, the condition is matched and the Message is propagated to the next filter.\nParameters Parameter Type Default Description target STRING \u0026ldquo;main\u0026rdquo; the field of the Message that should be used for the filter (it could be main or and extra field) regexp BOOL false the pattern field is a regular expression extract BOOL \u0026ldquo;false\u0026rdquo; if \u0026ldquo;true\u0026rdquo; the main field of the propagated Message will contain the extracted string (it can be used only if regexp parameter is set true) pattern STRING empty specifies the pattern that should be matched on the Message to check the condition ... | text(target=\u0026quot;description\u0026quot;, pattern=\u0026quot;(#[^\\\\s]+)\u0026quot;, regexp=\u0026quot;true\u0026quot;, extract=\u0026quot;true\u0026quot;) | ...\rOutput If the extract parameter is \u0026ldquo;false\u0026rdquo;, the received Message will be propagated only if the specified pattern is matched in the target field of the Message.\nOtherwise if extract is \u0026ldquo;true\u0026rdquo; (only regexp can be used in this case), and one or more strings matches with the pattern, the main field of the propagated Message will contain only the matched string.\nIf the extract parameter is \u0026ldquo;true\u0026rdquo; and the message is propagated, a new extra field is created: fulltext will contain the original target string.\nIf the targeted field contains multiple matches, the filter will create and propagate multiple Messages, one for each matched string.\rExamples Soon\u0026hellip; ","description":"","id":40,"section":"doc","tags":null,"title":"Text","uri":"https://matrix86.github.io/driplane/en/doc/filters/text/"},{"content":"Twitter This feeder creates a stream from tweets. It is possible to define the keywords, or the users to follow.\nBased on go-twitter\nParameters Parameter Type Default Description bearerToken STRING empty Twitter Auth keywords STRING empty comma separated keywords that should match on the tweets users STRING empty comma separated users list rules STRING empty set multiple custom rules separated by the char languages STRING empty filter by language (comma separated languages) disable_retweet BOOL \u0026ldquo;false\u0026rdquo; don\u0026rsquo;t include retweets in the stream disable_quoted BOOL \u0026ldquo;false\u0026rdquo; don\u0026rsquo;t include quoted tweets in the stream ... | \u0026lt;twitter: users=\u0026quot;goofy, mickeymouse\u0026quot;,keywords=\u0026quot;movie, cartoon\u0026quot;, rules=\u0026quot;rule1:movie OR cartoon|rule2:mickey mouse OR pluto\u0026quot;\u0026gt; | ...\rOutput Text The main field of the Message will contain:\nthe text of the tweet if it is a normal tweet; the text of the retweeted message if it is a retweet; the text of the quote if it is a quote tweet; Extra Name Description link link to the tweet language language used for the tweet username author of the tweet author_id ID of the author of the tweet quoted \u0026ldquo;true\u0026rdquo; if the tweet is a quoted tweet, \u0026ldquo;false\u0026rdquo; otherwise retweet \u0026ldquo;true\u0026rdquo; if the tweet is a retweeted tweet, \u0026ldquo;false\u0026rdquo; otherwise response \u0026ldquo;true\u0026rdquo; if the tweet is a response for another tweet, \u0026ldquo;false\u0026rdquo; otherwise reply_for_user it contains the userID if the tweet is a reply for a user original_link link of the original tweet if it is a retweet or quoted tweet original_username username of the tweet linked to the current one original_name name of the author of the tweet linked to the current one original_text text of the tweet linked to the current one original_userid ID of the original author of the tweet if it is a retweet or a quote matched_rules list of the matched rules (tags) comma separated In some cases the extra field could be empty.\rExamples Soon\u0026hellip; ","description":"","id":41,"section":"doc","tags":null,"title":"Twitter","uri":"https://matrix86.github.io/driplane/en/doc/feeders/twitter/"},{"content":"Url This filter is used to search or extract URLs from a Message.\nCurrently supported types of URLs are:\nhttp/s ftp Parameters Parameter Type Default Description target STRING \u0026ldquo;main\u0026rdquo; the field of the Message that should be used for the filter (it could be main or an extra field) http BOOL \u0026ldquo;true\u0026rdquo; if \u0026ldquo;false\u0026rdquo;, http scheme urls are ignored https BOOL \u0026ldquo;true\u0026rdquo; if \u0026ldquo;false\u0026rdquo;, https scheme urls are ignored ftp BOOL \u0026ldquo;true\u0026rdquo; if \u0026ldquo;false\u0026rdquo;, ftp scheme urls are ignored extract BOOL \u0026ldquo;true\u0026rdquo; if \u0026ldquo;true\u0026rdquo;, the main field of the propagated Message will contain the found URL ... | url(extract=\u0026quot;true\u0026quot;) | ...\rOutput If the extract parameter is \u0026ldquo;false\u0026rdquo;, the received Message will be propagated only if at least one URL is found in it.\nOtherwise, if extract is \u0026ldquo;true\u0026rdquo; and the Message contains one or more URLs, the main field of the propagated Message will contain only the extracted URLs.\nIf the extract parameter is \u0026ldquo;true\u0026rdquo; and the message is propagated, a new extra field is created: fulltext will contain the original target string.\nIf the targeted field contains multiple URLs, the filter will create and propagate multiple messages, one for each URL.\rExamples Soon\u0026hellip; ","description":"","id":42,"section":"doc","tags":null,"title":"Url","uri":"https://matrix86.github.io/driplane/en/doc/filters/url/"},{"content":"Web This feeder creates a stream starting from a web page. It is possible to define how often the page should be downloaded and parsed.\nEvery time the page is parsed a Message is sent down the lane.\nParameters Parameter Type Default Description url STRING empty URL of the web page freq DURATION 60s how often the page should be parsed text_only BOOL \u0026ldquo;false\u0026rdquo; if \u0026ldquo;true\u0026rdquo; it removes all the tags from the page method STRING \u0026ldquo;GET\u0026rdquo; HTTP method to use on the requests headers JSON empty Headers to use in the request data JSON empty POST fields to send with the requests (it\u0026rsquo;s not possible to use in combination with rawData) rawData STRING empty raw body of the requests (it\u0026rsquo;s not possible to use in combination with data) status STRING empty the filter will propagate the Message only if the returned status is this cookies STRING empty Path of the JSON file containing the cookies to use ... | \u0026lt;web: url=\u0026quot;https://example.com\u0026quot;, freq=\u0026quot;30m\u0026quot;, status=\u0026quot;200\u0026quot;, cookies=\u0026quot;/path/to/exported.json\u0026quot;\u0026gt; | ...\rOutput Text The main field of the Message will contain the HTML source or the text of the website if the text_only parameter is set to true.\nExtra Name Description url URL of the web page title meta tag title description meta tag description image meta tag image sitename meta tag sitename Not all the Extra field could be filled. If the relative tag is not present on the feed it will be empty.\rExamples Soon\u0026hellip; ","description":"","id":43,"section":"doc","tags":null,"title":"Web","uri":"https://matrix86.github.io/driplane/en/doc/feeders/web/"}]