The moment it happens
Send a Slack DM when you're assigned a monday.com item
When someone is added to the person column of a monday.com item, they get a Slack direct message with the item, due date and link.
- Runs
- The moment it happens
- Apps
- Slack, monday.com
- AI
- Not needed
- Access
- boards:read, users:read, webhooks:write; users:read, users:read.email, chat:write
Send this to your assistant
Create a ClickRuntime automation: when the person column changes on an item on my Projects board in monday.com, find each newly assigned person in Slack by email and send them a direct message with the item name, its due date and a link.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
monday.com sends its own assignment notifications, but many people live in Slack and never open the monday.com bell.
A direct message in Slack reaches people where they already work, with the due date in the message so they can plan straight away.
Only newly added people are messaged, so reassigning or adding a second owner does not spam the people already on the item.
What you get out of it
Reaches people in Slack
Assignments show up as a direct message, not only in monday.com's notification bell.
Due date up front
The message says when it is due and its status, so nobody has to open the item to plan.
Only new assignees
People already on the item are not messaged again when someone else is added.
Matched by email
monday.com users are found in Slack by email address, with no lookup table to keep.
Any board
Add the webhook to more boards and the same messages go out.
How it works
What happens, step by step
A monday.com webhook tells ClickRuntime when the person column on an item changes.
It compares the new and previous assignees, so only people who were just added are messaged.
Each new assignee is found in Slack by their email address.
They get a direct message with the item name, due date, board and link.
Before it runs live
- Connect Slack, then invite the app to the channel (type /invite @ClickRuntime there)
- Connect monday.com
- Paste your automation's link into the other app's webhook settings
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Act only on the items that match your own rules, and skip the rest
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Google Sheets
- Combine it with other Slack and monday.com steps into one automation
Under the hood
The code that runs this automation
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
from clickruntime import on_event, credentials, http
ITEM = """query ($id: [ID!]) { items(ids: $id) { name url board { name }
column_values(ids: ["date", "status"]) { id text } } }"""
USERS = """query ($ids: [ID!]) { users(ids: $ids) { id email } }"""
def monday(query, **variables):
resp = http.post("https://api.monday.com/v2", json={"query": query, "variables": variables},
headers={"Authorization": credentials.secret("MONDAY_API_TOKEN"), "API-Version": "2024-10"})
resp.raise_for_status()
return resp.json()["data"]
def people(value):
return {str(p["id"]) for p in (value or {}).get("personsAndTeams", []) if p.get("kind") == "person"}
@on_event
def handle(event):
body = event.json or {}
if "challenge" in body:
return {"challenge": body["challenge"]}
ev = body.get("event", {})
if ev.get("columnId") != "person":
return {"skipped": "other column"}
added = people(ev.get("value")) - people(ev.get("previousValue"))
if not added:
return {"skipped": "nobody added"}
item = monday(ITEM, id=[ev["pulseId"]])["items"][0]
c = {v["id"]: v["text"] for v in item["column_values"]}
text = (f"👋 You were assigned *{item['name']}* on {item['board']['name']}\n"
f"Due: {c.get('date') or 'no date'} · Status: {c.get('status') or 'none'}\n{item['url']}")
slack = WebClient(token=credentials.connection("slack", "work"))
sent = []
for u in monday(USERS, ids=list(added))["users"]:
try:
uid = slack.users_lookupByEmail(email=u["email"])["user"]["id"]
except SlackApiError:
continue
slack.chat_postMessage(channel=uid, text=text)
sent.append(u["email"])
return {"messaged": sent}FAQ
Common questions
Does the person need to install anything in Slack?
What happens when someone is removed from an item?
Our person column has a different ID. Will it still work?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Post finished monday.com items to Slack #wins
When an item on a monday.com board is set to Done, #wins gets a message with the item, its owner and a link.
See how it worksPost monday.com item comments to a Slack channel
When someone writes an update on a monday.com item, the comment is posted to a Slack channel with the author and a link.
See how it worksAlert Slack when monday.com items get stuck
When an item on your monday.com board is marked Stuck, Slack gets a message with the owner and a link.
See how it worksKeep exploring
Set up “Send a Slack DM when you're assigned a monday.com item” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.