Message these people
Message starts an outreach campaign for the people you've ticked. You choose the rounds and channels, QLU writes a message for each person, and nothing is sent until you publish.
Where Q's cards go in QLU Outreach: when each one appears, what it points at, and what it says. 44 cards across one guided first campaign, from the assignment's Message button to the campaign page, plus one-time tips after it.
Q-DESIGN.md and ONBOARDING-HANDOFF.md (fs-Qlu2-frontend, aabid/people-search-onboarding)main @ 1ce71d7cThe Learn page already lists Outreach as coming soon, with the first workflow "Send a first message to a shortlist". The guided run ends at outcome 3. Lessons are named or.* and anchors or-*.
Step 1 of the first campaign
Assignment People tab and the Message dialog (in QLU), Outreach home, the three template pages
Every campaign starts in QLU: the person ticks people on an assignment's People tab and selects Message. The first two cards are built in fs-Qlu2-frontend, where People Search's lessons are readable, so they can follow its last card ("Saved to Prospects").
Message these people
Message starts an outreach campaign for the people you've ticked. You choose the rounds and channels, QLU writes a message for each person, and nothing is sent until you publish.
Four ways to start
Create From Scratch lets you set every round yourself. AI-Generated Templates suggests sequences for these people. Saved Templates reuses one you saved. Add to Existing Campaign puts them into a campaign that's already running.
Campaigns start from an assignment
Open an assignment, tick the people you want to reach on its People tab, and select Message. Your campaigns then appear here with their progress and replies.
Sequences for these people
QLU drafted these for the people you selected. Each sets the rounds, the channels and the days between them. Pick one and select Add; you can change any round on the next screen.
Join a running campaign
Choose a campaign for these people to join. They get its rounds, with messages QLU writes for each of them, which you review before publishing.
Your saved templates
Templates you saved when publishing. Each keeps its rounds and messages, and QLU rewrites the messages for these people. Rename one with the pencil.
Step 2 of the first campaign
Builder step 1 · /chat-campaign/:listId
The most important screen to teach. Every channel's setup requirement is checked here, one dialog at a time, only after Next. Round 1 defaults to LinkedIn, so most new people meet the extension and sign-in first.
Plan your rounds
A campaign is a sequence of rounds. Everyone starts in Round 1, and anyone who hasn't replied moves to the next round after the wait you set. Choose each round's channel and timing here; QLU writes the messages in a later step.
Choose a channel
LinkedIn rounds send from your LinkedIn account through the QLU extension. LinkedIn Recruiter uses your InMail credits. Email rounds send from a mailbox you've connected; add one with Add Email Channel. Call and Text need a QLU number.
When Round 1 goes
Send Now sends Round 1 from this browser tab as soon as you publish, a few seconds apart, so keep the tab open until it finishes. Pick a later time to start the campaign then.
The wait between rounds
This round goes only to people who haven't replied, this long after the previous round. Rounds need at least 24 hours between them.
Outside your sending hours
This round lands on a holiday or outside the days and hours you prefer to send. Change its time, or keep it and confirm when you select Next. Your hours are in Settings, under Calendar.
Reconnect this mailbox
QLU can't send from this mailbox until you sign in to it again. Select Authorize Access; once that's done, the round unlocks and Next works.
More rounds
Add up to 10 rounds. A new round copies the last one's channel and waits a day; change either.
Sync with Loxo
Turn this on to sync the campaign to a Loxo job after you publish. You pick the job here.
Install the QLU extension
LinkedIn rounds are sent by the QLU extension in this browser. Install it, sign in to LinkedIn in the same browser, then select Next again.
Step 3 of the first campaign
Builder step 2 · only with an email, call or text round
Missing personal emails and phone numbers. Nothing here blocks Next.
Missing contact details
{N} people have no personal email or phone number yet, and those rounds will skip them. Sync your address book, upload a list with the details filled in, or add them by hand. You can go on without them.
Personal or work
Choose which address each person gets. Select all personal emails switches everyone who has one.
Step 4 of the first campaign
Builder step 3 · the chat with QLU
The closest match to People Search: QLU writes, Q stays quiet, then Q explains what is finished. Nothing from Q while QLU is answering, writing rounds, generating messages, rewriting rounds, switching the right-hand panel, uploading an attachment or publishing.
How should QLU write it?
QLU writes your first message, then every round from it. Tell it what the message is about and the tone you want, or paste a template of your own. How would you like to start?
Your sample message
QLU will build every round on this message. Ask for changes in the chat, or select Generate for all Rounds when it reads right.
Every round, for one person
QLU has written each round for one person from your list. Edit a message directly, or use Modify to make it shorter, simpler or more formal.
Refine through chat
Describe a change here and QLU rewrites the rounds it affects. Show me types an example for you to review and send.
Write for everyone
When these read well, Generate for all writes every round for each person on your list, in the same style.
Emails in one thread
With this on, later emails go as replies in the same thread, under the first email's subject.
Review person by person
QLU has written every round for each person. Open anyone to read and edit their messages; Next Recipient moves through the list.
One person, or everyone
With a person open, chat changes only their messages, and their name shows above the box. Close it to change everyone's.
Publish
Publish starts the campaign. On the way you can save it as a template, to start the next one from it.
Fix these first
Some messages are too long for their channel, or empty. Select Publish to jump to the first one, then fix it there.
Save as a template
Save this campaign's rounds and messages to start the next one from Saved Templates. Skip for Now publishes without saving.
Step 5 of the first campaign
Builder step 4
The guided run ends here: the first message has gone to a shortlist.
Your campaign is live
Round 1 is sending from this tab, a few seconds apart, so keep it open until every message shows as sent. Later rounds go only to people who haven't replied. Select Continue to Campaign to follow it.
Step 6 of the first campaign
/v2/campaigns/:id
The results page of Outreach. Three moments on the first visit, then one-time tips. There is no approval step: after launch everything sends on schedule, except Call rounds.
Your rounds
Each card is a round, holding the people currently in it. Open one to see who's there and when their message goes. Later rounds open up as people move on.
Each person's messages
View All Messages shows every round for this person. Edit an unsent message for them or for everyone, or pause just them.
Replies
People who reply leave the rounds and move here, tagged Interested, Not interested, Out of office and so on. Reply to them from the Inbox.
A call is due
Call rounds wait for you. Select the people to call, then Initiate Call to ring them from the Dialer.
This one needs you
QLU couldn't send this message. Hover the warning to fix it: add the missing email or number, or skip the round.
Email rounds on hold
A mailbox this campaign sends from has lost access, so its email rounds are waiting. Select Authorise Access to sign in again.
Who the change is for
Change just this person's message, or everyone's. For everyone, QLU adjusts each person's version; Preview Recipients shows them before you save.
Pause
Pause stops every round until you resume. To pause one person, use Pause on their card.
After the first campaign
/inbox
First-touch tips only. A person can reply only once the prospect has replied.
Your replies
Pick a campaign, then a person. Inbox lists the people who replied; Sent lists everyone else you've messaged.
Reply once they answer
You can reply here once they respond. Until then, the campaign's rounds carry on.
Reply channel
Your reply goes on the channel they replied on. Pick another here, such as email instead of LinkedIn.
Check for new replies
Fetches this conversation's latest replies. LinkedIn can be checked once every 5 minutes.
Reply tags
QLU tags each reply as Interested, Not interested, Out of office and so on. Filter to see one kind.
After the first campaign
/ and /calendar-view
First-touch tips only.
Across your campaigns
Your average response rate, and how many messages and links people have opened, across all your campaigns. Live Activity shows the latest message sent.
What's going out
Each row is a campaign, and each cell counts the messages it sends that day, by channel. The icons above filter by channel.
Everything Q-specific stays in two places, as in People Search. Product files only gain data-q-anchor attributes and two small hooks.
QGuide/ into src/shared (qlu-global-components), so every app uses one Q. Only track.ts (QLU's Mixpanel) and modes.ts (People Search's mode type) are tied to QLU; the rest needs React, createPortal, clsx, LogRocket and SCSS modules.src/onboarding/: copy.ts for every word, QOutreachGuide.tsx with the tips list (on, target, prefer, spotlight, journey, holdScroll), and useScreen.ts, one 300 ms poll over the anchors. Mounted once in DefaultLayout beside GlobalModals.data-q-busy on the conversation is true while any query isStreaming (Conversation.tsx:152), while useIsAnyMessageGenerating sees work, while rounds are being rewritten, while an attachment uploads and while isPublishPending. data-q-view carries which panel is open. The chat's auto-scroll respects useQScrollHold.qlu-q-guide is localStorage, and Outreach runs on its own site, so its lessons are separate from People Search. The Learn page can't show Outreach progress without a server-side store: the unused user.isOnboarded, the existing /userEvents/onboard, or a new endpoint. Someone is new when they have no campaigns.isQluWorldClient().hideCampaignInfo), the Plus tips in the shared left rail (usePlusOnboarding) and QLU's message-onboarding-completed hint. They yield while Q is guiding, as People Search's older tours do.| New anchor | On | File |
|---|---|---|
or-rounds | The round list | Campaign-V2.5/RoundList-V2.5/index.tsx |
or-next | Rounds' Next (the test id next-button-cta is also on step 2) | Campaign-V2.5/CampaignForm/DefineRounds/index.tsx |
or-verify-missing | The missing-details panel | …/VerifyEmails/Cards/AddEmailsCard/index.tsx |
or-conversation | The chat, with data-q-busy and data-q-view | Campaign-V2.5/Conversation/Conversation.tsx |
or-sample-campaign | The sample panel | Campaign-V2.5/SampleCampaign-V2.5/sampleCampaign.tsx |
or-generate-all | Both Generate buttons (the test id generateAll_cta is on both) | Conversation.tsx, sampleCampaign.tsx |
or-recipients | The generated-messages list | …/GenerateMessages-V2.5/ProfileCabinet/profileCabinet.tsx |
or-live | The live card | Campaign-V2.5/CampaignForm/SendMessages/sendMessages.tsx |
or-got-responses | Campaign Finished - Got Responses! | RoundCompleteCard-V2/index.tsx |
or-initiate-call | Initiate Call | RoundDetailCard-V2/roundDetailHeader.tsx |
or-inbox-tabs | Inbox and Sent | Inbox/Recipient/Tabs/Tabs.tsx |
or-inbox-reply | The reply box | Inbox/Chat/MessageInput/index.tsx |
Existing test ids used as they are: channel-dropdown-cta, schedular-dropdown-cta, days-inc-dec, new-round-cta, select-valid-email-cta, publish_cta, continue_to_campaign, round_Container, rec_Container, Stop_campaign, Qlu_extension_modal, loxo-sync-toggle-row, and the chat box's data-cy.
QueryResponse.tsx:114 → Conversation.tsx:111). Q points only at the bottom bar's.useSendCampaignMessages.ts:100). Q's live card helps; a beforeunload guard fixes it.window.location (CampaignCard.tsx:88); only ⋯ → Edit reopens a draft.getCampaignDetails.ts:29). INTERESTED counts messages, not people (header.tsx:155). Q's copy mustn't promise live numbers.