FlowRunner
PricingContact
Theme
Start Free

Place outbound phone calls and run an auto dialer with telli AI voice agents, managing contacts and their typed custom properties. Agents call from live pipeline data and log the outcome.

1 trigger 25 actions API key available
Platform Documentation ↗ Capability data verified 2026-08-01
On Call Ended fires with status Voicemail after an auto dialer attempt
Agent reads Get Call for the transcript, the end reason and any data the agent collected
Agent reads the contact's prior attempts and the account's configured dialing window
Agent confirms the contact's consent property is still set with Get Contact before proposing anything
Agent runs Remove From Auto Dialer where the outcome says to stop calling entirely
Agent posts the transcript summary, the local time at the contact's number and the proposed immediate retry
The rep authorizes an out of window Initiate Call, or leaves the contact on the normal schedule

What This Integration Enables

The interesting part of telli is not the voice agent, it is the contact model behind it. Every custom field is declared on the account as a contact property with a key, a data type, a label, a description and, for select properties, a fixed option list. Writes are validated against that schema, so a contact cannot be created carrying a property that does not exist or a select value that is not allowed. Contacts also carry your own external identifiers, which means the CRM record stays the key and telli never becomes a second source of truth you have to reconcile.

That discipline is what makes telli safe to drive at volume. FlowRunner agents load contacts in batches of up to 1000, schedule up to 50 calls in a single request, and read every entry's success or failure independently, because partially successful batches are expected rather than exceptional. Calls are asynchronous: scheduling one returns a loop ID that groups the attempts. On Call Ended then fires when a call reaches a finished state, carrying the transcript, the terminal connection status, the reason it ended, any data collected during the conversation, a booked appointment slot, transfer details, and a recording URL present only when both parties consented. An agent can route follow-up by exactly how a call ended, which is the difference between an auto dialer and a workflow.

Without FlowRunner

List fields are free text Nobody can tell whether a contact's industry field says "SaaS", "saas" or nothing at all
Follow-up routed by hand Voicemail, busy and no answer all land in the same undifferentiated queue
Urgency has one setting A hot lead waits for the next dialing window, or someone calls at an hour they should not have

With FlowRunner

Contact data is typed and validated Every custom property is declared with a type and a label, and writes are checked against it
Follow-up routed by end reason Voicemail, busy, no answer and agent forwarded each take a different path
Out of hours calling is a decision Overriding the dialing window happens when a person says it should, not when the agent guesses

Use Case Scenarios

A new lead becomes a scheduled call without a human touching the list

A form is submitted or a record is created in HubSpot. The agent reads List Contact Properties first, because keys are validated against the account schema and guessing them fails the write. It then runs Create Contact with the name, phone number and the typed properties the schema declares, and Schedule Call against the right agent from List Agents. Left without a schedule time, telli places the call at the earliest opportunity inside the account's dialing window, which may be immediately or on the next business day. That default is the correct one for almost every lead, and it means the agent does not have to reason about business hours it cannot see.

A bulk list loaded honestly, with the failures visible

A campaign list arrives from the CRM. Add Contacts Batch loads up to 1000 contacts per request, each requiring an external contact ID, first and last name and phone number, and Schedule Calls Batch schedules up to 50 calls at a time, each with its own agent, caller ID and retry window. Both return per-entry results rather than a single pass or fail, so the agent collects the loop IDs for the entries that succeeded and the error message and code for the ones that did not. Failed entries are written back to the source record with their reason instead of disappearing into a total. A list of 4,000 that loads 3,912 contacts is reported as exactly that, with the 88 named.

A data request handled in the right order

Someone asks to stop being called, or asks to be erased. These are two different requests and telli treats them differently, so the agent does too. Remove From Auto Dialer stops further attempts while keeping the contact record and its history, which is the correct and safe response to "stop calling me". Delete Contact anonymises all personal data held against the contact, is rejected while the contact has pending or active calls, and cannot be walked back. So the agent runs Remove From Auto Dialer immediately, confirms with Get Contact that no calls are pending, and then stops, posting the erasure request to whoever owns data requests. A person confirms the deletion. The stop is instant; the erasure is deliberate.

Human-in-Loop Highlight

Initiate Call is the operation this connector gates, and it is gated because telli built it as an override. Schedule Call respects the account's dialing window and business hours. Initiate Call deliberately does not: it places the call straight away, outside business hours and outside the configured window, and telli's own guidance is to prefer Schedule Call for normal use. That makes it the single most consequential thing an agent can do here, because the cost is not billing, it is a phone ringing in someone's house at an hour your company chose.

The flow that hits this moment is a familiar one. A high-intent signal arrives late, a demo no-show or a pricing page visit from an account in negotiation, and the agent can make a strong case that calling right now is worth more than calling tomorrow. It does not make that call. It posts to the rep: "Anders Vinter, Nordwind Logistik, viewed pricing twice and abandoned the demo booking 6 minutes ago. Local time at +49 30 123456 is 20:41, which is outside the dialing window. Initiate Call now, or schedule for 09:00 tomorrow?" The rep knows this account and answers in one tap. If nobody answers the question, the contact stays on the normal schedule, because the default when a person is unavailable should never be the more aggressive option. That is the digital andon cord in a sales context: the agent recognised it had reached the edge of its own authority and stopped the line rather than crossing it.

Agent processes routinely
Detects this moment is a familiar one
Clear match Continues automatically
Ambiguous Routes to human via preferred channel
Human decides
Agent resumes with decision

Agent Capabilities

25 actions

Contacts

10
  • Create Contact Creates a contact telli agents can call, storing the name, phone number and any typed custom properties declared on the account. Properties are validated against the account schema, so each key must already exist. Returns the telli contact ID that the call and auto dialer actions take.
  • Add Contacts Batch Creates up to 1000 contacts in one request. Each requires an external contact ID, first name, last name and phone number, and may carry free-form custom variables passed to the agent during the call. The response reports per-contact success or failure alongside totals, so partially successful batches are expected.
  • Get Contact Returns a single contact by its telli contact ID with the name, phone number, timezone, external identifiers and every custom property with its data type and label. Used to read current stored state before scheduling or updating.
  • Get Contact By External ID Returns a contact using your own external identifier rather than the telli ID, with the same full record as Get Contact. Used to resolve a CRM record without storing the telli ID on your side.
  • Get Contacts Batch Returns up to 1000 contacts in one request by their telli contact IDs. Each entry is marked success or error independently, so unresolved IDs do not fail the whole request.
  • List Contacts Returns a cursor-paginated page of contacts with their full property set. The endpoint offers no search or filter parameters, so narrowing by name or number is done after retrieval or through Get Contact By External ID.
  • Update Contact Updates selected fields, leaving anything omitted untouched. Custom properties are merged into the existing set after validation, so only the keys sent are changed.
  • Replace Contact Fully replaces a contact. Every omitted optional field is reset to null and the property set is replaced rather than merged, which removes any custom property not included. Update Contact is the right action for partial changes.
  • Update Contacts Batch Updates up to 1000 contacts in one request, each identified by its telli contact ID. Only supplied fields change, except contact details, where the entire object is overwritten. Each contact is marked success or error independently.
  • Delete Contact Deletes a contact and anonymises all personal data held against it. Rejected while the contact has pending or active calls, so the contact is removed from the auto dialer first. Use Remove From Auto Dialer to stop calling without erasing.

Calls

5
  • Schedule Call Schedules an outbound call from the selected agent. Without a schedule time the call is placed at the earliest opportunity inside the account dialing window, which may be immediately or on the next business day. A supplied time places the call at that exact future UTC moment, up to 90 days ahead, and can optionally bypass the dialing window. Returns the loop ID grouping the attempts.
  • Schedule Calls Batch Schedules calls for up to 50 contacts in one request, each with its own agent, caller ID, retry window and optional exact time. Every entry is processed independently, returning a loop ID for the successes and an error message and code for the failures.
  • Initiate Call Places an immediate outbound call, dialing straight away even outside business hours and outside the configured dialing window. telli recommends Schedule Call for normal use, which is why flows hold this one behind a human decision. If the contact is not reached and the auto dialer is enabled, telli keeps retrying under its settings.
  • Get Call Returns the full record of a call with the contact it reached. The payload carries lifecycle state, terminal connection status, reason it ended, timestamps, duration, plain text and structured transcript, agent analysis and outcome fields, data collected during the conversation, any booked appointment slot, transfer details, and a recording URL present only when both parties consented.
  • List Calls Returns a cursor-paginated page of calls newest first, narrowable to a single contact or a single agent but not both. Each item is a lean payload without the separate contact object, so Get Call covers the cases that need the full record.

Auto Dialer

2
  • Remove From Auto Dialer Removes a contact from the auto dialer so telli stops placing further attempts. The record and its history are kept, which makes this the correct response to a request to stop calling rather than a request to be erased.
  • Remove From Auto Dialer Batch Removes up to 50 contacts from the auto dialer in one request. Every contact is processed independently and marked success or error with its own message.

Phone Numbers and Agents

3
  • List Phone Numbers Returns every number on the account with its E.164 form, whether it sits in the outbound pool, its line type and when it was added. Only numbers in the outbound pool are accepted as the caller ID when scheduling or initiating a call.
  • List Agents Returns a cursor-paginated page of the voice agents on the account with ID, title, language and creation time. Agents are created and configured in the telli dashboard, so this API exposes them read-only.
  • Get Agent Returns a single voice agent by ID. Used to confirm an agent exists and speaks the expected language before scheduling calls against it.

Contact Properties

4
  • List Contact Properties Returns the contact property schema for the account: every property with its key, data type, label, description and, for select properties, the allowed options, marked as system, user or integration defined. Read this before creating or updating contacts, because custom keys are validated against it.
  • Create Contact Property Adds a custom property to the account schema so contacts can carry it as typed data. Keys must start with a letter or digit and may then contain letters, digits, underscores and hyphens, up to 64 characters. Options only apply to the Select and Multi Select types.
  • Get Contact Property Returns a single property by key with its data type, label, description, source and allowed options. Used to check the expected shape before writing values to it.
  • Update Contact Property Updates the label, description or option list of an existing property. The key and data type are fixed once created. Removing an option already in use is rejected, as is any change to a system-defined property.

Account

1
  • Verify API Key Checks that the configured key is accepted by telli. Used as a lightweight connection test at the start of a flow before any calling operation runs.

Triggers

1 triggers

Event Triggers

1
  • On Call Ended Fires when a call reaches the selected lifecycle state, emitting the call record with its connection status, the reason it ended, duration, transcript, recording URL and any data the agent collected. telli has no webhook registration API, so this trigger polls the calls endpoint. It can be narrowed to a single agent, and to a connection status such as Connected, Not Connected, Voicemail or Failed, or an end reason such as Agent Forwarded Call or Contact Did Not Answer. The first poll records a baseline without firing, so existing calls are not replayed.

Frequently Asked Questions

What can FlowRunner do with telli?

FlowRunner agents can run Create Contact, Add Contacts Batch, and Get Contact in telli, plus 22 more actions.

Does connecting telli to FlowRunner require OAuth?

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

Can telli trigger a FlowRunner workflow automatically?

Yes. telli supports 1 trigger that can start a FlowRunner workflow automatically.

Start building with telli

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