Telfy  /  Why it works

Built for real phone lines,
local languages and real rules.

How the agent places a call, answers fast enough to feel human, refuses to guess, and keeps your data where you control it.

DeutschاردوEnglishسنډي+ regional languages
01

The call, end to end

Seven stages from your list to your dashboard. The middle three overlap in time, which is why the agent answers like a person instead of a phone menu.

01

Lead received

From your form, sheet or CRM export, with the time the person chose.

02

Outbound call

Placed on a local SIM at the chosen time. Retried on its own if unanswered.

03

Voicemail detection

Checked before the script starts. The agent never talks to a mailbox.

04

Speech to text

Streams while the caller is still speaking, tuned for phone audio.

05

Language model

Replies on partial text and fills one answer field at a time.

06

Text to speech

Starts on the first sentence. Fixed lines are pre-recorded.

07

Outcome recorded

On your dashboard the same day, with transcript and recording.

Stages 4 to 6 run at the same time
02

Fast enough to feel like a conversation

Seconds from the caller’s last word to the agent’s first, median call. Speech recognition, the model and the voice run as overlapping streams, so the reply starts before the caller’s sentence has been fully processed.

In the pipeline
STT 0.5
Model 1.0
Voice 0.7
1.8 s
At the handset
Pipeline 1.8
Carrier
2.5 s
0 s1 s2 s3 s4 s

Pipeline p95 is 2.6 s. The mobile network adds its own legs, two carrier hops, the gateway and the SIP buffers, about 0.6 to 1.0 s, so a real call lands near 2.5 s at the handset.

03

Empty beats wrong

A guessed answer becomes a booking nobody agreed to, a wrong quote or a wasted trip. So every answer field is optional, and an empty field is a valid result.

The rule, in the schema

class SurveyCall(BaseModel):
    identity:       Literal["confirmed", "wrong_person"] | None = None
    appointment:    datetime | None = None
    roof_area_sqft: int | None = None   # empty is a valid answer
    monthly_units:  int | None = None   # a guess is not

# "The plot is 400, only part of it is built"
# -> roof_area_sqft = None, re-ask once in different words
# -> still unclear: hand the call to a person with the transcript

How it plays out

  1. One structured-output call per question, validated against the schema.
  2. A reply that fails validation is retried once, with the error.
  3. An unclear answer leaves the field empty, and the agent asks again in different words.
  4. Still unclear: the call goes to a person, with the transcript attached.
0wrong extractions allowed. One blocks the release
Emptyis a valid answer. The agent asks again instead of guessing
04

Languages, tested on the phone, not in a studio

Each language is a pack: the script, the pre-recorded fixed lines, the recognizer that does best on that language, and a test set of real 8 kHz phone recordings. Adding a language does not change the engine.

Deutsch

German. Site visits and appointments.

اردو

Urdu. Tested on phone audio before any script is written.

English

English. Orders and confirmations.

سنډي

Sindhi. Delivery and reminders.

Regional languages

Built on request. Each one passes the same phone-audio test before a script is written.

If the error rate on real phone recordings is too high for your use case, we tell you before you pay for a script.

05

Telephony that customers pick up

Local numbers

Calls go out through a GSM gateway with local SIMs. Customers see a local number they recognise, and answer it. A local SIM minute costs a small fraction of an international carrier minute, which is most of the saving against managed platforms.

Rules you set

  • Calling hours and days.
  • How many times an unanswered lead is retried, and how far apart.
  • Which answers book automatically and which go to a person.
  • Two concurrent lines per gateway as standard, more on request.
06

Tested like software, stage by stage

Every stage has its own test set and its own number. Every failure seen in testing becomes a new test case.

StageTest setMeasuredResult
Speech recognition25 to 30 phone recordings per language, 8 kHz, hand-transcribedWord error rate per recognizerA go or no-go gate before any script is written
Answer extractionReplies with known answersCorrect, empty, incorrectCorrect or empty. One wrong extraction blocks the release
End-to-end callA synthetic caller with a known outcomeStored outcome matches the expected oneRuns live against the real services
LatencyStreamed-turn test from PakistanSeconds to first word, median and p951.8 s median, 2.6 s p95, plus carrier legs
RegressionThe full suite, plus every failure seen in testing as a new casePass or fail before releaseOffline and live tests, on every change

Next on the list: scoring conversation quality with a model against a written rubric, with a person reviewing a sample every week.

07

Privacy and control

Disclosure

First sentence of every call

The caller hears it is an automated assistant before anything else is said.

Data

Stays in your cloud

Recordings, transcripts and outcomes live in your cloud account. Recordings are kept 90 days by default, and you can change that.

Training

Your calls train nothing

Nothing from your calls is used to train any model.

People

A person is always reachable

Unclear answers, upset callers or anything off-script go to your team with the transcript attached.

Audit

Every attempt is logged

Who was called, when, how many times, and what they said, in stereo recordings and searchable transcripts.

Recovery

Fails safe

If a service is down, the call is not placed and the lead is rescheduled. Nothing is dropped.

08

What it will not do

The limits are part of the product.

Pretend to be a person

It says it is automated, every time.

Book what was not agreed

No inferred yes. An unclear answer is asked again or handed over.

Take payment details

No card or bank numbers on a call, ever.

Negotiate or pressure

Prices, terms and disputes go to your team.

Next step

See it on your
own phone line.

A short demo call in the language you choose, then a walk through the transcript, the extracted fields and the outcome.