Writes a reply to each new support email, asks you to approve it, and sends it or leaves it as a draft.

UsesClaudeGmail

Review and send replies to support enquiries

Every hour, the unread support mail matching a Gmail search you choose is read, and a reply to each message is written by AI from a description of your business and tone that you provide once. Anything it cannot answer from that description becomes a short acknowledgement saying a colleague will follow up, rather than an invented answer.

Before anything reaches a customer you are asked to approve the reply, shown in full next to what the customer wrote. Approve it and it goes straight away, as a reply in the customer's own email conversation; reject it, or leave it, and it is saved as a Gmail draft in that conversation instead, so nothing is lost and nothing is sent that a person did not approve. Unless you name approvers on the approval step, anyone in your Lodol workspace can approve. A message waiting on you is labelled 'Reply awaiting approval' and a handled one 'Reply handled', so no enquiry is taken twice, and the batch is kept small because each enquiry waits for you. One enquiry that fails is skipped while the rest are still handled, and the run is marked as failed with a note naming it.

You need a Gmail connection and an Anthropic connection, a Gmail search that finds your support mail, and a short description of what your company does, the tone to write in and anything a reply must never promise.

ScheduleRun every hour.Run every hour.
ValuesSet supportQuery to blank.Set supportQuery to blank.
ValuesSet businessContext to blank.Set businessContext to blank.
ValuesSet maxEmails to 5.Set maxEmails to 5.
ValuesSet handledLabel to Reply handled.Set handledLabel to Reply handled.
ValuesSet awaitingLabel to Reply awaiting approval.Set awaitingLabel to Reply awaiting approval.
ValuesSet openQuery to (supportQuery) -label:handledLabel with replaced by - in lowercase -label:awaitingLabel with replaced by - in lowercase.Set openQuery to (supportQuery) -label:handledLabel with replaced by - in lowercase -label:awaitingLabel with replaced by - in lowercase.
GmailGmailList emails matching openQuery. Save it as inbox.List emails matching openQuery. Save it as inbox.
ValuesSet failures to an empty list.Set failures to an empty list.
Decisions & LoopsFor each enquiry in inbox.emails:For each enquiry in inbox.emails:
ValuesSet claimed to false.Set claimed to false.
ValuesSet delivered to false.Set delivered to false.
Decisions & LoopsIf a step below fails, save the error as replyErrorIf a step below fails, save the error as replyError
Try
GmailGmailList emails matching openQuery. Save it as stillOpen.List emails matching openQuery. Save it as stillOpen.
Decisions & LoopsIf the id of each item in stillOpen.emails doesn't contain enquiry.idIf the id of each item in stillOpen.emails doesn't contain enquiry.id
Yes
ValuesShow in the output: Skipping the enquiry enquiry.id as text: another run has already taken it on, or it was read meanwhile.Show in the output: Skipping the enquiry enquiry.id as text: another run has already taken it on, or it was read meanwhile.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
GmailGmailAdd label awaitingLabel to email enquiry.Add label awaitingLabel to email enquiry.
ValuesChange claimed to true.Change claimed to true.
ValuesSet sender to enquiry.from.Set sender to enquiry.from.
ValuesSet subject to enquiry.subject.Set subject to enquiry.subject.
ValuesSet question to enquiry.body.Set question to enquiry.body.
ValuesSet prompt to You are writing a reply to a customer support email. Write only the body of the reply - no subject line, no salutation placeholders like [Name], and nothing you cannot verify from the context below. If the enquiry cannot be answered from that context, write a short reply that acknowledges it and says a colleague will follow up.Set prompt to You are writing a reply to a customer support email. Write only the body of the reply - no subject line, no salutation placeholders like [Name], and nothing you cannot verify from the context below. If the enquiry cannot be answered from that context, write a short reply that acknowledges it and says a colleague will follow up. About the business: businessContext The customer wrote: From: sender Subject: subject question.
ClaudeClaudeAsk Claude: prompt. Save it as written.Ask Claude: prompt. Save it as written. Maximum response length: 800
TextTrim written.response_text and save it as replyBody.Trim written.response_text and save it as replyBody.
Decisions & LoopsIf replyBody isn't emptyIf replyBody isn't empty
Yes
ApprovalsRequest approval: Send this reply to sender about @subject? Save it as review.Request approval: Send this reply to sender about @subject? Save it as review.Approve and it goes to the customer now, as a reply in their own email conversation. Reject it, or leave it, and it is saved as a Gmail draft in that conversation for you to edit. WHAT THE CUSTOMER WROTE From: sender Subject: subject question ...
Decisions & LoopsIf review.approved is yesIf review.approved is yes
Yes
GmailGmailReply to email enquiry.Reply to email enquiry.replyBody
No
GmailGmailDraft a reply to email enquiry.Draft a reply to email enquiry.replyBody
ValuesChange delivered to true.Change delivered to true.
GmailGmailAdd label handledLabel to email enquiry.Add label handledLabel to email enquiry.
No
ListsAdd @subject from sender: the AI wrote no reply. It is tried again next hour. to the end of failures and save it as failures.Add @subject from sender: the AI wrote no reply. It is tried again next hour. to the end of failures and save it as failures.
GmailGmailRemove label awaitingLabel from email enquiry.Remove label awaitingLabel from email enquiry.
On error
Decisions & LoopsIf delivered is yesIf delivered is yes
Yes
ListsAdd @enquiry.subject from enquiry.from: the reply was sent or saved as a draft, but its labels could not be updated (replyError.message). It keeps the 'Reply awaiting approval' label so it is not answered twice; change that label to 'Reply handled' in Gmail. to the end of failures and save it as failures.Add @enquiry.subject from enquiry.from: the reply was sent or saved as a draft, but its labels could not be updated (replyError.message). It keeps the 'Reply awaiting approval' label so it is not answered twice; change that label to 'Reply handled' in Gmail. to the end of failures and save it as failures.
No
ValuesSet retryNote to It is tried again next hour..Set retryNote to It is tried again next hour..
Decisions & LoopsIf claimed is yesIf claimed is yes
Yes
Decisions & LoopsIf a step below fails, save the error as releaseErrorIf a step below fails, save the error as releaseError
Try
GmailGmailRemove label awaitingLabel from email enquiry.Remove label awaitingLabel from email enquiry.
On error
ValuesChange retryNote to It keeps the 'Reply awaiting approval' label, so it is skipped until you take that label off in Gmail..Change retryNote to It keeps the 'Reply awaiting approval' label, so it is skipped until you take that label off in Gmail..
No
No steps
ListsAdd @enquiry.subject from enquiry.from could not be handled (replyError.message).@retryNote to the end of failures and save it as failures.Add @enquiry.subject from enquiry.from could not be handled (replyError.message).@retryNote to the end of failures and save it as failures.
Decisions & LoopsIf failures isn't emptyIf failures isn't empty
Yes
TextJoin failures with "Join failures with - and save it as failureList.
Decisions & LoopsStop and report a problem: Not every support email could be handled. These need a look:Stop and report a problem: Not every support email could be handled. These need a look: - failureList.
No
No steps