Every 15 minutes
Turn sheet briefs into AI drafts reviewed in Teams
Add a brief to your sheet and an AI draft is written into the row and posted to your Teams channel for review.
- Runs
- Every 15 minutes
- Apps
- Google Sheets, Microsoft Teams
- AI
- Yes, uses the built-in AI allowance
- Access
- Sheets read+write; ChannelMessage.Send
Send this to your assistant
Create a ClickRuntime automation: when I add a row to my Briefs sheet, write the draft with AI, save it in the sheet, and post it to our Teams channel for review.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A recruitment team writes job descriptions all week, and a small marketing team writes social posts from short briefs. The briefs already hold the facts: role, level, location, key points. Turning each one into a first draft is repetitive, and drafts sit in someone's documents where reviewers never see them.
This automation takes each new brief row, has AI write a draft in your house style, saves it back in the row and posts it to a Teams channel. Reviewers comment in Teams, and the sheet keeps the brief and the draft side by side.
What you get out of it
First drafts in minutes
A brief added in the morning has a draft waiting by the time you check Teams. Writers spend their time improving drafts, not starting them.
Review where the team already talks
Drafts land in a Teams channel the reviewers already follow. Feedback happens in the thread, not in long email chains.
Brief and draft side by side
Each draft is saved in the same row as its brief. Anyone can check the draft against what was asked for.
Consistent tone across writers
Your style notes go into every draft. Job ads and posts sound like one company even when different people write the briefs.
How it works
What happens, step by step
Every 15 minutes, ClickRuntime reads your Briefs sheet and finds rows that do not have a draft yet.
AI writes a draft for each new brief, following your style notes.
The draft is saved into the row next to its brief.
Each draft is posted to your Teams channel so reviewers can comment on it.
Before it runs live
- Connect your Google Sheets account and pick the spreadsheets it may use
- Connect Microsoft Teams
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
- Change what the AI looks for, or how it writes the result
- Add another app, for example also send it to Slack
- Combine it with other Google Sheets and Microsoft Teams steps into one automation
Under the hood
The code that runs this automation
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, credentials, http, ai, report_fetched
SHEET_ID = "your-spreadsheet-id"
TEAM_ID, CHANNEL_ID = "your-team-id", "your-channel-id"
STYLE = "Plain, friendly, specific. No buzzwords. Job ads under 300 words, posts under 60."
@on_trigger
def run(event):
values = build("sheets", "v4", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False).spreadsheets().values()
rows = values.get(spreadsheetId=SHEET_ID, range="Briefs!A2:C").execute().get("values", [])
new = [(n, r) for n, r in enumerate(rows, start=2) if len(r) >= 2 and r[1].strip() and len(r) < 3]
report_fetched(len(new))
if not new:
return {"new": 0}
for n, (kind, brief) in new[:10]:
try:
draft = ai.generate(f"Write a {kind}.\nBrief: {brief[:2000]}", system=STYLE, max_output_tokens=700).text
except ai.AIError:
break
values.update(spreadsheetId=SHEET_ID, range=f"Briefs!C{n}", valueInputOption="RAW", body={"values": [[draft]]}).execute()
http.post(f"https://graph.microsoft.com/v1.0/teams/{TEAM_ID}/channels/{CHANNEL_ID}/messages",
headers={"Authorization": f"Bearer {credentials.connection('microsoft', 'work')}"},
json={"body": {"contentType": "text", "content": f"Draft for review ({kind}, row {n}):\n\n{draft}"}})
return {"new": len(new)}FAQ
Common questions
What should a brief row contain?
How does it know which rows are new?
Can I set a house style?
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
Scan email links, log results and alert Teams on bad ones
Links in new emails are checked with VirusTotal, every result is logged in your Security sheet, and malicious ones are flagged in Teams.
See how it worksPost upcoming deadlines from a sheet to Teams
Each morning your Teams channel lists every item in your tracker due in the next two days, with the person responsible.
See how it worksLabel new emails automatically
New mail is sorted into labels like Inquiry, Invoice and Newsletter within minutes of arriving.
See how it worksKeep exploring
Set up “Turn sheet briefs into AI drafts reviewed in Teams” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.