Documentation

Quick Start (5 min)

Get your AI customer service bot running in 5 minutes:

1. Create an account

Go to tahvosolutions.fi/register and enter your company name, email, and password.

2. Set your website URL

In the dashboard, go to Settings and enter your website URL.

3. Let the bot read your website

Go to What the bot knows, click Discover pages. Select which pages the bot should learn from, then click Read selected pages.

4. Embed the widget

Copy the widget code from Home and paste it into your website HTML just before </body>:

<script src="https://tahvosolutions.fi/widget.js" data-id="YOUR_WIDGET_ID"></script>
Tip: Your widget ID is a secure random string like biz_a8f3c2e9b4d1. Find it in your dashboard Home tab.

5. Done!

The chat bubble appears in the bottom-right corner of your website. Visitors can start chatting immediately.

Video guides

Five short videos (20–30 s, no sound, subtitles on screen) showing the setup on an example business.

1. Create your account
2. Add your website address
3. Paste one line of code
4. Opening hours and needs
5. Try the bot

Platform Installation

WordPress

Easiest: install the Tahvo Chat plugin (download; also linked in the dashboard's installation guide). In WordPress open Plugins → Add New → Upload Plugin, activate it and paste your widget ID under Settings → Tahvo Chat. Or add the script to your theme footer with a plugin such as WPCode.

Shopify

Go to Online Store → Themes → Edit code → theme.liquid. Paste the script before </body>.

WooCommerce

Same as WordPress — add to theme footer or use a plugin.

Squarespace

Go to Settings → Advanced → Code Injection → Footer. Paste the script.

Wix

Go to Settings → Custom Code. Add the script to the body end.

React / Next.js

Add to your layout component or _document.tsx:

<Script src="https://tahvosolutions.fi/widget.js" data-id="YOUR_ID" strategy="afterInteractive" />

Static HTML

Paste before </body> in your HTML file. That's it.

Home

Shows what to do next, your monthly usage (messages used / limit), your conversations and what the bot handled for you this month.

When you first log in, the guided setup takes you through it one step at a time: your website, the widget code for your site platform, a check of what the bot learned from your site, opening hours (or none, for an online service) how you take bookings (or that you don't), and last trying the bot in the preview and publishing it. At the check step the setup reads your site itself, which usually takes 1–2 minutes; the button to confirm the facts turns on once they are found. A step you finished can be changed later in Settings or What the bot knows.

Free trial

Every plan starts with a 7-day free trial with every feature and no card. The 7 days start when the chat is live on your website. A bar at the top shows the days left; choose a plan under Billing.

Conversations & customer service

Every conversation is kept here as an archive. Day to day you work from your email: when a customer needs a person, you get an email with a Reply button that opens just that conversation, and you can answer the customer right there.

Customer service hours

Set in Settings when a person answers customers. These can differ from your opening hours (for example open 8–17, a person answers 9–12). The Human button at the top of the chat shows only during these hours. During these hours a customer who asks for a person gives their name and email or phone in one message and waits in the queue (they are told so), and you and your team get an email and a phone notification right away. If nobody answers within 30 minutes, the customer is told, with an apology, that their question has been passed on, and it moves to your requests list. The customer can also press Leave the queue: the question goes to your requests at once and, while customer service is open, the customer is offered a Call button with your phone number. Outside these hours the bot takes a contact request and tells the customer when you will be back.

When a conversation ends

A conversation with no new messages for 30 minutes ends, also one a person has taken. The customer sees that the chat ended and starts a new one simply by writing.

Finding conversations

Filter by All, Active, In queue, Closed or Rated. 30 conversations are shown at a time; Load more shows older ones. A customer's messages in another language are shown translated into yours, and your reply is translated into the customer's language.

Message limits

One customer message is at most 150 characters; the customer can send as many as they need. To stop automated misuse one address can send at most 8 messages a minute and 60 a day to one business, and the customer is told if a limit is reached.

Notifications

You get an email for every customer request and when a customer wants a person. Add the dashboard to your phone's home screen (Settings → Notifications) to get phone notifications too. At the start of each month a short monthly report comes by email; everything else is in the dashboard.

Team

On Pro and Business you can invite colleagues in Settings → Team. A waiting customer is emailed to everyone on duty; the first one to press Reply takes the conversation. Each member can pause their own notifications for a break.

What the bot knows

The bot answers only from what it knows about your business. It never makes up prices or services.

Tell the bot

Write your services, prices and anything customers often ask into the Tell the bot fields, or upload a PDF (price list, menu, brochure). This works even if your website says little.

Pages read

Click Discover pages to scan your website and choose which pages to include. PDF files linked from your pages can be read too. Page limits: Starter 25, Pro 100, Business 500. Pages are refreshed weekly; Refresh all does it right away.

Custom Answers

Add specific answers the bot should give for certain questions. Enter trigger phrases (comma-separated) and the answer. When a customer's message matches a trigger phrase, the bot uses your exact answer.

Knowledge Gaps

Real questions the bot couldn't answer from your site show up here — the actual question, word for word, plus a genuine excerpt from your own site if one exists that might help. The AI never invents an answer: you write the real one yourself, optionally have it auto-translated to your other languages, and it's saved as a custom answer going forward. Dismiss any that aren't relevant.

Settings

Configure your bot:

SettingDescription
Website URLYour website address for crawling
LogoShown in the chat header and, if you choose, as the chat button (Pro and Business). Square, at least 256 × 256 px, max 2 MB. Best: PNG with a transparent background or SVG (JPG, GIF and WebP also work). Use a symbol or monogram rather than long text, and leave a little empty space around it.
Bot nameDisplayed in the chat header
Brand colorChat bubble and accent color
Widget themeDark or light background for the chat widget, in neutral greys so that your brand colour stands out. Text on your brand colour turns dark automatically if the colour is light.
Published / hiddenAt the top of Settings. A new bot starts hidden: try it in the preview and press Publish the bot when you are happy. You can hide it again at any time, for example while you make changes; visitors then see no chat at all.
PreviewOpens your bot as visitors will see it, with the colours, theme and chat button on screen even before you save, and also while the bot is hidden. Chats in the preview show under Conversations.
Accent colour (Pro, Business)Colour for the Start chat button, the send button and the visitor's messages. Leave empty to use the brand colour. Text on both colours turns dark or white automatically so it stays readable.
Your privacy noticeYour business is the controller of the visitors' data, so your website's privacy notice must mention the chat. Settings, Your privacy notice, has an example text in five languages with your plan's retention time filled in, and a copy button. It is an example only: check that it fits your business, with a lawyer if needed. Tahvo Solutions is not responsible for its accuracy.
Start screenWhen a visitor opens the chat they see: start a chat, leave a message (you reply to the email they give) and call (only if you have set a phone number), plus whether customer service is in. The top is in your brand colour. Under the bot's name it says AI assistant in the visitor's language. Below the options, Frequently asked shows four questions made automatically from what the bot knows about your business (never other visitors' messages); a tap sends the question to the bot. If your site has an FAQ page, the list ends with a link to it. Can be turned off.
Chat buttonWhat visitors see in the corner of the page: the chat icon in your brand color, or (Pro and Business) your own logo in a white circle or the logo alone. Upload the logo first; a transparent PNG or SVG works best for logo only.
Welcome messagesPer-language greeting when chat opens
LanguagesWhich languages the bot supports (plan limits apply)
Opening messages by page (Pro, Business)When the page address contains a given text (e.g. /pricing), the chat opens with your own line for that page instead of the general greeting. Up to 10 pages; also works on single-page sites.
Contact email/phoneWhere requests are emailed; the phone number is offered to a customer who leaves the queue while customer service is open
Business hoursYour opening hours, which the bot tells customers
Customer service hoursWhen a person answers customers; at these times a request is emailed to you and your team right away

Your Account

At the bottom of Settings, under Account and security (2FA), you can:

Billing & Usage

PlanPriceMessagesLanguagesPages
Starter€29/mo + VAT300/mo125
Pro€69/mo + VAT1,500/mo3100
Business€129/mo + VAT4,000/mo5500

Every plan starts with a 7-day free trial with every feature and no card. The 7 days start when the chat is live on your website. Confirm your email address from the welcome email first; an account that is not confirmed within 7 days is removed. If the confirmation email bounces (your mail server refused it), the dashboard tells you and shows the server's reply. If no plan is chosen when the trial ends, the chat stops showing until you choose one. Bigger plans include everything in the smaller ones.

Overage Options

Block: Bot stops when the monthly limit is reached.
Prepaid credits: Load a balance in advance (€10/25/50/100), deducted per overage message so the bot keeps answering past the limit.

Analytics

Track your bot's performance: average rating, conversation volume, popular times (hour/day heatmaps), language distribution, most asked questions, and escalation rate.

Export all conversations as JSON for archival or analysis.

Actions (What the Bot Can Do)

The bot doesn't just answer questions — it takes care of requests:

ActionWhat happensPlan
Contact requestCollects name, email or phone and the matterAll
FeedbackStar rating and commentAll
Quote requestCollects the details and contact infoPro, Business
Callback requestCollects phone number and preferred timePro, Business
Booking requestOffers free times from your calendar; you confirmPro, Business
Orders and stockOrder status, returns, complaints, stock checksBusiness

Every request arrives in your email and in the Customer requests tab. The customer gets a confirmation email.

Several locations (Business)

Several stores or restaurants under one chat? Add them in Settings → Locations: name, address, opening hours, booking link or calendar, and an email for requests. The bot asks which location when it matters (or knows it from the page the customer is on), uses that location's hours and booking, and a request goes to that location's email as well as to you.

Bookings and calendar

In Integrations, paste the private iCal address of your Google, Outlook or Apple calendar. The bot sees when you are busy (it never changes your calendar) and offers free times; if the time asked for is taken, it suggests the next free one. You get an email and confirm the booking with one click, and the customer gets a confirmation. Using a booking system such as Timma or Bokadirekt? Add its booking link instead: the bot gives it to customers who want to book.

Important: The bot collects information and notifies you. It does not take payments or change bookings in other systems.

Languages

The bot auto-detects the customer's language and responds natively in Finnish, Swedish, Norwegian, Estonian, or English. No configuration needed — it just works.

Welcome messages can be customized per language in Settings.

Security & Privacy

Your data is isolated from other businesses. Key security measures:

Never share your widget ID or API key publicly. The widget ID is embedded in your site's HTML which is visible, but combined with domain validation it prevents abuse.

API & Webhooks (Zapier, Make, n8n)

Everything a customer leaves in the chat (quote requests, contact and callback requests, appointment requests, order requests, feedback) can be sent to the system you already use. No Tahvo app is needed in Zapier or Make: they work through their generic Webhooks and HTTP modules.

CRM: HubSpot and Pipedrive (Pro, Business)

No Zapier needed: in Integrations → CRM choose HubSpot or Pipedrive and paste one key. HubSpot: Development → Keys → Service Keys → Create service key, add the scopes crm.objects.contacts.read and crm.objects.contacts.write and copy the key (older accounts have the same under Private Apps). Pipedrive: your profile → Personal preferences → API → Your personal API token. The key is checked before it is saved and is never shown again in full.

Every contact, callback, quote and appointment request, complaint and question left in the queue goes to the CRM: the person is found by email or created, and the request is saved as a note (Pipedrive: a lead with a note). The request email then has an Open in HubSpot / Pipedrive button, a transferred request is marked done in Tahvo, and the Requests tab shows this month's numbers and only what still needs you in Tahvo: failed transfers (with the reason) and times to confirm.

1. Push: receive events in Zapier / Make

In Zapier create a Zap with the trigger Webhooks by Zapier → Catch Hook (in Make: Webhooks → Custom webhook). Paste the address it gives you into Integrations → Webhook URL and save. Press Send test event so Zapier / Make sees the fields, then build the rest of your Zap or scenario (add a row to Sheets, a card to Trello, a message to Slack, a contact to your CRM).

Choose what is sent: new requests (default) and, optionally, status changes you make in the Actions tab. Every request is a JSON POST:

{
  "event": "action_created",        // or "action_updated", "test"
  "event_id": "5b2e…",              // unique per delivery, use it to de-duplicate
  "api_version": 1,
  "timestamp": "2026-10-06T09:30:00.000Z",
  "business_id": "…", "business_name": "…", "business_slug": "…",
  "action": {
    "id": "…", "type": "quote", "status": "new",
    "name": "Matti Meikäläinen", "email": "matti@example.com", "phone": "+358…",
    "summary": "Quote request from Matti Meikäläinen: 3 windows",
    "created_at": "…", "updated_at": "…", "conversation_id": "…",
    "details": { "items": "3 windows", "notes": "…", "language": "fi" }
  },
  "data": { … }                     // the same information in the original flat format
}

Headers: X-Tahvo-Event, X-Tahvo-Business and X-Tahvo-Key (your API key, so your endpoint can check the call really came from Tahvo). Answer with any 2xx within 4 seconds; a slow endpoint never slows the chat.

2. Pull: fetch requests with your API key (Pro and Business)

Create the key in Integrations → Advanced settings and send it as the X-Tahvo-Key header. In Zapier use a Webhooks → Custom Request step on a schedule, in Make the HTTP → Make a request module.

GET https://tahvosolutions.fi/api/auth?action=feed&since=2026-10-01T00:00:00Z&limit=50
X-Tahvo-Key: tahvo_…

→ { "items": [ { "id": "…", "type": "contact", "status": "new", … } ], "count": 1, "order": "created_at", "newest": "…" }

Items are newest first. Optional query parameters: since (exclusive, ISO time), limit (1–100), type (quote, contact, callback, appointment…), status, and by=updated to list by last change instead of creation time. At most 60 requests a minute.

3. Write back: update a request from your automation

POST https://tahvosolutions.fi/api/auth
X-Tahvo-Key: tahvo_…
Content-Type: application/json

{ "action": "action_update", "id": "<action id>", "status": "done", "note": "Called, quote sent" }

Statuses: new, in_progress, done, declined (and the others shown in the Actions tab). Updates made through the API do not trigger the "status changes" webhook, so a Zap cannot loop into itself.

Treat the API key like a password. Generating a new key immediately stops the old one. The webhook address must be a public https address; internal addresses are refused.

Shopify Integration

Business plan. In Integrations, create a Custom App in your Shopify admin (Settings → Apps → Develop apps) with the read_orders scope, then enter your store's myshopify.com domain and the Admin API access token. We verify the connection immediately (green = working) and the bot can then look up a customer's order status live.

Coming soon: Full Shopify product catalog sync.

WooCommerce Integration

Business plan. In Integrations, create a REST API key in WooCommerce (Settings → Advanced → REST API) with Read permissions, then enter your store URL, consumer key, and consumer secret (WooCommerce only shows the secret once, at creation). We verify the connection immediately (green = working) and the bot can then look up a customer's order status live.

EU AI Act Compliance

All chat interactions display an AI disclosure notice. Interaction logs are stored for audit purposes. Available for download from the Analytics tab.

See our Terms of Service and Privacy Policy for full compliance details.