Home / Docs
Documentation

Connect the Zotaro chat widget to your website

Create your account, grab your Wizard ID, paste one script tag — Zotaro is live on a plain HTML site, WordPress, Blogger, or anywhere else you can add a snippet of code.

Overview

The widget on your site calls Zotaro's Chat API, which answers using whatever you've configured in your dashboard — your knowledge base, your functions, and the widget's look and feel. The steps below take you from signup to a live chat bubble, then cover installing that same snippet on WordPress, Blogger, and other site builders.

Just want a contact form, not the full chatbot? Skip straight to the free contact form widget

Setup

01

Create your account

Start your 7-day free trial from the pricing page — no card required. Give us your name, email, and a line about your business, and you'll land straight in your dashboard with login access already set up.

02

Log in and find your Wizard ID

Every account gets a unique Wizard ID — your widget uses it to identify your account and pull in your knowledge base and functions.

1. Log in to the dashboard

Use the email and password from Step 01.

2. Open your company tab

After logging in, you'll see a tab with your business name below the main Dashboard tab. Open it.

3. Copy your Wizard ID

Your Wizard ID is listed under the backend record on this tab. Copy it — you'll paste it into the widget script next.

03

Install the widget on your site

1. Download widget.js

Download the file from your dashboard and place it in your website's root directory.

2. Add the script tag

Paste this just before the closing </body> tag on any page you want the chat bubble to appear on, and fill in your own Wizard ID.

index.html
<script
  src="widget.js"
  data-api-url="https://chat.zotaro.xyz/chat"
  data-wizard-id="wk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  data-bot-name="Assistant"
  data-primary-color="#14453D"
  data-accent-color="#E8A33D"
  data-welcome="Hi! How can I help you today?"
  data-require-identity="true"
  data-gate-text="Share your email or mobile number to start chatting."
  data-gate-button-text="Start chat"></script>

Save the page and reload your site. A chat bubble should appear — that's it, the widget is live.

04

Add a knowledge base

Teach the bot about your business so it can answer questions accurately:

1. Open the Knowledge Base tab

In your dashboard, go to the Knowledge Base tab.

2. Upload a PDF

Upload a PDF describing your products, services, pricing, or policies.

Once uploaded, the bot can immediately draw on this document to answer visitor questions about your business.

05

Configure functions (actions)

Functions let the bot do things during a conversation — like booking a callback or scheduling a meeting — instead of just answering questions.

1. Open the LLM Function tab

Four functions are enabled by default. You can turn each one on or off from this tab.

Adding a custom function

Under Add Custom Function, fill in three fields: a short Function Name with no spaces (e.g. call_me), a plain-language description of what the LLM should use it for, and a JSON Schema defining what information the bot should collect before calling it. Click Add Function to save it — it's active immediately.

Keep function names short and descriptive, and be specific in "What should the LLM use this for?" — that's how the bot decides which function to call and when. Worked examples below.

Installing on WordPress, Blogger, and other platforms

The script tag from Step 03 works anywhere you can add custom code to a page — you're just placing it somewhere platform-specific instead of directly editing an HTML file.

WordPress

  1. Easiest — a header/footer plugin. Install a plugin like WPCode or "Insert Headers and Footers," open its settings, and paste the script tag from Step 03 into the Footer box. Save.
  2. Manual — theme file editor. Go to Appearance → Theme File Editor → footer.php, paste the snippet just above </body>, and update the file. A theme update can overwrite this, so the plugin route above is safer.

Blogger (Blogspot)

  1. From your Blogger dashboard, open Theme → Edit HTML.
  2. Find the closing </body> tag near the bottom of the template.
  3. Paste the script tag from Step 03 immediately above it, then click Save theme.

Wix, Shopify, Squarespace & others

  1. Look for Custom Code, Embed, or Tracking & Analytics in your site's settings — most builders have one.
  2. Paste the same script tag there. If you're asked where to load it, choose footer and all pages.

Contact form widget

Separate from the chat widget above, Zotaro also gives out a free embeddable contact-form widget. Any business can use it — you don't need a Zotaro account, a Wizard ID, or a paid plan.

1. Request a free widget key

Go to the contact form widget page and submit the "Request your free widget key" form with the inbox address where you want submissions delivered. Your key (format cfw_xxxx) arrives by email, usually within one business day.

2. Add the script tag

Paste this just before the closing </body> tag on any page you want the form to appear on, with your own widget key filled in.

index.html
<script
  src="https://www.zotaro.xyz/contact-widget.js"
  data-key="wk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  data-title="Contact us"
  data-button-text="Send message"
  data-primary-color="#14453D"></script>

Save the page and reload your site — the form should appear, and submissions will start landing in the inbox you registered.

Contact form widget attribute reference

AttributeRequiredWhat it controls
data-keyYesYour widget key — determines which inbox submissions are delivered to.
data-titleNoHeading shown above the form. Defaults to "Contact us".
data-button-textNoSubmit button label. Defaults to "Send message".
data-primary-colorNoHex color for the button and accents.

Widget attribute reference

AttributeTypeWhat it controls
data-api-urlURLYour chatbot's API endpoint.
data-wizard-idstringYour account's unique Wizard ID (Step 02).
data-bot-namestringName shown in the widget header.
data-primary-colorhex colorMain widget color (header, buttons).
data-accent-colorhex colorSecondary highlight color.
data-welcomestringFirst message shown when chat opens.
data-require-identity"true" / "false"Whether visitors must share contact details before chatting.
data-gate-textstringMessage on the identity form. Used only if data-require-identity="true".
data-gate-button-textstringButton label on the identity form.

Function examples

call_me

What should the LLM use this for? Use this function when the user requests a phone call, callback, or asks to speak with a human agent. Collect the user's name, phone number, preferred callback time (optional), and reason for the call (optional).

call_me.json
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Customer's full name"
    },
    "phone_number": {
      "type": "string",
      "description": "Customer's phone number with country code if available"
    },
    "preferred_time": {
      "type": "string",
      "description": "Preferred callback time (optional)"
    },
    "reason": {
      "type": "string",
      "description": "Reason for requesting a callback"
    }
  },
  "required": ["phone_number"]
}

schedule_meeting

What should the LLM use this for? Use this function when the user wants to schedule a meeting, book a demo, arrange an appointment, or meet with a team member. Collect the user's name, email, meeting date, meeting time, timezone, meeting topic, duration, and any additional notes.

schedule_meeting.json
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Full name of the person scheduling the meeting"
    },
    "email": {
      "type": "string",
      "format": "email",
      "description": "Email address for the meeting invitation"
    },
    "date": {
      "type": "string",
      "description": "Meeting date in YYYY-MM-DD format"
    },
    "time": {
      "type": "string",
      "description": "Meeting start time in HH:MM format (24-hour)"
    },
    "timezone": {
      "type": "string",
      "description": "Timezone for the meeting (optional)"
    },
    "topic": {
      "type": "string",
      "description": "Purpose or topic of the meeting"
    },
    "duration": {
      "type": "string",
      "description": "Expected meeting duration, e.g. '30 minutes' (optional)"
    },
    "notes": {
      "type": "string",
      "description": "Additional notes or special requests (optional)"
    }
  },
  "required": ["name", "email", "date", "time", "topic"]
}

Tip: keep function names short and descriptive, and be specific in "What should the LLM use this for?" — that's how the bot decides which function to call and when.

Need help?

If the widget doesn't appear, double-check that widget.js is in the correct directory and that your Wizard ID is pasted without extra spaces. For anything else, reach out through your dashboard or contact our team.

If the free contact-form widget doesn't appear, double-check your widget key is pasted without extra spaces and that you're using the contact-widget.js script, not widget.js — they're separate scripts for separate products. Haven't received your key yet? Allow one business day, or contact our team.

Ready to put Zotaro on your site?

Start the 7-day free trial, grab your Wizard ID, and you'll have a live widget today.