developers
ES Sign up

Reference

Integrations

Three packages on the same API: a Chat SDK bot that answers on WhatsApp, Instagram, Messenger, SMS and Gmail with one adapter, n8n nodes, and a browser SDK so your customers connect their channels in a popup. They are MIT and live next to the API.

Vercel Chat SDK: @heysteff/chat-adapter#

One adapter for every channel. It receives signed webhooks, turns them into Chat SDK messages, and every thread.post() goes out on the conversation's channel, number and recipient through the same POST /v1/messages.

npm
npm install chat @heysteff/chat-adapter @chat-adapter/state-memory
lib/bot.ts
import { Chat } from 'chat';
import { createMemoryState } from '@chat-adapter/state-memory';
import { createHeysteffAdapter, threadChannel } from '@heysteff/chat-adapter';

export const bot = new Chat({
  userName: 'my-bot',
  adapters: { heysteff: createHeysteffAdapter() }, // HEYSTEFF_API_KEY and HEYSTEFF_WEBHOOK_SECRET
  state: createMemoryState(),
});

bot.onDirectMessage(async (thread, message) => {
  await thread.post(`Writing from ${threadChannel(thread)}: ${message.text}`);
});
Next.js
// app/api/webhooks/heysteff/route.ts
import { after } from 'next/server';
import { bot } from '@/lib/bot';

export async function POST(request: Request) {
  return bot.webhooks.heysteff(request, { waitUntil: (task) => after(() => task) });
}

n8n: @heysteff/n8n-nodes-heysteff#

Install it from Settings → Community Nodes as @heysteff/n8n-nodes-heysteff and create a heysteff API credential with your API key.

Connection links in a popup: @heysteff/connect#

For a SaaS whose customers connect their own channel (see Customers and setup links). connect() opens the link in a popup and resolves with { channel_id, customer_id, channel_type }; it rejects if your customer closes the window. Calling it twice still opens one popup.

npm
npm install @heysteff/connect
TypeScript
import { connect } from '@heysteff/connect';

const { channel_id, customer_id, channel_type } = await connect({
  // Your server creates the link with customers.createSetupLink.
  url: () => fetch('/api/connect-link', { method: 'POST' }).then((r) => r.text()),
});
React
import { ConnectButton } from '@heysteff/connect/react';

<ConnectButton url={createLink} onSuccess={(r) => save(r.channel_id)}>
  Connect your WhatsApp
</ConnectButton>

The link page notifies via postMessage only the origin of the window that opened it, and the SDK accepts messages only from the link's origin. For your backend, the customer.channel_connected webhook is still the source of truth.

Packages and repositories#

Everything is MIT and uses the same API: the same code for WhatsApp, Instagram, Messenger, SMS and email. Every README includes a prompt ready to paste into Claude Code, Cursor, Codex or ChatGPT. The public repos live at github.com/heysteff-com.

NameWhat it is forInstallLinks
@heysteff/sdkTypeScript SDK: the v1 API with types, retries, webhooks and live events.npm install @heysteff/sdknpm · Code
@heysteff/cliThe heysteff command: messages, conversations and webhooks from the terminal.npm install -g @heysteff/clinpm · Code
create-heysteffCreates a project from a template with your key in .env.local.npm create heysteff@latestnpm · Code
@heysteff/chat-adapterOne Vercel Chat SDK adapter for every channel.npm install chat @heysteff/chat-adapter @chat-adapter/state-memorynpm · Code
@heysteff/connectOpens a setup link in a popup and returns the connected channel.npm install @heysteff/connectnpm · Code
@heysteff/n8n-nodes-heysteffn8n nodes: a trigger with its own webhook and sending on any channel.npm install @heysteff/n8n-nodes-heysteffnpm · GitHub
omnichannel-inboxTemplate: Next.js inbox for WhatsApp, Instagram, Messenger, SMS and email.npm create heysteff@latest my-inbox -- --template inboxGitHub
ai-agent-starterTemplate: AI agent that answers with Claude and hands off to a person.npm create heysteff@latest my-agent -- --template agentGitHub
agent-skillsSkills to integrate, automate and observe heysteff from your coding agent.npx skills add heysteff-com/agent-skillsGitHub
agent-pluginsClaude Code plugin (MCP, skills and safety rules), plus Cursor and Codex./plugin marketplace add heysteff-com/agent-pluginsGitHub

In n8n you can also install it from Settings → Community Nodes. In Claude Code, after the marketplace run /plugin install heysteff@heysteff.