Send Email

ID: email-send · Kind: action Send an email via an SMTP credential. Supports tracking and reply waiting.

Input fields

FieldRequiredMeaning
credentialIdSMTP credential — must be active
subjectSubject — supports {{...}} variables
bodyone ofInline body (HTML)
templateNameone ofTemplate reference (preferred over body)
trackOpensEnable pixel tracking
trackClicksRewrite links for click tracking
unsubscribeLinkAuto-append an unsubscribe link
replyTimeoutMsWait up to N ms for a reply; otherwise the node treats it as “no reply” and continues

Output (edge.when keys)

FieldTrue when
sentSMTP accepted the message
openedPixel pinged back
clickedA tracked link was clicked
repliedInbound matched the In-Reply-To header
bouncedHard bounce
replyText(string) Reply body
clickedUrl(string) URL that was clicked

edge.when example

Node email-1 (Send Email) outgoing edges:
  • when: replied → Exit — Handoff
  • when: clicked → Wait 24h → Send follow-up
  • when: bounced → Exit — Suppress (reason=bounce)
  • default → Wait 72h → Send nudge

Send (LinkedIn / Telegram)

ID: send-step · Kind: action Send via LinkedIn DM or Telegram. Channel + credential are independent but the credential picker filters by channel.

Input fields

FieldRequiredMeaning
channellinkedin / telegram
credentialIdCredential matching the channel
bodyone ofInline body
templateNameone ofTemplate reference
replyTimeoutMsWait up to N ms for a reply

Output

FieldMeaning
sentSent successfully
repliedCustomer replied within N ms
replyTextReply body

Channel notes

  • The credential is a cookie session. When LinkedIn invalidates the cookie → the workspace gets an alert.
  • LinkedIn soft rate limit: ~50–100 DMs/day/account. Over → the account is throttled.
  • Only DMs are supported today (after the connection request). InMail / connect message: roadmap.
  • The credential is a bot token (from BotFather).
  • Customer must have a Telegram chat ID linked as a contact.
  • Telegram only delivers after the user runs /start on the bot (granting permission).

Tracking pixel + click

See Tracking & Webhooks. Every outbound email is rewritten:
  1. Pixel: a <img src="...pixel.gif?t=<token>" width="1" height="1"> is appended.
  2. Click: every link is replaced with ...tracking/click?t=<token>&url=<encoded>.
Every messaging node checks contact.isSuppressed before sending. Suppressed contacts are skipped silently.

Inbound

When a customer replies, the system parses inbound from the provider (SMTP IMAP / SES inbound rule / Telegram webhook), matches the contact by email / linkedin URL / chat ID, creates a message bubble, and fires the matching event. Any node waiting via replyTimeoutMs immediately fires replied=true.
Outbound queue rate limiting + send-time optimization, custom retry-with-backoff policies, separate soft-bounce + complaint events, latencyMs output field — coming soon or partial.