Everything this service exposes, and the real status of each building block. The badges below are not written into the page: they are read from the running service on every load.
/api/etat/services, which reports the
configuration actually loaded. If the call fails, the badge reads “status not
verified” — never an assumed availability.
The core of the product: the same engine drives both the voice channel and the written channel. A separate “web” engine would have drifted, and the pricing guardrail would have ended up covering only one channel out of two.
A complete decision tree: opener, qualification, pitch, objections, slot proposal, booking. Two sentences maximum per turn, and it never talks over the other person.
A deterministic filter inspects every sentence before it is spoken and replaces any amount, discount or offer of free service with an approved reply. A prompt is not enough: an instruction can be ignored by a model, a filter cannot.
Applies to both channels, voice and written.
Exactly one turn is delegated to a model: the empathic rephrasing at the qualification step. The model runs locally, and falls back to the scripted reply if generation exceeds its deadline.
Measured median ≈ 1.1 s.
“Do not call me again” is handled before anything else, even before a question asked in the same sentence, and adds the number to the opt-out list (Moroccan law 09-08 / CNDP). No follow-up ever happens.
Human request: contact@nextdata.ma
Speech recognition, synthesis and the language model all run on our own infrastructure, with no third-party service: no conversation data leaves it.
Piper, French voice, ≈ 40 ms per reply. That is the voice you hear on the demo: the audio clips are produced by the engine, not recorded by a voice actor.
faster-whisper on CPU, ≈ 335 ms. Loaded lazily: the service starts even if the model is missing, and the incident shows up in the status rather than at boot.
Model base — the larger model was ruled out by
measurement: twice as slow, no gain.
The business logic is complete and tested end to end; the carrier is not. Commercial voice-over-IP outside a licensed carrier is prohibited in Morocco (law 24-96), so the connection goes through a local carrier — consultation under way.
Until then, no call is placed.
Two simultaneous calls by default. The cap is deliberate: recognition and synthesis use CPU for the whole duration of a call, and the server hosts other services.
One refused call beats three degraded ones.
The same conversation, typed: the channel open to subscribers while telephony is being connected. Access is a signed link sent by e-mail after subscribing — there is no password to remember.
An accepted meeting triggers an ICS invitation (RFC 5545) with an “Add to calendar” button. The chain has been validated in real conditions.
The send is explicit: nothing is announced as booked without being booked.
Recurring payment, signature-verified payment notification, append-only sales ledger and automatic delivery of the access link. Entitlements are recomputed on every read, never frozen.
Three replayed calls — meeting booked, price objection, opt-out request. These are transcripts produced by the state machine, not examples written by hand.
Two entry points are open without authentication. They return no personal data, no binding amount and no secret.
| Endpoint | What it returns | Used by |
|---|---|---|
GET /api/etat/services |
The status of every service above, as booleans. No key, no path, no address. | This page, and any external monitoring. |
GET /api/acces/offre |
The plans and their price labels. The amount shown is indicative: the only binding one is on the checkout page. | Both sales pages, French and English. |
Other endpoints are not public: placing a call is restricted to the machine itself and protected by a token, the workspace requires a signed link, and payment notifications are accepted only with a valid signature.
The details are in the privacy policy.