Message templates and delivery rules
Use these settings when an integration editor offers Message recipe, Delivery rules (JSON), or Custom fields (JSON). The preview shows the rendered result before you save.
Template variables
Insert a value with {{ variable }}. Use the editor's variable buttons when available.
| Variable | Value |
|---|---|
feedback.message | Written feedback, or empty for rating-only entries |
feedback.rating | Normalized rating: 0 to 5, or -1 for no rating |
feedback.rating_normalized | Alias of feedback.rating |
feedback.rating_label | Human-readable rating |
feedback.sentiment | positive, negative, or neutral |
feedback.email | Visitor email, if supplied |
feedback.url | Page URL |
feedback.created_at | Submission timestamp |
feedback.has_screenshot | Whether the entry includes a screenshot |
feedback.detail_url | Link to the feedback entry in PushFeedback |
project.name | Project display name |
project.url | Project website URL |
project.slug | Project ID |
For thumbs ratings, feedback.rating is 0 for negative and 5 for positive. Use feedback.rating_label when the destination needs readable text.
Example title:
Feedback on {{ project.name }}: {{ feedback.rating_label }}
Example body:
{{ feedback.message | default:"No written message" | truncate:1000 }}
Page: {{ feedback.url }}
View feedback: {{ feedback.detail_url }}
Only default and truncate filters are supported. default replaces an empty value. truncate limits text to the given length. Loops, conditionals, and other template syntax are not supported. Unknown variables or invalid syntax prevent saving.
Delivery rules
Use a JSON object to select which feedback the integration receives. {} allows all feedback that passes Enabled and Require a message.
This rule sends negative feedback that includes a message:
{
"all": [
{ "field": "feedback.sentiment", "operator": "eq", "value": "negative" },
{ "field": "feedback.message", "operator": "not_empty" }
]
}
Use all when every condition must match and any when one match is enough. Groups can be nested. Fields use the variable names above without {{ }}.
| Operator | Match |
|---|---|
eq | Equals value |
ne | Does not equal value |
lte | Less than or equal to value |
gte | Greater than or equal to value |
contains | Contains value |
starts_with | Starts with value |
not_empty | Has a value. Omit the value key. |
Use JSON values of the correct type, such as true for feedback.has_screenshot and a number for feedback.rating. Rules support at most 10 levels and 100 nodes.
Custom fields
Where supported, map field names to JSON values. String values can contain template variables:
{
"priority": "{{ feedback.sentiment }}",
"source_page": "{{ feedback.url }}"
}
This example fits a webhook's custom fields. Other destinations accept their own fields, such as labels, assignees, or board columns. Check the integration's controls and the API schemas before reusing a mapping for another provider.
Verify a recipe
Review the preview, save the integration, and submit feedback that matches the rules. Check the destination. If nothing arrives, use delivery troubleshooting.