From Chat Inbox to Living Sales System
DeskcommCRM is the subject of this series: an open-source, self-hosted sales operating system in which AI agents and people work on customer demands arriving through WhatsApp. The question is not simply what features the repository contains. It is how a conversation becomes durable, owned, inspectable work—and how that work remains alive when a model, a worker, a channel, or a human reaches a limit. That distinction gives the reader a practical way to understand the product without reducing it to either a chat screen or a catalogue of AI claims.
A WhatsApp message is fleeting by nature. It arrives in a stream of personal conversations, often with incomplete identity, uncertain intent, and no obvious owner. A sales operation needs something different: a record that can be found, assigned, advanced, paused, resumed, audited, or deliberately closed. DeskcommCRM is built around that conversion. Its central promise is not that automation eliminates responsibility. It is that responsibility can be carried through a system rather than left inside one employee’s memory or one model session.
DeskcommCRM is more than a chat window
The project began as an operational CRM for Brazilian e-commerce, with WhatsApp and a Nuvemshop integration close to the center. Its current vision deliberately broadens that origin. The same core is intended for clinics, real-estate agencies, information-product businesses, agencies, stores, and service providers: any operation in which selling or supporting a customer happens through conversation. E-commerce remains an important vertical and the source of the default vocabulary, but it is no longer the definition of the product.
That change is visible in the product’s category. A conventional CRM usually records the progress of work after people have decided what to do. DeskcommCRM aims to make the system itself an active participant in that progress. An AI agent can use business knowledge, read conversation context, answer a customer, qualify interest, move a demand through a funnel, trigger an operational action, and request human involvement. A human attendant can take ownership, inspect the history, correct the course, or return a conversation to automation. The CRM is therefore not only a place where a sale is documented. It is part of the machinery through which the sale is conducted.
The word “operating system” should still be read carefully. It describes the relationship among the parts, not proof that every ambition is complete or that every business will get the same result. The repository contains current implementations, compatibility layers, design specifications, and roadmap items at different stages. Its strongest evidence is the behavior encoded in the current runtime and schema. Its positioning documents explain the direction and the product model. Keeping those categories distinct is essential: a system can have a well-defined architecture without having demonstrated every target outcome in production.
Self-hosting is part of this definition. The software is distributed under the MIT license without a paid feature tier, and the recommended production path places the application, workers, WhatsApp service, database connection, and operational secrets under the installer’s control. That changes the meaning of a product decision. A versioned update, a missing worker, a lost WhatsApp session, an unconfigured key, or a database backup is not someone else’s infrastructure concern. It can determine whether the customer’s sales operation continues. DeskcommCRM consequently treats the installed artifact and its recovery path as part of the product, not as packaging around it.
The real object is a demand that must not disappear
It is tempting to say that the CRM manages contacts. Contacts matter, but they are not the complete object. In DeskcommCRM’s domain model, a contact is the organization-scoped identity of a person; a conversation is the channel history between that person and the operation; and a lead is the durable business demand that can occupy a stage in a pipeline. Activities and links connect the demand to messages, orders, appointments, and other events.
This distinction explains why the conversation-to-lead relationship is so important. A person may write a first message before anyone has classified the opportunity. If the interaction remains only in a chat record, the demand is difficult for the funnel, risk radar, and follow-up mechanisms to see. The current lead-creation path addresses that gap deterministically: when an eligible contact has no open demand, the system places a new lead in the organization’s default pipeline and its first usable non-terminal stage. It does not create one card for every message. An open demand absorbs later messages; when it closes and the person returns with a new need, another demand can be created.
The exceptions are part of the meaning. A blocked contact should not become a fresh sales opportunity. A group conversation can be retained without becoming an individual customer demand. An ambiguous identity should not be silently merged with the wrong person. A missing default funnel or usable stage is a configuration problem, not a reason to pretend that the message never arrived. In each case, the system’s quality depends on naming the outcome and leaving a visible trail.
This is the background for the project’s “System Vivo” doctrine. A living system is not one that updates every screen instantly. It is one that takes responsibility for the full timeline of a demand until it is resolved or explicitly closed by the person involved. The doctrine turns that principle into practical questions: Who feeds this part of the system? What does it feed next? What activity or audit record does it emit? Where can a person see the result? What is the next step if the normal path fails? Where is the behavior configured? What signal returns from an error and changes what happens later?
Those questions make the product’s relationships more important than its feature count. A lead that is created but never appears in a usable view is not fully operational. A handoff that changes a status but provides no context merely transfers confusion. A follow-up that sends messages but leaves no outcome is a timer without memory. A model that answers fluently but never records what was promised can leave the operation looking healthy while the customer waits. Continuity is the standard that connects these cases.
The diagram is intentionally simple. It does not claim that every message follows one straight line. It shows the relationship DeskcommCRM is trying to preserve: channel input becomes an operational demand; the demand can be acted on by different kinds of workers and people; the result is recorded; and an unresolved state returns to work instead of vanishing.
One product, several control surfaces
Once the demand is the center, the rest of DeskcommCRM becomes easier to place. WhatsApp is the entry channel and a constrained exit channel. The CRM domain gives the interaction identity, business meaning, and position in a funnel. The event layer lets several responsibilities react to the same fact without forcing the original request to perform every side effect. The AI layer supplies contextual interpretation and action under limits. Human governance decides who may see, change, or assume the work. Follow-up keeps a quiet demand from becoming a forgotten one. Audit, privacy, and self-host operations constrain the entire system from underneath.
These are not independent modules simply because they live in different directories. The value of the product lies in their connections. A received message can update the conversation, create or attach a demand, emit work for an agent, feed sentiment or automation, and remain visible in the timeline. If the agent stops, a human can receive a summary and a reason rather than a bare notification. If a worker fails, a retry, a delayed state, or a Central item should make the failure legible. If a business uses a different vocabulary, the pipeline can translate “lead,” “won,” or “stage” into terms that fit its operation without changing the underlying record model.
The same connections also establish boundaries. The AI is not the sole source of truth; durable CRM state and runtime rules decide what persists. A channel adapter is not the same thing as a business policy; WhatsApp pacing, opt-out, and privacy controls can block an otherwise plausible message. A tool is not permission by itself; the authenticated organization, role, visibility, and audit path still govern it. A self-hosted installation is not correct merely because its web container is healthy; the worker, scheduler, persistent session state, database schema, and backup strategy matter too.
That is the perspective to carry through the rest of this series. The important question is always some version of: what happened to the demand, who owns the next action, what evidence survives, and what happens when the preferred path does not? The answer will require looking at message ingestion, asynchronous work, model context, human handoff, guardrails, tool access, follow-up, and deployment. But the subject remains the same throughout: DeskcommCRM as a system for turning conversational demand into accountable, continuous sales work.
The product is ambitious, and ambition makes calibration more—not less—important. The current repository shows a serious attempt to make automation durable, bounded, and inspectable. It also records transitions between older and newer runtimes, documented risks, and properties that require live tests rather than textual assurance. A trustworthy understanding therefore begins neither with dismissal nor with promotion. It begins with the concrete operating model: a message enters, a demand is formed, responsibility is assigned, actions leave evidence, and unresolved work is given another chance to become visible.
References
- DeskcommCRM repository
- DeskcommCRM README in English
- DeskcommCRM Vision
- System Vivo doctrine
- Master product requirements
- Events and workers specification
- Event-log dispatcher
- Event handler registration
- Agent-engine drain
- 24/7 agent worker
- Follow-up engine
- Follow-up node handlers
- Follow-up reactivity
- Silence sweep
- Release changelog
- Customer 360 technical specification
- Lead creation from conversation
- Baseline schema
- WhatsApp ingest module
- Tokenized WAHA webhook route
- WAHA webhook authentication
- WAHA envelope contract
- Caddy edge configuration
- WhatsApp technical specification
- Packaging doctrine
- Packaging ADR
- Installer
- Updater
- Production compose
- Worker Dockerfile
- Deployment checklist