FlowRunner
PricingContact
Theme
Start Free

Texter

Messaging

Connect AI agents to Texter, a unified business messaging platform for WhatsApp, Messenger, and Instagram. Agents create and send WhatsApp templates, manage and assign chats, apply labels, and react to incoming messages and status changes so customer conversations get routed and resolved fast.

Verified 19 triggers 32 actions API key available
Texter website ↗ Platform Documentation ↗ Capability data verified 2026-08-12
New Incoming Message fires on a customer message, and Texter filters out anything your own agents and bots sent, so nothing the flow sends can wake it again
Get Chat returns the customer, the channel, the current status, the assigned agent and department, and the chat's CRM data
The 24 hour session window decides the reply path, because a session message fails outright once the customer has been silent for a day
Send Chat Message answers inside the window, or Send Template Message reaches the customer outside it with an approved template
Manage Chat Labels records what the conversation was about, using label ids the search and routing actions also take
Assign Chat moves the conversation to a named agent or department and puts it into Pending for them
Resolve Chat waits for a person, because resolving routes the customer's next message back to the bot

What This Integration Enables

Texter, from WHATSPER in Tel Aviv, centralizes WhatsApp, Messenger and Instagram into one inbox, and the object the API is built around is the chat rather than the message. That distinction runs through everything. A chat carries a status, an assigned agent, a department, a label set, an unread count, a bot state and its own CRM data, and the messaging actions are addressed to it. Search Chats by phone number is how a customer becomes a chat id, and from there labels, assignment, resolution and CRM writes all operate on the same record. For a support team, that means the conversation is the unit of work rather than the ticket somebody opens about it, which is a better fit for how customers actually use messaging.

The second thing to know is that Texter resells Meta's official WhatsApp Business Platform, not a browser automated session. Templates are submitted to WhatsApp for approval and can be denied, Meta may reclassify an approved template's category, delivered messages carry Meta identifiers, and Meta's 24 hour customer service window governs when a session message may be sent. There is no QR code pairing of a personal phone and no session lifecycle anywhere in the API. That is a buying reason rather than a footnote: an official channel is one that cannot be suspended for pretending to be a person, and it is the version of WhatsApp a business can build a support process on. Template creation is a deliberate three step sequence here, creating the template, defining its localized content, and submitting it for review, because those are three genuinely different decisions.

Nineteen real time triggers make this one of the better event surfaces in the category, and they are real triggers rather than a single shared webhook slot. Texter exposes a genuine subscription API, so each trigger registers and removes its own subscription with its own callback URL, which means enabling one cannot overwrite a subscription somebody built in the Texter interface. Events cover messages, chat status changes, consent changes and channel health, and the channel health pair is worth calling out: a rate limit warning or an account suspension arrives as an event rather than as a slow decline in delivery nobody attributes. Delivery failures and health problems surface as automation exceptions rather than as quiet degradation, which is what a connector on an official channel should do.

Without FlowRunner

Conversations arrive in three places WhatsApp, Messenger and Instagram each have their own tab, and context is whatever the agent remembers from the last one
The session window discovered on failure A reply is composed, sent, rejected by the platform, and only then does anyone check when the customer last wrote
Resolution treated as bookkeeping A conversation is closed to clear the queue, and the customer's next message is answered by a bot they were escalated away from

With FlowRunner

Conversations arrive as one chat object One record carries the channel, the status, the assigned agent, the labels and the CRM data, regardless of where the customer wrote from
The session window checked before composing The reply path is chosen from the chat's own last message time, so a template is used when a template is what will land
Resolution treated as a routing decision The consequence of returning the customer to the bot is stated, and a person decides on the conversations where that matters

Use Case Scenarios

Triage that respects the window

A customer writes on WhatsApp. New Incoming Message fires, and because Texter filters out agent and bot traffic before dispatch, nothing the flow itself sends can retrigger it. The agent calls Get Chat, reads the CRM data already attached, pulls the customer's recent orders from Shopify, and classifies the question. Routine questions get answered with Send Chat Message inside the session window. Anything the agent should not answer alone gets a label through Manage Chat Labels, and Assign Chat moves it to the right department and puts it into Pending, which fires Chat Pending for the queue alerting a human team actually watches. The chat's whole history is available through Get Chat Messages, so the person who picks it up sees the conversation rather than a summary of it.

An outbound template that respects consent

Marketing wants to notify a segment about an order status change outside the 24 hour window, which means a template. The agent runs the three step sequence once during setup, Create Template, then Create Or Update Template Localization for each language, then Submit Template For Approval, and reads the resulting status back with List Templates and Include All so a pending or denied template is visible rather than assumed. At send time, Send Template Message supplies the variable values and attaches CRM data to the resulting chat, and recipients who opted out are skipped automatically by the platform rather than by a filter the flow has to remember. Setting a bulk report title groups many individual calls into one entry, which is what makes a personalized run reportable as a campaign.

Media out of a chat and into a system that needs it

A customer sends a photograph of a damaged item. Message With Attachment fires and carries the file id. Generate Public Media URL turns that into a public read only link with a time to live, which is what makes an attachment received in a chat reachable by an outside system, and the link goes into the claim record in Jira alongside the order. Time to live matters here: without one, the link never expires, and a link to a customer's photograph that outlives the claim is a small privacy decision made by omission. New links do not invalidate earlier ones, so several can coexist for the same file, which is worth knowing before a flow generates one per run.

Human-in-Loop Highlight

The gate on Texter is Resolve Chat, and it is not the bookkeeping action it looks like. Resolving a chat does two things beyond closing it in the inbox. It optionally sends the account's default resolution message to the customer first, which is a real message on a real channel. And after a chat is resolved, the next incoming message from that customer is routed back to the bot configured in Texter. That second consequence is the one that matters. A customer who was escalated to a human, waited, got help, and then writes back the next morning with a follow up does not land with the person who helped them. They land with the bot they were escalated away from, because a resolution earlier decided that.

For most conversations that is exactly right, and an agent should resolve them without asking anybody. A shipping question answered, a password reset confirmed, an order looked up: these close cleanly and the bot is a fine first responder next time. The gate exists for the conversations where it is not right, and an agent can identify them without judgment calls. The chat carries an escalation or complaint label, or the last message in the thread is the customer's rather than the agent's, or the chat was assigned to a named person rather than a department. On those, it stops. Into Slack: "Chat with +972 5X XXX 4180 (label: billing dispute) has had no activity for 36 hours. The last message is the customer's. Resolve Chat would close it, optionally send the default resolution message, and route their next message back to the bot rather than to Dana, who handled it. Resolve, leave Pending, or reassign?"

That is the digital andon cord placed on a decision that looks administrative and is actually about who a customer gets next. It is worth naming what this gate deliberately is not. It is not an approval on outbound copy, because approved templates already carry Meta's review and session replies inside the window are ordinary support work. It is not a spend gate. And it is not applied to every resolution, which would turn a support queue into a review queue and defeat the point. Orchestration as a Service means the agent handles the volume and the pattern, and stops on the specific cases where closing a conversation quietly changes what happens to a person. Two other actions deserve the same care and get it in their own descriptions: Delete Template is permanent, and Delete Event Subscription removes a subscription's entire revision history and silently stops any trigger that created it, where Inactivate Event Subscription is the reversible twin the vendor shipped alongside it.

Agent processes routinely
Detects exception requiring judgment
Clear match Continues automatically
Ambiguous Routes to human via Slack
Human decides
Agent resumes with decision

Agent Capabilities

32 actions

Templates

6
  • Create Template Creates a WhatsApp message template on a channel and sets the Texter side behavior WhatsApp knows nothing about: the chat status applied once the recipient replies, the departments that may use it, an automatic reply and its routing. If no name is supplied Texter generates one, and it has to be read from the response because the next two steps key off it.
  • Create Or Update Template Localization Defines or replaces the WhatsApp facing content for one language, including header, body, footer, buttons and the example variable values Meta requires. It cannot be used on a template that has already been submitted, so a content change after submission means a new template.
  • Submit Template For Approval Submits a localization to WhatsApp for review. Approval usually completes quickly but can take up to a day, a template that breaks Meta's rules is denied, and Meta may approve a template while changing its category, most often from Utility to Marketing.
  • Update Template Changes the Texter side behavior of an existing template, including its internal title, post reply chat status, inbox or bulk usage, department access, automatic reply and reply routing. The template name and its Meta category cannot be changed.
  • Delete Template Permanently deletes a template. The deletion cannot be undone and the template can no longer be sent, so rebuilding it means going through localization and Meta review again.
  • List Templates Returns the templates available to the account with their localizations, approval status and category. Approved only by default; enable the unapproved option to see pending and rejected ones, which is the read that explains why a send is failing.

Template Subscriptions

4
  • Unsubscribe From Templates Opts a recipient out of template messages, per channel or across every WhatsApp channel on the project when the account is left empty. An unsubscribed recipient is skipped silently by the send path, which is why this is the control to use for consent rather than a filter on the sending side.
  • Resubscribe To Templates Opts a recipient back in. Every recipient is subscribed by default, so this is only needed after an opt out, and an opt out may have been the customer's own act rather than an administrative one.
  • List Unsubscribed Recipients Returns every recipient who has opted out across all channels on the project, each with their display name and international phone number.
  • List Unsubscribed Recipients For Account Returns the opt outs on one specific channel, for when consent needs reconciling per number rather than across the project.

Messaging

3
  • Send Template Message Sends an approved template, which is what reaches a recipient outside Meta's 24 hour window. Supplies variable values, header media, dynamic button payloads and CRM data to attach to the chat, and can optionally deliver as a plain session message instead when the window is still open, which does not consume a template.
  • Send Chat Message Sends a session message into an existing chat as text, as up to ten media attachments, as a button menu of up to three options, or as a selectable list. If the customer has not written in 24 hours WhatsApp blocks it and the request fails, and a template is then the only way through.
  • Get Chat Messages Returns a chat's message history, newest fifty first by default, narrowable to one bot session or paged backwards from a cutoff. The response also carries the timestamps of the first and most recent messages, which is what makes backward paging terminable.

Chats

6
  • Get Chat Returns one chat with its customer display name, channel and account, current status, assigned agent and department, unread count, bot state and last message preview.
  • Search Chats Finds chats by customer phone number, label, status or channel. Searching by phone number is the usual way to turn a customer into the chat id every other chat action takes.
  • Assign Chat Assigns a chat to an agent, a department, or an agent within a department, and moves it into Pending for them. The chat is identified by phone number or chat id, and the agent by user id, email or CRM identifier.
  • Resolve Chat Moves a chat to Resolved regardless of its current status, optionally sending the account's default resolution message to the customer first. After resolution the customer's next incoming message is routed back to the bot rather than to the agent who handled the conversation.
  • Update Chat CRM Data Writes CRM data onto a chat with an explicit merge strategy: a deep recursive merge by default, a top level assign, a full replace that discards what was there, or fill in the missing keys only.
  • Update Chat Properties Updates the customer's display name, a deep link to their record in your CRM, the CRM object itself and the external bot flag. Every field fully overrides its existing value, so a CRM object passed here replaces rather than merges. Toggling the external bot flag raises an event, which is the standard handover point to and from a bot running outside Texter.

Labels

6
  • List Labels Returns the inbox's labels with their ids, display names and colors. Label ids are what the chat labeling and chat search actions take.
  • Get Label Returns one label by its id, for confirming a label still exists before a flow writes it onto a chat.
  • Create Label Creates a label. The id you choose is what the labeling and search actions use afterwards, so it is worth picking something stable rather than generated.
  • Update Label Changes an existing label's display name or color. The id cannot be changed, and at least one of the two fields must be supplied.
  • Delete Label Permanently deletes a label and removes it from every chat that carried it, which means any routing or reporting keyed on that label stops matching.
  • Manage Chat Labels Adds labels to a chat, removes them, or replaces the whole set in one call. Replace All discards every label the chat already carries, so clearing labels deliberately is done with Remove and the chat's current ids rather than with an empty replace, which this action refuses.

Channels

2
  • List Channel Health Problems Returns the open problems on connected channels: send and receive impairment, rate limit warnings, misconfiguration and account suspension, each with a severity, the functionality it impairs and often a remediation instruction.
  • Resolve Channel Health Problem Marks a problem as handled so it no longer appears in the active listing. Texter rejects the call if it was already resolved, and marking something resolved that is not makes the alerting surface quietly untrue.

Files

1
  • Generate Public Media URL Turns a media file stored in Texter into a public read only link, which is what makes an attachment received in a chat reachable by an outside system. Without a time to live the link never expires, and generating a new link does not invalidate earlier ones.

Event Subscriptions

4
  • List Event Subscriptions Returns the project's event subscriptions and scenarios with their revisions, conditions and webhook actions. Subscriptions created through the API carry a recognizable name prefix, and the ones FlowRunner triggers create appear here alongside anything built in the Texter interface.
  • Activate Event Subscription Resumes a paused subscription, or reverts it to an earlier version of its logic by activating a specific revision.
  • Inactivate Event Subscription Pauses a subscription while keeping it and its history intact, which makes it the reversible alternative to deletion and the correct default when a subscription's owner is uncertain.
  • Delete Event Subscription Permanently removes a subscription and its entire revision history. Deleting one that a FlowRunner trigger created stops that trigger from firing, and the deletion cannot be undone.

Triggers

19 triggers

Event Triggers

19
  • New Message Fires for every new message in the project, incoming and outgoing alike, delivering the message with its chat. Use the incoming only variant when the flow should not see what your own agents and bots send.
  • New Incoming Message Fires when a customer sends a message. Texter filters out agent and bot traffic before dispatch, so nothing the flow itself sends can retrigger it, which is the property that makes an automated reply loop safe here.
  • Message Matching Text Fires when an incoming message matches a text expression you define, evaluated by Texter before the webhook is dispatched so the flow is never woken for messages that do not match. Expressions support and, or, not and parentheses, and a match is against the whole message text rather than a substring.
  • Message With Attachment Fires when an incoming message carries media, delivering the media details and the file id that Generate Public Media URL turns into a downloadable link.
  • Message Failed To Deliver Fires when an outgoing message fails, for example on an invalid number, a block, or a channel failure. The failure is reported by the provider, so the payload carries provider message identifiers rather than Texter's own and the message is matched through the chat's history.
  • Message Status Changed Fires on every status change of an outgoing message, from sent through delivered to seen, with an error populated only on the failure states. Like delivery failures it identifies the message by the provider's identifier.
  • Chat Unsubscribed From Templates Fires when a chat opts out of template messages, whether the customer replied with the opt out keyword or an agent removed them. The payload carries the opt out metadata including the bulk send it came from, which is how consent changes get mirrored into your own systems.
  • Chat Subscribed To Templates Fires when a chat opts back in, whether through the API, in Texter, or by the customer themselves.
  • Chat Assigned Fires when a chat is taken by an agent, delivering the agent alongside the chat, which is the moment to start counting handling time from.
  • Chat Pending Fires when a chat moves into Pending, meaning it is waiting for a human agent. This is the usual hook for queue alerting and for escalation timers.
  • Chat Resolved Fires whenever a chat is resolved, regardless of whether a bot or a human closed it.
  • Chat Resolved By Bot Fires only when a chat is resolved automatically with no human agent involved. Texter applies the filter itself, so the flow is never woken for agent resolutions.
  • Chat Resolved By Agent Fires only when a human agent resolves a chat, with the resolving agent on the payload. Useful for measuring what the bot could not close.
  • Chat Labels Changed Fires whenever a chat's labels are updated and delivers the full diff: the previous set, the labels added and the labels removed.
  • Specific Label Added To Chat Fires only when one particular label is added, filtered by Texter before dispatch, which is how a single escalation label becomes its own workflow without a flow filtering every label change.
  • External Bot Enabled Fires when a chat's external bot flag is switched on, which is the standard handover point for passing a conversation to a bot running outside Texter.
  • External Bot Disabled Fires when the flag is switched off, which is the standard signal that an outside bot has handed the conversation back.
  • Channel Health Problem Created Fires when Texter detects a new health problem on a connected channel, naming the affected channel and account, its severity and the functionality it impairs. This is the alert that arrives before message delivery degrades unnoticed.
  • Channel Health Problem Resolved Fires when a previously detected problem is resolved, with its resolution timestamp populated, which is what closes out an alert raised by the creation event.

Frequently Asked Questions

What can FlowRunner do with Texter?

FlowRunner agents can run Create Template, Create Or Update Template Localization, and Submit Template For Approval in Texter, plus 29 more actions.

Does connecting Texter to FlowRunner require OAuth?

No. Texter connects to FlowRunner with an API key, no OAuth flow required.

Can Texter trigger a FlowRunner workflow automatically?

Yes. Texter supports 19 triggers that can start a FlowRunner workflow automatically.

Start building with Texter

$100 in credits. No card required. Connect in minutes.