Phone

Set up how calls are answered

phone_setup_assistant · Changes data · Markdown

Sets how the business's numbers answer (the agent's webhook or taking messages), the greeting, voice and hours, and whether messages become tickets.

$0.001 a call

From your agent’s balance. A call that fails costs nothing.

An example

Answer our number yourself during shop hours, Monday to Saturday, and tell callers right away that they're talking to an AI.

Your agent callsphone_setup_assistant$0.001 a call

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
{
  "greeting": "Hi, you've reached Halverson Cycle & Repair. This is our automated line: how can we help?",
  "answer_with": "webhook",
  "webhook_url": "https://agent.halversoncycle.example/conecto/phone",
  "timezone": "America/Los_Angeles",
  "language": "en",
  "hours": [
    {
      "day": "monday",
      "start": "10:00",
      "end": "19:00"
    },
    {
      "day": "tuesday",
      "start": "10:00",
      "end": "19:00"
    },
    {
      "day": "wednesday",
      "start": "10:00",
      "end": "19:00"
    },
    {
      "day": "thursday",
      "start": "10:00",
      "end": "19:00"
    },
    {
      "day": "friday",
      "start": "10:00",
      "end": "19:00"
    },
    {
      "day": "saturday",
      "start": "10:00",
      "end": "16:00"
    }
  ]
}
What comes back
{
  "assistant": {
    "answering": true,
    "not_answering_because": [
      "Outside the answering hours right now."
    ],
    "name": "Phone assistant",
    "greeting": "Hi, you've reached Halverson Cycle & Repair. This is our automated line: how can we help?",
    "language": "en",
    "answer_with": "webhook",
    "message_ack": "Thank you, I've noted that. Is there anything else?",
    "cant_answer": "Sorry, I can't answer that right now. Please tell me your message and we'll get back to you.",
    "open_tickets": "off",
    "webhook_url": "https://agent.halversoncycle.example/conecto/phone",
    "webhook_last_ok_at": null,
    "webhook_last_error": null,
    "voice": {
      "id": "stock_voice",
      "name": "George"
    },
    "timezone": "America/Los_Angeles",
    "hours": [
      {
        "day": "monday",
        "start": "10:00",
        "end": "19:00"
      },
      {
        "day": "tuesday",
        "start": "10:00",
        "end": "19:00"
      }
    ],
    "max_call_minutes": 5,
    "numbers": [
      "+15035550123"
    ],
    "price": {
      "per_started_minute_usd": "$0.25",
      "held_per_call_usd": "$1.25"
    }
  },
  "webhook_secret": "whsec_example_shown_once"
}

Use it when

Right after renting a number, or when the greeting, hours, language, voice or webhook change.

What it does

Choose how the business's numbers are answered; Conecto hears and speaks, you are the brain. answer_with webhook: each thing a caller says is POSTed to webhook_url (signed with the webhook_secret returned once: X-Conecto-Signature is sha256= the HMAC of the body) with the conversation so far, and you answer {"say": "...", "end_call": false} within about 2.5 seconds (the caller hears "one moment" after that; after 8 seconds the line takes a message instead). answer_with messages: the line takes the caller's message. Either way the whole call reaches you afterwards as a phone.message_left or phone.call_ended event. Only the fields you pass change; the first time pass greeting and timezone. Answered calls cost $0.25 per started minute; each call holds max_call_minutes × $0.25 while it runs.

What comes back

The assistant as set: whether it answers now (and why not), name, greeting, language, voice, how it answers, whether calls open tickets, hours and call limit, and the webhook_secret, shown once when it is made. Every reply also carries cost_usd and balance_usd.

Inputs

NameTypeWhat it is
greetingstringWhat callers hear right after Conecto's short notice, in the line's language, that the AI call is recorded and transcribed. It must say they reached an automated line or an AI, e.g. "Hi, you've reached Acme. This is our automated line: how can we help?" Taking messages, ask for their message, name and number. 1 to 600 characters.
answer_withstringmessages (the default) or webhook. One of: messages,webhook.
webhook_urlstringYour https endpoint for each turn. Up to 500 characters.
rotate_secretbooleanMake a new webhook_secret (the old one stops working). Default: false.
message_ackstringTaking a message: what the line says after each thing the caller says. Up to 300 characters.
cant_answerstringWhat the line says when your webhook did not answer in time. Up to 300 characters.
open_ticketsstringmessages: each message left opens a help desk ticket with the transcript (or joins the open one the caller has); calls: every call the caller spoke on. $0.01 per ticket opened. Default off. One of: off,messages,calls.
namestringThe line's name. 1 to 80 characters.
languagestringThe language it speaks. One of: af,ar,hy,as,az,be,bn,bs,bg,ca,ceb,ny,hr,cs,da,nl,en,et,fil,fi,fr,gl,ka,de,el,gu,ha,he,hi,hu,is,id,ga,it,ja,jv,kn,kk,ky,ko,lv,ln,lt,lb,mk,ms,ml,zh,mr,ne,no,ps,fa,pl,pt,pa,ro,ru,sr,sd,sk,sl,so,es,sw,sv,ta,te,th,tr,uk,ur,vi,cy.
voicestringA voice id or name from phone_get_assistant. Up to 100 characters.
timezonestringIANA time zone of the business, e.g. America/New_York. Needed the first time. Up to 80 characters.
hoursarray of objectsWhen to answer, in the timezone; empty answers around the clock. Outside these hours callers get a busy signal. Up to 7 items.
hours[].dayRequiredstringOne of: monday,tuesday,wednesday,thursday,friday,saturday,sunday.
hours[].startRequiredstringMatches ^([01][0-9]|2[0-3]):[0-5][0-9]$.
hours[].endRequiredstringMatches ^([01][0-9]|2[0-3]):[0-5][0-9]$.
max_call_minutesintegerCalls end after this long (default 5). 1 to 10.
answeringbooleanfalse pauses answering; true resumes it.

The call

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

Terminal
curl -X POST https://api.conecto.chat/v1/tools/phone_setup_assistant \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"greeting":"Hi, you'\''ve reached Halverson Cycle & Repair. This is our automated line: how can we help?","answer_with":"webhook","webhook_url":"https://agent.halversoncycle.example/conecto/phone","timezone":"America/Los_Angeles","language":"en","hours":[{"day":"monday","start":"10:00","end":"19:00"},{"day":"tuesday","start":"10:00","end":"19:00"},{"day":"wednesday","start":"10:00","end":"19:00"},{"day":"thursday","start":"10:00","end":"19:00"},{"day":"friday","start":"10:00","end":"19:00"},{"day":"saturday","start":"10:00","end":"16:00"}]}'

When it refuses

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

CodeWhenWhat to do
greeting_needs_ai_disclosure400The greeting does not tell callers they reached an automated line or an AI.Say so in the greeting, like "This is our automated line".
timezone_required400This is the first setup and timezone is missing.Send the business's zone, like Europe/Berlin.
invalid_input400The webhook_url is missing, not https or not reachable from the internet, the voice is unknown, or another field is not valid.Fix what the message names; phone_get_assistant lists the voices.
phone_unavailable503The phone service is not switched on yet, or has no voices right now.Try again later; nothing was charged.

Give this to your agent.

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