Skip to main content
Fluid gives you two ways to reach people. Pick by what the person should get.
  • Flow is Fluid’s messaging center: the Messaging screen in the admin and the Messaging tab in the mobile app. It holds direct and group conversations, channels, downline conversations, SMS and email conversations with contacts, bots, and Today. People read and reply there, in threads.
  • Today is part of Flow: your company’s own social feed. See Today.
  • Outbound messages send one message from your company to one person, on a channel you choose: email, SMS, push, the person’s preferred channel, or a Flow direct message. Each one goes out from your company’s own sending identity, and Fluid keeps it with its delivery events.
Use outbound messages when your system decides to tell someone something. Use the Flow APIs when you’re building or running the conversation itself.

Which API to use

WhatsApp has an endpoint, but Fluid can’t send WhatsApp yet, so every request is refused.

How outbound messages behave

These rules hold on every outbound channel:
  • Your company is always the sender. Email goes from your company’s sending address and SMS from your registered number. Fluid never falls back to a shared sender. If a channel isn’t set up, the request is refused with a code and a setup block that says what’s left and links to the admin screen that finishes it.
  • Name the recipient once. Email and SMS take an address (to), contact_id, customer_id or member_id. Push, preferred and Flow take member_id only. Customers and members are the same people.
  • Send each message once. Pass an idempotency_key, or the Idempotency-Key header. Sending again with the same key returns the first message instead of sending twice.
  • Marketing follows your rules. A marketing message needs the person’s marketing consent for the channel. One asked for during the person’s quiet hours waits until they end, unless you pass no_queue. Set quiet hours and frequency caps with Change marketing send rules. A transactional message, the default, skips both.
  • Every send is kept. Accepted or refused, read it back with Get a message and its delivery history. A Flow message is recorded as sent without a delivery receipt.
Each channel needs its own permission: outbound_messages.email, outbound_messages.sms, outbound_messages.push or outbound_messages.flow. A company API token, a partner token, a droplet installation token with the messaging scope, or a We-Bot can send.

Welcome a new enrollee

Say you want every new member to hear from you the moment they enroll.
1

Listen for the enrollment

Create a webhook for the enrollment resource’s completed event. See Webhooks for verifying deliveries. The delivery’s member object carries the new member’s id, and sponsor names who sponsored them.
2

Pick the channel

A new enrollee might not have the app yet. Send a welcome on their preferred channel: Fluid tries their ranked contact methods, then push, email and SMS, and uses the first one your company has set up and they can receive. If you want the welcome to start a conversation in Flow, send a Flow direct message instead.
3

Send it once

Use the enrollment as your idempotency key, so a retried webhook delivery doesn’t send a second welcome:
4

Handle a refusal

A refusal names its reason in code. For the preferred channel, setup.tried lists each channel Fluid tried and why it skipped it. no_reachable_channel means none of them worked for this person.
To have the sponsor say hello in Flow, send the Flow message as the sponsor with send_as. That needs the sponsor’s permission first. See the next section. You can also give the job to a We-Bot: an event trigger on the enrollment wakes the bot, and the bot sends with bot_id.

Send on someone’s behalf

A droplet or a back-office service sends with its own token. Who the message appears to come from depends on what the request names: Sending as a person needs their consent. A person lets your app send as them with Let an app send as you, for transactional messages, marketing messages, or both. Only that person can grant it. An admin can’t grant it for them. Without it, a send_as request is refused with sender_not_authorized, and Fluid doesn’t fall back to your app’s sender. A person withdraws it with Stop an app sending as you. A droplet must ask for messaging. A droplet installation token reaches outbound messages only with the opt-in messaging scope. Request it when you create your droplet. Admins stay in control. List app senders shows every app that posts in Flow. Change an app sender renames one, changes its icon, or disables it. A disabled sender’s sends are refused with app_sender_disabled. Replies come back as webhooks. When a member replies to your app’s Flow message, your droplet receives it through the bot_message resource’s created webhook.

Today

Today is your company’s own social feed inside Flow, much like a timeline on a social network. Admins and members post updates, comment and like, and everyone in the company can follow along.
  • A large community can connect without the noise. Posting to Today never notifies anyone. A company with a hundred thousand members can share wins, news and stories without pinging everyone in real time, the way a busy channel would.
  • People catch up when it suits them. The feed waits for them, so Flow’s conversations stay for the messages that need an answer.
  • Admins stay in charge. Members can report a post, and admins can archive and restore posts and comments. See Moderate channels and Today.
Today can be turned off. Hide it from members with today_enabled, or let only admins post with today_posting. Both are part of the Member messaging policy.

Set what members can see

Some companies keep members from finding and messaging each other, for privacy or to prevent cross-recruiting between teams. The Member messaging policy sets this for the whole company. Change it with Change the Member messaging policy, or in the admin: open Messaging, then choose Settings > Flow settings. See Messaging. The policy limits only a member reaching another member. Admins, staff and bots are always reachable, and a member can always reach them. Name and avatar are always shown. When a member falls out of reach, an existing conversation with them keeps its history but leaves the member’s list and takes no new messages.

Moderate channels and Today

Admins, and We-Bots running with their owner’s rights, can moderate: Every removal, archive and restore is audited, naming the admin, or the bot and its owner.

Bots in Flow

Four kinds of automated sender can appear in Flow. They’re managed separately: An app sender isn’t a bot. It’s how your app’s own outbound Flow messages are labelled.