Why
Twenty Apps graduated to production. Goal: turn this bespoke Algeness integration into the universal, official-quality Zadarma integration for Twenty CRM — and a credible partnership/acquisition target for Zadarma.
Headline insight: the app is already far more universal than it looks. Most Algeness-specific behaviour lives in n8n (naming, SMS classifier, templates), not in app code. The in-app coupling is minimal and mostly optional — so the cleanup is smaller than it first appears.
Acquisition vs partnership — realistic framing
Acquisition is a north star, not a direct target. A small integration alone does not trigger a buyout. Realistic near-term win: official partnership with Zadarma (recommended integration, co-marketing, revenue-share, roadmap access). Acquisition becomes plausible only after real traction + a premium feature Zadarma would rather buy than build (SMS messenger, click-to-call, generic AI).
Universal core (keep / strengthen)
Needed by every Zadarma + Twenty user:
- Call/SMS ingest (webhooks) →
callLog / smsLog, auto-linked to Person
- Phone→Person matching (last-9-digit, 3-pass)
- Transcripts + recordings (link-only, GDPR)
- Send-SMS from Person panel
- Sync-calls (history pull), orphan-rescan (data-integrity repair)
In-app coupling to strip / generalize
- Retell hardcoded (
AI_EXTENSIONS, callerType=AI, aiCost, correlationId) → optional AI layer, silent when AI_EXTENSIONS empty. /call-enrichment is already vendor-agnostic.
- TeamSale sync → keep optional (Zadarma's own CRM — a plus for acquisition, not a minus).
- Naming conventions / SMS-template enums → already n8n-side, not in app. OK.
Gaps to product-quality
| Gap |
Action |
| Reliability: uncaught throw → HTTP 500 (15 handlers) |
try/catch all handlers → 200 {ok:false} |
| Test coverage |
vitest on HMAC verify, phone-match 3-pass, webhook parse (all payload shapes) |
| Click-to-call (missing) |
Zadarma /v1/request/callback/ — universal killer feature |
| Docs |
setup-guide for generic user, webhook troubleshooting |
| Distribution |
Twenty Marketplace + Zadarma integrations directory |
Roadmap
Phase 1 — Universal core (clean public app)
Phase 2 — Distribution + partnership
Phase 3 — Premium (path to acquisition)
Premium differentiators (what would actually attract Zadarma)
- SMS messenger — threaded two-way SMS in a Talqui-style window. Fills a gap Twenty doesn't cover natively. Feasibility: Twenty FC is sandboxed iframe (#22588) — rebuild after Phase-2 FC regression; the model is maturing (
runAgent, KV-store, i18n).
- Click-to-call from CRM.
- Generic AI analysis (not Retell-locked).
Full reference
docs/UNIVERSAL-PRODUCT-STRATEGY.md — companion doc with full depth (EN TL;DR + Russian working text + acquisition framing + conventions for the universal fork). Lives on the universal-core branch.
Discussion
This is the anchor issue for the universal-product direction. Separate branch + deep cleanup to follow. Input wanted on:
- Scope of the Phase 1 cut (what's truly core vs optional)
- Messenger feasibility priorities (which FC-2.20 blockers first)
- Partnership outreach strategy (who at Zadarma, what to lead with)
Related: #71 (Twenty 2.6→2.20 upgrade — the platform foundation this builds on).
Why
Twenty Apps graduated to production. Goal: turn this bespoke Algeness integration into the universal, official-quality Zadarma integration for Twenty CRM — and a credible partnership/acquisition target for Zadarma.
Headline insight: the app is already far more universal than it looks. Most Algeness-specific behaviour lives in n8n (naming, SMS classifier, templates), not in app code. The in-app coupling is minimal and mostly optional — so the cleanup is smaller than it first appears.
Acquisition vs partnership — realistic framing
Acquisition is a north star, not a direct target. A small integration alone does not trigger a buyout. Realistic near-term win: official partnership with Zadarma (recommended integration, co-marketing, revenue-share, roadmap access). Acquisition becomes plausible only after real traction + a premium feature Zadarma would rather buy than build (SMS messenger, click-to-call, generic AI).
Universal core (keep / strengthen)
Needed by every Zadarma + Twenty user:
callLog/smsLog, auto-linked to PersonIn-app coupling to strip / generalize
AI_EXTENSIONS,callerType=AI,aiCost,correlationId) → optional AI layer, silent whenAI_EXTENSIONSempty./call-enrichmentis already vendor-agnostic.Gaps to product-quality
200 {ok:false}/v1/request/callback/— universal killer featureRoadmap
Phase 1 — Universal core (clean public app)
Phase 2 — Distribution + partnership
Phase 3 — Premium (path to acquisition)
Premium differentiators (what would actually attract Zadarma)
runAgent, KV-store, i18n).Full reference
docs/UNIVERSAL-PRODUCT-STRATEGY.md— companion doc with full depth (EN TL;DR + Russian working text + acquisition framing + conventions for the universal fork). Lives on the universal-core branch.Discussion
This is the anchor issue for the universal-product direction. Separate branch + deep cleanup to follow. Input wanted on:
Related: #71 (Twenty 2.6→2.20 upgrade — the platform foundation this builds on).