Every call, written.
A call ends. Somebody meant to write it up. Nobody did. callintel reads the finished call off your 3CX and writes the record for them.
Ask for a pilot- Works from 3CX Pro upwards
- No change to a dial plan
- Nothing in the media path
Prospect queried renewal pricing and asked for it in writing.
- Caller
- Jane Wanjiku, Finance Manager at Riverside Dental
- Discussed
- 3CX annual renewal, 8 simultaneous calls
- Objection
- Thinks the renewal is dearer than last year
- Price quoted
- KES 48,000
- Commitment
- Agent will send a written quote
- Next action
- Send renewal quote (by 9 October)
- Sentiment
- neutral
Written from 3CX call rec:4821.
Matched an existing contact on +254 722 000 111.
From hangup to record
Three things happen after the caller hangs up. None of them can reach the call itself, because by then there is no call to reach.
First, the PBX hands over the call it just finished.
POST /api/3cx/journal
callType Inbound
number +254722000111
agent 102
duration 00:05:39
recordingUrl /media/4821.wav
transcription (empty on this licence)Nothing here touches a live call. Every step happens after the caller has hung up, so the worst thing this can do is write a note late.
Then it works out whose record this is.
the PBX sent +254722000111
your CRM holds 0722 000 111
verdict one person, one recordA number nobody has becomes a new lead. It is never attached to the nearest similar record, because a call filed against the wrong customer is worse than a duplicate.
And a week of them reads as one thing.
- Objections raised
- Renewal price, 31. Handset supply, 12. Contract length, 7
- Promised and not yet done
- 9 quotes committed to, 4 past the date given
- Calls from numbers nobody held
- 23, every one now a lead
- Sentiment
- Negative on 11, all of them about renewal price
No tier of 3CX produces this. It scores one recording at a time and adds nothing up.
One person, two records
Your agent types a number the way anyone in Nairobi writes it. The PBX sends it the way the network does. Nothing in an ordinary CRM reconciles the two, so one customer quietly becomes several, and the call history you wanted to read is split across all of them.
callintel treats these as one person, and these too:
It is the least glamorous thing here and the one that decides whether anybody trusts the rest.
When itbreaks
An operations company judges a system on its failure modes, not its happy path. So here they are. Each line has a test behind it.
Where a person still decides
Anything the system is unsure of stops before the CRM and waits. This is the queue a supervisor works, and it is usually short.
- Held back because
- A price was quoted, and no currency came with it
- Heard as
- “we can do forty eight for the year”
- Written if approved
- Price quoted: 48,000, currency to confirm
A money figure without its currency misleads whoever reads it next, so it never goes in on a guess.
3CX Admin Console Integrations > CRM
template callintel.3cx.xml
scenario ReportCall
fires when a call ends
installs in about five minutesAnswers
Which 3CX licences does it work with?
It reads calls through 3CX's own CRM integration, which is included from the Pro tier. It does not need the Configuration API, which sits on Enterprise and AI Edition and is out of reach for most installed systems.
Where a system already transcribes its own calls, callintel uses that text and skips its engine, so those customers cost less to run.
Does it sit in the middle of our calls?
No, and it is built so that it cannot. It reads a call only once the call has ended. There is no session border controller, no change to a dial plan, nothing in the media path. If every part of it stopped at once, your phones would not notice.
Where does the audio go?
Where a call needs transcribing, the audio is sent to ElevenLabs, which runs in the United States. That is worth knowing before you put this in front of a bank.
The engine sits behind an interface with one job, so a self-hosted one can replace it for a customer whose data has to stay in the country. We keep the transcript and never keep the recording.
What happens to a call it cannot read?
It still gets written. A missed call from a number nobody has is the single most valuable thing this system sees, and it is recorded as a missed call rather than dressed up as a conversation.
Will it put things in our CRM that are not true?
It leaves a field blank rather than filling it. A model that answers “unknown” or “not applicable” writes nothing at all, and anything it is unsure of waits for a person instead of reaching the record.
A confidently wrong fact about a customer is worse than a blank field, because nobody downstream can tell that it is wrong.
Which CRM does it write to?
The adapter is deliberately thin, and the rest of the system does not know which CRM is on the other side of it. Adding one is a small piece of work rather than a rebuild.
Every call, written.
A pilot runs on one customer's system, on the licence they already hold. Tell us which 3CX to point it at and what their CRM is.
Talk to us about a pilotsimon@velocitystack.xyz