> ## Documentation Index
> Fetch the complete documentation index at: https://docs.contactship.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Configure a channel

> Set assignment, hours, greetings, inactivity alerts, and conversation webhooks.

export const Availability = ({lang = 'es', plan, addon, permission, route, status}) => {
  const L = lang === 'en' ? {
    plan: 'Plan',
    addon: 'Add-on',
    permission: 'Permission',
    route: 'Where',
    status: 'Status',
    addonNote: 'enabled on request',
    allPlans: 'All plans',
    beta: 'Beta',
    nuevo: 'New',
    soon: 'Coming soon'
  } : {
    plan: 'Plan',
    addon: 'Add-on',
    permission: 'Permiso',
    route: 'Dónde',
    status: 'Estado',
    addonNote: 'se activa a pedido',
    allPlans: 'Todos los planes',
    beta: 'Beta',
    nuevo: 'Nuevo',
    soon: 'Próximamente'
  };
  const items = [];
  if (plan) items.push([L.plan, plan]);
  if (addon) items.push([L.addon, `${addon} · ${L.addonNote}`]);
  if (permission) items.push([L.permission, permission]);
  if (route) items.push([L.route, route]);
  if (status) items.push([L.status, L[status] || status]);
  return <div style={{
    display: 'flex',
    flexWrap: 'wrap',
    gap: '6px 22px',
    padding: '12px 16px',
    margin: '4px 0 24px',
    border: '1px solid rgba(2, 82, 255, 0.28)',
    borderLeft: '3px solid #0252ff',
    borderRadius: '8px',
    background: 'rgba(2, 82, 255, 0.05)',
    fontSize: '13.5px',
    lineHeight: '1.5'
  }}>
      {items.map(([k, v]) => <div key={k} style={{
    display: 'flex',
    gap: '6px',
    alignItems: 'baseline'
  }}>
          <span style={{
    fontSize: '10.5px',
    fontWeight: 600,
    letterSpacing: '0.07em',
    textTransform: 'uppercase',
    opacity: 0.65
  }}>{k}</span>
          <span style={{
    fontWeight: 500
  }}>{v}</span>
        </div>)}
    </div>;
};

<Availability lang="en" route="Settings → Inbox → Channels → Channel settings" permission="channels.update" />

Configure each channel independently. Review all changes and use **Save changes**; the WhatsApp calling toggle is an immediate exception.

## Assignment

Rules are evaluated in order. Put specific schedules above an always-matching default. Choose **Always** or a schedule with days, start/end times, and time zone. A range ending before its start crosses midnight.

Targets are an AI text agent, a person, or a rotation labeled **Team**. This rotation selects people; it is not the organization’s team hierarchy.

| Rotation setting | Behavior                                                                   |
| ---------------- | -------------------------------------------------------------------------- |
| Round robin      | Assigns to the next eligible person.                                       |
| Least busy       | Uses assignments over a 1–30 day window, default 7.                        |
| Weighted         | Uses member weights, from 1–100 when selecting people.                     |
| Members          | All eligible people with exclusions, or a selected list.                   |
| Online only      | Excludes people without the app open.                                      |
| Fallback         | Required for a rotation; choose AI or a person when no member is eligible. |

A rule pointing to AI needs an agent. Complete every schedule and fallback before saving.

## Replies and operating hours

Choose the channel time zone and weekly windows. Presets replace existing windows, so review them before saving. The default schedule is Monday–Friday 09:00–18:00 in America/Mexico\_City. Holidays and exceptions are full dates.

The out-of-hours message is sent while AI replies are held until service hours resume. Human composers are not blocked by the operating schedule. An optional out-of-hours POST webhook provides `thread_id`, `from`, `message`, and `timestamp`.

Automatic greetings can run on the first agent response, the first response each day, or after inactivity of at least one hour. Choose to prepend the greeting to the AI reply or send a fixed greeting without an AI reply. Review the preview and interaction with working hours.

## Alerts, connection, and calling

Inactivity alerts take a positive value in minutes, hours, or days. Duplicate durations are rejected. Connection settings show the channel connection and name.

The calling section displays number eligibility and messaging tier. The inbound WhatsApp calling toggle saves immediately and is disabled for an ineligible number. A displayed calling option does not guarantee every channel can use it.

## Advanced conversation webhook

Choose the URL and events: `INSERT` for conversation creation, `UPDATE` for changes, and `DELETE` for deletion. These are conversation events, distinct from outgoing call webhooks and automation rules. Verify the actual received payload for your integration.

Use the test-message QR/link to open the channel from a phone and send a controlled message. Check both assignment and reply behavior after saving.

## Frequently asked questions

<AccordionGroup>
  <Accordion title="Why did a conversation go to the wrong person?">
    Check the first matching rule, schedule time zone, eligible people, and fallback.
  </Accordion>

  <Accordion title="Does the operating schedule block humans?">
    No. It controls AI/out-of-hours behavior; human composers remain available subject to the WhatsApp reply window.
  </Accordion>

  <Accordion title="Why won’t the settings save?">
    Look for an incomplete AI target, missing rotation fallback, incomplete schedule, or invalid alert duration.
  </Accordion>

  <Accordion title="Does enabling WhatsApp calling need Save changes?">
    The calling toggle applies immediately.
  </Accordion>
</AccordionGroup>

## See also

* [Connect WhatsApp](/en/messages/connect-whatsapp)
* [Inbox](/en/messages/inbox)
* [Automations](/en/messages/automations)
