For Team

Connecting your accounts to Laurelin

Laurelin only knows what we tell it. The faster you connect Outlook, Slack, and Telegram, the less time you spend retyping who you talked to and what about. This guide covers all four connectors (Outlook, Slack, Telegram, Notion), what each one buys you, and what's still on you to decide.

All four live on the Sync tab in Laurelin (https://laurelin.valinorinfo.com/apps/laurelin.html).

The shape of the pipeline

Every connector follows the same path:

  1. The adapter pulls raw messages from the source (Microsoft Graph, Slack Events webhook + web API, Telegram getUpdates, Notion API).
  2. The auto-router classifies each one as a known contact, a known company by domain, internal-only, blocklisted, or unknown.
  3. Known senders bypass review. They become interactions directly, linked to the right company and people.
  4. Unknown senders go to the Sync Inbox. You approve, merge, or dismiss; approval creates the company, person, and interaction in one click.
  5. Watermarks track progress so a worker restart never replays history.

Two things to remember:

Outlook

What it enables

How it works

OAuth into your @valinordigital.com mailbox via Microsoft Graph (Mail.Read, Calendars.Read). Every few minutes the sync worker calls /me/messages filtered to receivedDateTime ge <watermark> and walks each new message through the auto-router. Body content is summary-only (about 255 chars of bodyPreview). No full bodies, no attachments.

Automated

Surfaced for you

To connect

Sync tab → Connect Outlook → OAuth flow. Admin sets the Azure AD client ID / secret / tenant once; after that everyone connects in one click. Connection status, last poll time, and a Poll now button live on the same panel.

Slack

What it enables

How it works

You install the Valinor Slack app to the workspace and OAuth your own user (channels:history, groups:history, im:history, mpim:history, users:read). The Events webhook fires on every new message; the adapter normalizes and runs the auto-router. Backfill calls conversations.history per channel for the lookback window.

Automated

Surfaced for you

To connect

Sync tab → Connect Slack → OAuth. Admin sets the Slack app credentials once. After that, mapping channels is the only recurring work, and most channels get mapped on their first message.

Telegram

What it enables

How it works

Telegram Bot API in Business mode. The bot reads your chats via getUpdates long-poll. You pair the bot to your team-member record once, then add it to your Telegram Business account, then opt in per chat. It is read-only by design; the telegram-bot.js helper exports zero send-side methods.

Automated

Surfaced for you

This is the connector with the most setup friction. Three things you actively do:

  1. Pair once. Sync tab → My Telegram → Generate pairing code. Open Telegram, find the bot, send /pair <code>. Binds your telegram_user_id to your people row.
  2. Connect in Business mode. Telegram → Settings → Business → Chatbots → add the bot's username, enable it. Without this step the bot can't see anything.
  3. Pick which chats to log. Each chat starts as "Off" and appears in the chats table as messages arrive. Flip the toggle per chat. Shared chats with teammates can use a team override (force on / force off) so one person's choice covers the group.

To connect

Admin sets the bot token (from @BotFather) once. After that, the three steps above. The Refresh button on the panel surfaces new chats and pairing status.

Notion

What it enables

How it works

A dedicated worker (laurelin/notion-pipeline-sync.js) reconciles records between Notion's pipeline database and Laurelin. Every 15 minutes it pulls from Notion and mirrors the pipeline fields exactly: edits and clears both propagate, deals removed from the Notion pipeline drop out of Laurelin's, and new Notion pages appear without waiting for the daily S3 roster refresh.

Pushing the other way is manual. The Push to Notion button on the Pipeline tab rewrites the linked Notion pages to match Laurelin's current state (only fields that differ are written) and creates pages for companies that exist only in Laurelin. Where Notion stores one field that Laurelin keeps on both the company and its Deal project (Process, Key questions, Goal, Size, Deal Type, End Market, Priority), the project's value wins when a Deal project is linked.

Before every pull, push, and restore, a checkpoint of the pipeline state is saved (newest 60 kept; no-op pulls don't leave one). The Checkpoints panel on the Pipeline tab lists them and can restore any snapshot into Laurelin. Restoring only changes Laurelin; push to Notion afterwards to roll Notion back too. Restores are themselves checkpointed, so they are reversible.

To connect

Notion sync is a workspace-level setup — there's no per-user OAuth. Admin configures the Notion integration token once; the worker uses it for all reads. Status and a manual "Reconcile now" button live on the Sync tab.

If something looks off (a company in Notion isn't in Laurelin or vice versa), use the reconcile button and check the pipeline/reconcile endpoint status.

Do-not-track

For correspondence with specific people you want to keep entirely out of Laurelin (a sensitive negotiation, personal threads from a work address that you don't want logged):

  1. Sync tab → Do-not-track.
  2. Add their email address.

Any future inbound or outbound to that address will be skipped at ingest. Existing interactions are unaffected — you can delete those manually if needed.

Different from skip rules: skip rules drop a domain or subject pattern globally. Do-not-track is per email address and applies regardless of company.

Day-to-day: the Sync Inbox

Once your connectors are live, your job collapses to one tab:

Approval is the only manual step. Everything else (domain matching, contact creation, thread linking, direction inference) happens upstream of you.

When something goes wrong

Privacy and read-only guarantees

Roadmap — maybe-later

These aren't built and aren't queued. They'd each give us more automation in exchange for cost or vendor surface area, so they live here as the next things to consider only after the current stack proves insufficient.


Four connectors, one inbox, one approval step. If you're spending more than five minutes a day on Laurelin maintenance, something is misconfigured. Flag it in #laurelin and we'll fix it.

For the deeper engineering view — how each adapter polls, how the auto-router classifies, watermark internals — see Sync internals.