Jira new comment notifications on your phone.

Get a push notification when someone comments on a Jira issue.

How it works

Three steps to your first push

STEP 01

Install the recipe

One click in Studio gives you a personal webhook URL.

STEP 02

Paste your URL into Jira

Add it as a webhook for Comment: created.

STEP 03

Get a push on your phone

With the text, sound and buttons from the recipe.

Setup

How to set up the Jira comment: created webhook

  1. Click Install in Studio and sign in. The recipe is added to your account and you get a personal webhook URL.
  2. In Jira, go to Settings > System > WebHooks and click Create a WebHook (Jira admins only).
  3. Paste your webhook URL as the URL. Optionally limit it with a JQL filter such as project = ABC.https://••••••••/•••••••• your personal URL, shown after install
  4. Tick Comment: created and save.
  5. Create an admin webhook under **Settings → System → WebHooks** and tick **Comment: created**. Use the JQL box (for example `project = SHOP`) to limit which issues push. Edited and deleted comments are ignored.
  6. Admin webhooks can have a **Secret**, which Jira uses to sign each delivery (`X-Hub-Signature: sha256=…`), but JustPush doesn't check that signature yet, so keep your endpoint URL private.
The code

What runs when the webhook arrives

Studio calls handleRequest(request) with the incoming webhook and sends the message it returns. It's yours after install; change anything.

transform.js
1// Jira → comment_created (new comment)
2// Fires when someone comments on an issue in the projects (or JQL filter) your webhook covers.
3// Docs: https://developer.atlassian.com/cloud/jira/platform/webhooks/
4
5// Keep long text readable in a notification.
6function clip(value, max = 120) {
7 const text = typeof value === "string" ? value.replace(/\s+/g, " ").trim() : ""
8 return text.length > max ? text.slice(0, max - 1) + "…" : text || null
9}
10
11// Comment bodies are usually plain text (wiki markup); if one arrives as Atlassian Document
12// Format (a JSON tree), collect its text nodes instead.
13function plain(node) {
14 if (typeof node === "string") return node
15 if (!node || typeof node !== "object") return ""
16 const own = typeof node.text === "string" ? node.text : ""
17 const kids = Array.isArray(node.content) ? node.content.map(plain).join(" ") : ""
18 return [own, kids].filter(Boolean).join(" ")
19}
20
21// Only link to real http(s) URLs.
22function link(url, cta) {
23 return typeof url === "string" && /^https?:\/\//.test(url) ? [{ cta, url }] : []
24}
25
26// issue.self is the REST URL (https://acme.atlassian.net/rest/api/2/issue/10001); the browse
27// link lives on the same site: https://acme.atlassian.net/browse/ABC-123.
28function browse(issue) {
29 const match = typeof issue?.self === "string" ? issue.self.match(/^(https?:\/\/.+?)\/rest\//) : null
30 return match && typeof issue.key === "string" ? `${match[1]}/browse/${issue.key}` : null
31}
32
33function handleRequest(request) {
34 const body = request.body && typeof request.body === "object" ? request.body : {}
35 const comment = body.comment && typeof body.comment === "object" ? body.comment : null
36
37 // Guard: only new comments.
38 if (body.webhookEvent !== "comment_created" || !comment) {
39 console.log(`Ignoring Jira "${body.webhookEvent ?? "unknown"}" event`)
40 return null
41 }
42
43 const issue = body.issue ?? {}
44 const who = comment.author?.displayName ?? "Someone"
45 const summary = issue.fields?.summary
46 const url = browse(issue)
47 // Jump straight to the comment when we know its ID.
48 const target = url && comment.id ? `${url}?focusedCommentId=${encodeURIComponent(comment.id)}` : url
49
50 return {
51 title: `💬 ${who} on ${issue.key ?? "an issue"}`,
52 message: [clip(plain(comment.body)) ?? "New comment", typeof summary === "string" && summary ? `(${summary})` : null].filter(Boolean).join(" "),
53 topic: "Jira",
54 priority: -1, // Low — read it when you're back in Jira
55 buttons: link(target, "Open comment"),
56 }
57}
Payload

The Jira comment_created webhook

This is what Jira sends to your URL for comment: created. It is a sample, trimmed to the fields recipes use.

comment_created · sample.json
1{
2 "issue": {
3 "id": "10231",
4 "key": "SHOP-88",
5 "self": "https://acme.atlassian.net/rest/api/2/issue/10231",
6 "fields": {
7 "status": {
8 "id": "3",
9 "name": "In Progress"
10 },
11 "project": {
12 "id": "10000",
13 "key": "SHOP",
14 "name": "Webshop"
15 },
16 "summary": "Checkout total is off by one cent",
17 "priority": {
18 "id": "2",
19 "name": "High"
20 },
21 "issuetype": {
22 "id": "10004",
23 "name": "Bug"
24 }
25 }
26 },
27 "comment": {
28 "id": "10510",
29 "body": "Found it — we round each line before summing. Fix incoming.",
30 "self": "https://acme.atlassian.net/rest/api/2/issue/10231/comment/10510",
31 "author": {
32 "self": "https://acme.atlassian.net/rest/api/2/user?accountId=5b10a2844c20165700ede21g",
33 "active": true,
34 "accountId": "5b10a2844c20165700ede21g",
35 "accountType": "atlassian",
36 "displayName": "Sam Lee"
37 },
38 "created": "2026-09-28T11:46:51.000+0200",
39 "updated": "2026-09-28T11:46:51.000+0200",
40 "jsdPublic": true,
41 "updateAuthor": {
42 "accountId": "5b10a2844c20165700ede21g",
43 "displayName": "Sam Lee"
44 }
45 },
46 "timestamp": 1759052811000,
47 "webhookEvent": "comment_created"
48}
FAQ

Jira new comment notifications: questions

Does this work on iPhone and Android?

Yes. Install the JustPush app from the App Store or Google Play and sign in. Every phone signed in to your account gets the notification.

Do I need to write code?

No. Install the recipe in Studio, paste your webhook URL into Jira and you are done. The code is there if you want to change the text, the sound or the buttons.

Can I change what the notification says?

Yes. After install the recipe's code is yours. Edit it in Studio and test it against the sample payload before you save.

What does it cost?

JustPush is free for 30 days. After that it's $19.99 a year, or $39.99 once. There is no extra charge for recipes.

Ready when you are

Jira on your phone in two minutes.

Install the recipe, paste one URL, done. Free for 30 days, no credit card required.