Tendkit

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.

Terminal
npx shadcn@latest add https://tendkit.softwaresavants.dev/r/channel-resend.json
lib/support/index.ts
resendChannel({ 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.

Terminal
npx shadcn@latest add https://tendkit.softwaresavants.dev/r/channel-microsoft365.json
lib/support/index.ts
microsoft365Channel({ 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.

Terminal
npx shadcn@latest add https://tendkit.softwaresavants.dev/r/channel-gmail.json
lib/support/index.ts
gmailChannel({ id: "email", mailbox: "support@acme.com", auth, pubsub })

SMTP / IMAP · Email

Any mailbox. You bring the SMTP transport and IMAP poller for your runtime.

Terminal
npx shadcn@latest add https://tendkit.softwaresavants.dev/r/channel-smtp.json
lib/support/index.ts
smtpChannel({ id: "email", address: "support@acme.com", smtp: transport, imap: poller })

Twilio · SMS & WhatsApp

SMS and WhatsApp through one Twilio number or Messaging Service.

Terminal
npx shadcn@latest add https://tendkit.softwaresavants.dev/r/channel-twilio.json
lib/support/index.ts
twilioChannel({ id: "whatsapp", accountSid, authToken, from: "whatsapp:+14155550133", webhookUrl })

WhatsApp Cloud API · WhatsApp

Meta's WhatsApp Business Platform directly, including the 24-hour reply window.

Terminal
npx shadcn@latest add https://tendkit.softwaresavants.dev/r/channel-whatsapp.json
lib/support/index.ts
whatsappChannel({ id: "whatsapp", phoneNumberId, accessToken, appSecret, verifyToken, displayNumber: "+1 415 555 0133" })

Telegram · Chat

A Telegram bot: customers message it, agents answer from the inbox.

Terminal
npx shadcn@latest add https://tendkit.softwaresavants.dev/r/channel-telegram.json
lib/support/index.ts
telegramChannel({ 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.

Terminal
npx shadcn@latest add https://tendkit.softwaresavants.dev/r/channel-api.json
lib/support/index.ts
apiChannel({ 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.