Lead types
Who is writing and what they want: free work for equity, no budget, a sales pitch. Discard the ones you do not want with a rule.
Every message and every conversation comes back with leads: what kind of lead
is writing, scored per type from 0 to 1. It is for contact forms, inboxes and marketplaces
that want to know who is on the other side before spending time on them, and to discard the
ones they do not want with a rule.
{
"decision": "block",
"scores": {},
"leads": {
"free_work_for_equity": 0.9,
"no_budget": 0.7,
"scope_creep": 0.7
}
}
The types
| Type | What it looks like |
|---|---|
free_work_for_equityFree work for equity | "I have an idea, you build it and get a small share of the company, no pay for now." |
no_budgetNo budget | "We don't have a budget, could you do it for free? It would be good for your portfolio." |
unrealistic_expectationsUnrealistic expectations | "An app like Uber, something simple, in a week." |
free_consultingFree consulting | A requirements document asking for the full architecture, estimates and total cost of ownership, with no budget given. |
scope_creepScope creep | "It is an open proposal, it may change. We would also need this. Here are more documents." |
no_showNever turns up | "Sorry I missed the call, can we reschedule?", again and again. |
sales_pitchSales pitch | An agency or vendor selling to you: services, a special offer, "book a call". |
partnership_offerPartnership offer | "We would like to become partners, there are synergies." |
job_seekerJob seeker | "Attached is my CV in case you have openings." |
student_or_surveyStudent or survey | "I'm a student writing my thesis, could you answer a few questions?" |
support_requestSupport request | "My invoice did not arrive, my order number is 1234." |
How a type is scored
Each type is a few families of phrases, in English, Spanish, Portuguese, French, Italian, German, Catalan and Dutch. One family on its own is how honest people talk: "I have an idea" is how good projects start, and "free" is in every shop window. So one family scores 0.45, two score 0.70 and three or more score 0.90. A rule around 0.6 acts on the shape and not on a word.
A phrase does not have to be written the way the list writes it. Its meaningful words count when they appear close together, in any order and with any ending, so "you build it" is also found in "it would be built by you". Negations are never dropped: "no budget" is not found in "we have a budget".
- Never turns up is counted per message, not per phrase: moving a call or apologising for missing one happens to everybody once, twice is a pattern, three times is somebody who never turns up. Only their own messages count, so being stood up yourself is not a lead type.
- Several types at once. The same person is often more than one, and each type gets its own score.
- The whole conversation. Send it to
/v1/conversationand everything the author of the last message has said counts, because nobody asks for free work in one sentence. What the other side said is theirs. - What keeps it honest. "Salary plus equity" is a job, not free work for equity. A request for proposal that states a budget is a real one. A buyer asking what a website would cost is never a sales pitch.
- Pressure counts. Years without pay, "you only care about money" or blaming earlier providers raise the two types about money when they are already there.
Discarding a type
A type decides nothing until you give it a line. On a policy, add a rule When: The lead is, pick the type, and choose block or review. Or send it with a call:
"rules": { "leads": { "free_work_for_equity": { "block": 0.6 }, "sales_pitch": { "review": 0.6 } } }
With the model
When the call uses the model ("ai": true), it reads the whole conversation, with
who said what, and scores every type for the author of the last message, judged against the
description of what your business does on the policy. Its scores and the phrases' are merged,
and the higher one wins per type: the phrases catch what is said in their words, the model
catches the rest. It is the same model call as the rest of the verdict, not a second one.
- In a conversation the model reads when it adds something: when the free checks found something, when a type is half there (between 0.45 and 0.70), and every fifth message, when it reads the whole thread again. Every new message is a new call, and reading all of them would make a forty-message thread forty model calls. A single
/v1/textcall is read whenever you ask. - What is sent. The most recent part of the conversation goes to the model provider with the last message. Nothing of it is stored here.
A clean answer means "nothing recognisable", not "a good client". Without the model, a lead that asks for the same thing in words no list has scores lower.