Skip to content

Zavu Functions

Deploy serverless code that powers your agents — no infra to manage, just `npx zavudev deploy`.

View .md

Zavu Functions

Zavu Functions let you run TypeScript in our cloud and wire it directly to your WhatsApp/SMS/Email senders. You write the code locally, run npx zavudev deploy, and seconds later your agent is live with tools backed by real business logic.

TypeScript
import { defineAgent, defineTool } from "@zavudev/functions" defineAgent({ senderId: process.env.SENDER_ID!, name: "Bella", provider: "zavu", model: "openai/gpt-5.6-luna", prompt: "Eres Bella, anfitriona de la Pizzeria. Sé breve.", channels: ["whatsapp"], }) defineTool({ name: "check_availability", description: "Get free reservation slots for a date and party size.", parameters: { type: "object", properties: { date: { type: "string" }, partySize: { type: "number" }, }, required: ["date", "partySize"], }, handler: async ({ date, partySize }) => { // your real booking logic — DB, POS, external API, whatever return { available: true, slots: ["19:00", "21:00"] } }, })

That's the entire integration. One file. npx zavudev deploy. Done.

When to use Functions

AI agent with real actions

Customer asks something, the LLM decides which tool to call, your code runs, real data goes back as the answer.

Custom webhooks

Receive inbound from Stripe, GitHub, your own systems, then forward as a WhatsApp message.

Scheduled jobs

Daily report digests, reminder broadcasts, cleanup tasks.

Event-driven automation

React to message.inbound, broadcast.status_changed, etc. with custom logic without managing webhook receivers yourself.

How it relates to AI Agents

Zavu has two complementary ways to build agents:

You wantUse
A no-code agent configured from the dashboardAI Agents
An agent with custom business logic in your own codeZavu Functions (this guide)
Both — start no-code, evolve to codeStart with AI Agents, migrate when you need tools or custom flows

Functions can fully manage an AI Agent: the defineAgent call creates and keeps the agent config in sync with your code. Once your function declares defineAgent, the agent is "managed by the function" — the dashboard surfaces this and disables manual edits to prevent drift.

Mental model

Code
+----------------+ +--------------------+ +-----------+ | WhatsApp user | -----> | Zavu sender (WABA) | -----> | AI Agent | +----------------+ +--------------------+ +-----------+ | (tool call) v +-------------------------------+ | Your Zavu Function | | defineTool(handler) | +-------------------------------+ | (return result) v Agent answers user
  • Fully managed runtime. Each function runs in Zavu's serverless cloud. No consoles to log into — npx zavudev deploy handles bundling, dependencies, and publishing.
  • Internal invocation. When the agent calls a tool, we use signed internal invocations — your function is not publicly exposed. No HTTP, no HMAC secrets to rotate, no DDoS surface.
  • Native event binding. Functions can also subscribe to Zavu events (message.inbound, broadcast.status_changed, etc) via triggers.
  • Auto-provisioned credentials. Every function gets a scoped ZAVU_API_KEY in its environment so it can call our SDK without you handling key distribution.

Quick tour

  1. Install the CLI

    terminal
    npx zavudev@latest --version # or install it globally: npm install -g zavudev # or grab a standalone binary from # https://github.com/zavudev/zavu-cli/releases
  2. Login (one time)

    terminal
    npx zavudev login

    Opens your browser, lets you pick a project. The API key is saved to ~/.zavu/credentials.json and used by every later command.

  3. Scaffold a function

    terminal
    npx zavudev fn init --template restaurant-booking -y cd reservations

    Creates index.ts with defineAgent + defineTool boilerplate.

  4. Set secrets

    terminal
    npx zavudev fn secrets set SENDER_ID jn76vnxet8g5nq661by3v06y1581bmmn

    The agent will run on this WhatsApp sender. Get the ID from npx zavudev senders list.

  5. Deploy

    terminal
    npx zavudev deploy

    Bundle, upload, agent + tools synced to your sender.

  6. Try it

    Send a WhatsApp to the sender's number. The agent answers, calls your tool handlers, returns real data.

Continue