Channels
Each adapter is one file that translates a provider's webhooks and API into tickets and replies. Use several at once; each gets its own id and webhook route.
Resend · Email
Receives on a Resend receiving domain by webhook, sends through Resend.
npx shadcn@latest add https://tendkit.softwaresavants.dev/r/channel-resend.jsonresendChannel({ id: "email", apiKey, webhookSecret, address: "support@acme.com", replyAddress: "support@in.acme.com" })Microsoft 365 · Email
Reads and sends from a shared mailbox through Microsoft Graph, with change notifications.
npx shadcn@latest add https://tendkit.softwaresavants.dev/r/channel-microsoft365.jsonmicrosoft365Channel({ id: "email", tenantId, clientId, clientSecret, mailbox: "support@acme.com", notificationUrl })Gmail · Email
Google Workspace mailboxes through the Gmail API, with Pub/Sub push or polling.
npx shadcn@latest add https://tendkit.softwaresavants.dev/r/channel-gmail.jsongmailChannel({ id: "email", mailbox: "support@acme.com", auth, pubsub })SMTP / IMAP · Email
Any mailbox. You bring the SMTP transport and IMAP poller for your runtime.
npx shadcn@latest add https://tendkit.softwaresavants.dev/r/channel-smtp.jsonsmtpChannel({ id: "email", address: "support@acme.com", smtp: transport, imap: poller })Twilio · SMS & WhatsApp
SMS and WhatsApp through one Twilio number or Messaging Service.
npx shadcn@latest add https://tendkit.softwaresavants.dev/r/channel-twilio.jsontwilioChannel({ id: "whatsapp", accountSid, authToken, from: "whatsapp:+14155550133", webhookUrl })WhatsApp Cloud API · WhatsApp
Meta's WhatsApp Business Platform directly, including the 24-hour reply window.
npx shadcn@latest add https://tendkit.softwaresavants.dev/r/channel-whatsapp.jsonwhatsappChannel({ id: "whatsapp", phoneNumberId, accessToken, appSecret, verifyToken, displayNumber: "+1 415 555 0133" })Telegram · Chat
A Telegram bot: customers message it, agents answer from the inbox.
npx shadcn@latest add https://tendkit.softwaresavants.dev/r/channel-telegram.jsontelegramChannel({ id: "telegram", botToken, secretToken, botUsername: "acme_support_bot" })Signed API · Your forms
Your contact form or app posts signed requests; replies go out by email.
npx shadcn@latest add https://tendkit.softwaresavants.dev/r/channel-api.jsonapiChannel({ id: "contact-form", secret, address: "Contact form", kind: "email", replyAddress: "support@in.acme.com" })Write your own
Implement the Channel interface in registry/support/channel.ts: verify and parse webhooks into events, and send messages. Threading, storage and rules stay in the service. Open issues list the adapters people have asked for.