Hi - I answer from the OpenSmartRoute documentation: routing, the API, plans and quotas, self-hosting. Ask away, or open a support ticket if you need a person.
Grounded in the docs - follow a source before acting on it.
70-channels-adapters - Skill - OpenSmartRoute
Skillv1.0.0
70-channels-adapters
Channels — thin controllers; delegate to ConversationService and shared services
Instruction file imported from diegoleonardoro/copysSchedule (.cursor/rules/70-channels-adapters.mdc). Copyright stays with the author.
Channels and HTTP adapters
Rule
Controllers and WhatsApp services should parse/normalize the channel payload, then call ConversationService.processMessage (or other domain services), not reimplement booking/flow/agent logic.
Anti-patterns
Duplicating slot filling, flow start, or tool behavior in whatsappService or route handlers.
Bypassing trace context for inbound messages when processMessage is used — pass inboundMessageId, sourceChannel, and correlationId when available (see ProcessMessageOptions).
Shared infrastructure
Auth, sockets, and templates integrate with domain services — keep single source of truth for conversation state in Mongo-backed services.
Use it
Copy one of these into your project. Installing also returns the manifest and these snippets.
# after Install: the listing is in your workspace's routing pool - a plan picks it for its slot
curl -s -X POST https://api.opensmartroute.ai/api/v1/route -H 'Authorization: Bearer $OSR_API_KEY' -H 'Content-Type: application/json' -d '{"text": "...", "plan": true}'
Installed into a catalogue, chosen by a router
Install 70-channels-adapters and it becomes one more candidate the router can pick - when it fits.
A listing is a routing target with a manifest: what it does, which domains it covers, what it costs and who publishes it. Once installed it sits beside your own models and tools, is scored like any other candidate for each request, and shows up in the trace when it wins. Ratings come from workspaces that installed it, one per account.