Textline
MessagingConnect AI agents to Textline, a shared business text messaging inbox. Agents message and resolve conversations, schedule messages and announcements, send NPS and CSAT surveys, and manage contacts and agent availability so customer texting stays fast and accountable.
What This Integration Enables
Textline is a shared business texting inbox, and the thing that shapes every flow built on it is that the department, not the message, is the sending identity. A department owns a phone number, outbound messages are scoped to one, and there is consequently no sender parameter anywhere in this connector. Everything is picker backed off real read routes: departments, agents, dispositions, surveys, saved searches and custom fields all come from the account rather than being typed as free text. That is worth more than it sounds. In a category where the sender field is usually a string nobody validates, an integration that cannot address a number the account does not own removes an entire class of silent failure.
The second structural fact is the split between what the customer sees and what the team sees. Textline models an internal whisper as a first class post on the same conversation, so the context an agent needs and the message the customer receives live in one thread rather than in two systems. This connector ships message and whisper as distinct actions with distinct bodies even though the vendor dispatches both from one path by which body key is present. The discriminator is asserted per action, because a whisper that lost its key would be delivered to the customer as a billed message. The same care applies to announcements, which are a billed mass send with a three way selector where exactly one of tag, saved search or explicit numbers may be used. An empty selector would broadcast to the whole address book, so every empty and mismatched selector is refused before any request is issued and exactly one recipient key is ever emitted.
Two access facts belong in any evaluation. API access requires a Standard or Pro plan, and on a lower plan every call fails authentication rather than degrading. And the token inherits the permissions of the person who issued it, so a low permission agent token yields a partial surface and an empty read is not necessarily a defect. There are no triggers here for an unusual reason: Textline documents its webhook payloads fully, with seven event types, complete sample bodies and a signature scheme, and publishes no route at all for subscribing. Documented payloads are worthless to a trigger that cannot register its own callback URL, so the honest answer is polling, and List Conversations Report sorted by update time is the natural surface. Failed sends and unreachable contacts surface as automation exceptions rather than as messages that appear to have gone out.
Without FlowRunner
With FlowRunner
Use Case Scenarios
Context assembled before a person opens the thread
A customer texts about an order. On the next poll the agent sees the conversation, calls Retrieve Contact By Phone Number for tags, custom fields and reachability, pulls the matching order from Shopify and the subscription state from Stripe, and writes all of it into the conversation with Whisper Conversation. Nothing reaches the customer and nothing is billed, because a whisper is internal by construction. Then Transfer Conversation assigns it to the agent who owns that account. The person who opens the thread sees the customer's message and the research already sitting under it, which is the difference between an agent starting a conversation and an agent continuing one.
A survey that goes to the right people and comes back somewhere useful
Support wants NPS after resolution rather than on a monthly schedule. List Surveys returns the configured surveys with their identifiers, and Send Survey delivers to contacts selected by exactly one of a tag, a saved search or an explicit list. Because this is a real billed message to every selected contact, the selector matters as much as the survey does, and an empty one is refused before the API is contacted rather than broadcast. List Survey Responses then returns each rating with its category and any free text follow up, and the detractors go into Slack as individual items with the conversation history attached rather than into a dashboard nobody opens.
Availability driven from the schedule rather than from memory
Turn On Agent Availability and Turn Off Agent Availability mark an agent as on or off call, which decides who is eligible for conversation assignment and routing. An agent reads the shift schedule from Google Sheets or the workforce system and drives availability from it, so coverage reflects the roster rather than who remembered to toggle a switch. One behavior to design for: turning availability off does not reassign existing assignments, so a flow that hands over a shift also needs to move the open conversations, which Transfer Conversation does by agent identifier or email address.
Human-in-Loop Highlight
The gate on Textline is Set Contact Consent, and it exists because this vendor ships both halves of the consent problem side by side and only one of them is provable. Request Contact Consent sends a real, billed text message asking the contact to opt in, which produces an auditable exchange with a timestamp and the customer's own words in it. Set Contact Consent records the decision directly without messaging anybody, for consent captured elsewhere, on a web form, at a counter, over the phone. The first is evidence. The second is an assertion, and an assertion written into a compliance record is exactly the kind of thing that looks harmless at the moment of writing and decisive at the moment somebody asks for proof.
An agent importing signups can do everything up to the assertion. It can read the form submission from Typeform, normalize the number, call Retrieve Contact By Phone Number to see whether a contact already exists and what its current state is, and check whether the number is already marked blocked or unreachable. What it cannot do is confirm that the person who ticked the box owns the number they typed. So it stops. Into Slack: "Form submission from [email protected] opts in to service texts on +1 415 XXX 2287. That number already exists in the address book under a different name and is currently marked unreachable. Set Contact Consent writes a consent record without messaging anyone. Write the record, or send Request Contact Consent to that number and let the reply be the evidence?"
Almost always the right answer is the second one, and that is the point of putting the gate here rather than on the send. The messaging itself runs unattended: replies, whispers, transfers, dispositions and scheduled follow ups are ordinary support work and an approval queue in front of them would only slow customers down. What waits for a person is the one action that changes a compliance fact by declaration. That is the digital andon cord placed on the assertion rather than on the ask, and it is what Orchestration as a Service is for: the volume is handled, and the record that somebody will one day have to stand behind has a person's decision behind it. One neighboring surprise deserves the same care and gets it in its own description: Request Contact Consent sends a billed text despite its administrative name, so a well meaning consent hygiene sweep across an address book is a mass send in disguise.
Agent Capabilities
36 actionsConversations
7- List Conversations Lists conversations newest activity first, optionally narrowed to one department or filtered by keyword, each entry carrying the contact, the department and the most recent posts. Pages are zero based here, which is the opposite of most gateways, and a page holds at most fifty.
- Retrieve Conversation Retrieves one conversation with its posts. The post window can be bounded by lower and upper post identifiers, which is the efficient way to fetch only what has arrived since something already processed.
- Retrieve Conversation By Phone Number Retrieves the conversation belonging to a phone number, which is the lookup to use when the flow knows the customer's number but not the conversation. On an account with several departments, name one to disambiguate.
- Import Message As Contact Records a message into a conversation as though the contact had sent it inbound. Nothing is transmitted to anyone, which makes this the way to migrate history from another system or to log a message that arrived by another channel so the thread stays complete.
- Resolve Conversation Marks a conversation resolved and closes it in the inbox, optionally attaching a disposition that records why. The disposition is what feeds resolution reporting, so resolving with one is the difference between clearing a queue and producing data.
- Transfer Conversation Transfers ownership to another agent, named either by identifier or by email address, who then becomes the assignee in the inbox.
- List Dispositions Lists the dispositions configured for the account, optionally narrowed to one department. These are the resolution reasons an agent picks, and their identifiers are what the resolve action accepts.
Messaging
7- Message Conversation Sends an outbound text into an existing conversation, visible to the contact, with attachments given as publicly reachable URLs that Textline fetches itself. It can mark the conversation resolved in the same call. This sends a real, billed message.
- Whisper Conversation Adds an internal note to an existing conversation. A whisper is visible only to agents and is never delivered to the contact, so it costs nothing and is the correct place for context assembled from other systems.
- Message Phone Number Sends an outbound text to a phone number, opening a conversation if none exists. This sends a real, billed message.
- Whisper Phone Number Adds an internal note to the conversation belonging to a phone number, creating the conversation if none exists, without anything reaching the contact.
- Message Group Conversation Sends one message to several contacts as a single shared thread, for departments configured for group messaging, where every recipient sees the same conversation. This is not a broadcast to individuals, and it sends real billed messages to every number listed.
- Schedule Message To Conversation Queues a message into an existing conversation for a future time. The message is billed when it sends rather than when it is scheduled.
- Schedule Message To Phone Number Queues a message to a phone number for a future time, opening a conversation if none exists, and billed at send time.
Announcements
3- Send Announcement Sends one message to many contacts as individual conversations, selected by tag, by saved search, or by an explicit list of numbers. Exactly one selection method may be used and it must be non empty, because an empty one would broadcast to the whole address book. This is a billed mass send and cannot be recalled once dispatched.
- Send Announcement To Uploaded Contacts Sends an announcement to contacts supplied inline as an encoded CSV rather than to the stored address book, with the CSV's columns available as merge fields so each recipient can receive personalized text. Also a billed mass send that cannot be recalled.
- Schedule Announcement Queues a mass announcement for a future time with the same one selector rule. Scheduling does not lock the recipient set: a tag or saved search is evaluated at send time, so the audience can change between booking and dispatch.
Surveys
3- List Surveys Lists the surveys configured on the account with their type and identifiers, which is what the send and response actions take.
- Send Survey Sends a survey to contacts selected by exactly one non empty selector. This delivers real, billed messages to every selected contact and is queued for delivery immediately.
- List Survey Responses Retrieves the responses collected for a survey, each with its rating, category, any free text follow up and the contact who answered, narrowable by date.
Contacts
9- List Contacts Lists contacts with their tags, custom fields and reachability, narrowable by keyword across name, number and notes. Pages are zero based and hold at most fifty.
- Retrieve Contact Retrieves one contact by identifier, including tags, notes, custom field values and whether the contact is blocked, archived or reachable by SMS.
- Retrieve Contact By Phone Number Retrieves a contact by number rather than identifier, which is the lookup that decides whether a flow should create one.
- Create Contact Adds a contact to the address book, identified by phone number, with name, email, notes and tags optional. Creating a contact sends nothing and costs nothing.
- Update Contact Updates an existing contact, sending only the fields supplied. Tags can replace or merge with the existing set. Setting blocked or unreachable changes whether the contact can be messaged at all, which makes both fields consent relevant rather than administrative.
- Request Contact Consent Sends a text message asking a contact to opt in to receiving messages. Despite its administrative name this is a real, billed outbound message, and it is the path that produces evidence rather than an assertion.
- Set Contact Consent Records a contact's consent decision directly without messaging them, for consent captured elsewhere. This writes a compliance record, so setting it incorrectly has consequences that outlive the flow that wrote it.
- List Custom Fields Lists the address book's custom field definitions with their data types and identifiers, which are the keys an update expects, so this is the call that comes before writing custom values.
- List Saved Searches Lists the saved searches defined on the address book. A saved search is a stored filter over contacts, and its identifier can be used as the recipient selector for an announcement or a survey.
Account
5- Get Organization Details Retrieves the organization's name and optionally its full list of departments and agents in the same response, which is the cheapest way to fetch the account structure in one call rather than three.
- List Departments Lists the departments with the phone number each sends from, its type and its agents. A department is Textline's sending identity, which makes this the read that determines what number any send will present as.
- Get Agent Details Retrieves agents, or one specific agent by identifier or email, with their permission level, on call status and departments.
- Turn On Agent Availability Marks an agent as on call so they appear available and are eligible for conversation assignment and routing, which is how availability can be driven from a shift schedule.
- Turn Off Agent Availability Marks an agent as off call and removes them from further routing. Existing assignments are not reassigned by this call, so a shift handover needs to move open conversations as well.
Reporting
2- List Conversations Report Retrieves conversations for reporting, filtered by creation or update time and by resolved, archived or blocked state, sortable in either direction. A department is required, so a report covers one at a time, and this route includes archived and blocked contacts by default where the core listing does not.
- List Conversation Posts Report Retrieves the individual posts of one conversation for reporting, each carrying its author, whether it was an internal whisper, and whether it resolved the conversation.
Frequently Asked Questions
What can FlowRunner do with Textline?
FlowRunner agents can run List Conversations, Retrieve Conversation, and Retrieve Conversation By Phone Number in Textline, plus 33 more actions.
Does connecting Textline to FlowRunner require OAuth?
No. Textline connects to FlowRunner with an API key, no OAuth flow required.
Can Textline trigger a FlowRunner workflow automatically?
Textline doesn't currently expose triggers in FlowRunner. It connects as an action step inside workflows started by another trigger.
Start building with Textline
$100 in credits. No card required. Connect in minutes.