Website chat

Reply in a chat

chat_reply · Changes data · Markdown

Answers a website visitor as the business, with product cards, images or buttons if you like.

Free

This tool costs nothing to call.

An example

The visitor asking about the Tabor wants to know if it ships to Seattle. Tell her yes, free, in 3 to 5 days, and show her the bike.

Your agent callschat_replyFree

The example business is Halverson Cycle & Repair, a bike shop with a repair workshop in Portland, Oregon. The reply is the one the tool really gives.

With these arguments
{
  "conversation_id": 3187,
  "text": "Yes, the Tabor ships to Seattle for free. It arrives in 3 to 5 days, tuned and ready to ride.",
  "blocks": [
    {
      "type": "cards",
      "items": [
        {
          "title": "Tabor gravel bike, 54 cm",
          "price": "$1,890",
          "image": "https://halversoncycle.example/img/tabor-gravel.jpg",
          "url": "https://halversoncycle.example/bikes/tabor"
        }
      ]
    }
  ]
}
What comes back
{
  "sent": true,
  "delivered": "chat",
  "message_at": "2026-10-14T08:00:00+00:00",
  "conversation": {
    "conversation_id": 3187,
    "status": "open",
    "channel": "web",
    "visitor": {
      "name": "Lisa Moreno",
      "email": "lisa.moreno@example.com"
    },
    "started_at": "2026-10-14T08:00:00+00:00",
    "last_message_at": "2026-10-14T08:00:00+00:00",
    "charge": "charged"
  }
}

Use it when

A visitor wrote in the website chat and should get an answer, or a private note belongs on the conversation. Visitors see the reply labelled as an AI agent's; pass by_person when a person at the business wrote it.

What it does

Answer the visitor as the business. A closed conversation reopens. A visitor who left gets the reply by email if they gave one. internal: true adds a private note instead of a reply. blocks adds rich content (cards with a picture, title, price and link; images; buttons). In Beside, point highlights things on the visitor's screen one after another (ids from page.elements in the chat.message_received event), and open_page takes them to another page of the site; one of the two per reply. The visitor sees the reply labelled as an AI agent's unless by_person says a person wrote it.

What comes back

sent: true, whether the reply was delivered (in the chat, or by email to a visitor who left), when it was sent, and the conversation. Every reply also carries cost_usd and balance_usd.

Inputs

NameTypeWhat it is
conversation_idRequiredintegerAt least 1.
textRequiredstring1 to 5,000 characters.
internalbooleanDefault: false.
by_personbooleantrue when a person at the business wrote this reply. Otherwise the visitor sees it labelled as an AI agent's (EU AI Act Art. 50). A person's reply also stops a webhook brain from answering this chat. Default: false.
blocksarray of objectsLike [{"type": "cards", "items": [{"title": "Tabor gravel bike", "price": "$1,890", "image": "https://...", "url": "https://..."}]}]. Up to 10 items.
pointarray of objects1 to 5 items.
point[].idRequiredstring1 to 8 characters.
point[].saystringUp to 90 characters.
open_pageobject
open_page.urlRequiredstringUp to 600 characters.
open_page.labelstringUp to 40 characters.

The call

Over MCP, call chat_reply on https://api.conecto.chat/mcp/chat. Over REST:

Terminal
curl -X POST https://api.conecto.chat/v1/tools/chat_reply \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"conversation_id":3187,"text":"Yes, the Tabor ships to Seattle for free. It arrives in 3 to 5 days, tuned and ready to ride.","blocks":[{"type":"cards","items":[{"title":"Tabor gravel bike, 54 cm","price":"$1,890","image":"https://halversoncycle.example/img/tabor-gravel.jpg","url":"https://halversoncycle.example/bikes/tabor"}]}]}'

When it refuses

A refused call costs nothing and says what to do next.

CodeWhenWhat to do
not_found404No chat conversation of the business has that conversation_id.Find it with chat_list_conversations and use its conversation_id.
invalid_input400A block is not valid, point and open_page came together, open_page leads off the site, or point names an element that is not on the visitor's page.Fix what the message names. Use element ids from page.elements in the latest chat.message_received event, and one of point or open_page per reply.
not_beside409point or open_page was sent, but this chat runs the classic widget.Reply with text and blocks only, or switch the widget to Beside with chat_setup.
conversation_closed409The visitor has a newer open conversation.Reply in that conversation; the message gives its id.

Give this to your agent.

Set up Conecto from https://conecto.chat/SKILL.md