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

# Visitor Approval on WhatsApp

> Let hosts approve or reject their visitors by replying to a WhatsApp message. Configure the approval message, the response options, and the Twilio content template used outside the 24-hour messaging window.

When a walk-in visitor arrives at your NexIO front desk and selects a host, that host can be asked to approve the visit before access is granted. In addition to the standard approval email, Nexudus can also send the request over **WhatsApp** so the host can respond straight from their phone — by tapping a number, typing "approve", or asking your AI assistant to "approve all" pending visitors.

This page explains how to configure the WhatsApp visitor approval channel and how the flow works end to end.

<Note>
  This feature requires the AI WhatsApp channel to be set up first. If you have not connected WhatsApp yet, follow the [WhatsApp channel setup](/member-portal/ai/setup-whatsapp) guide before continuing.
</Note>

## What it does

When a visitor is registered via **NexIO** with a host assigned, visitor approval is required, and the AI WhatsApp channel is enabled for the location:

1. The host receives a WhatsApp message asking them to approve or reject the visitor.
2. The host replies — with **1**, **2**, **3**, or in their own words ("approve Alex and I'll collect them").
3. The visitor's approval status is updated on the visitor record, staff subscribed to visitor notifications are notified, and — if configured — the visitor is checked in automatically.

The host can also reply to your AI assistant at any time to list who is waiting ("any visitors?") or process multiple visitors at once ("approve all").

## Prerequisites

Before the WhatsApp approval message can be sent, all of the following must be true:

| Requirement                                                                                                                                          | Where to check                                            |
| ---------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- |
| **AI WhatsApp is enabled** for the location                                                                                                          | Settings → AI assistant → AI WhatsApp                     |
| **Visitor approval is required** for walk-in visitors at this location (the "Require host approval for walk-in visitors" checkbox in NexIO settings) | Settings → Apps and integrations → Companion apps → NexIO |
| **The host is a customer** with a saved **mobile phone number** in their profile                                                                     | Customer profile → Details                                |
| The visitor was registered through **NexIO** (walk-in), with a host assigned                                                                         | Visitor form → Host                                       |

If any of these conditions are not met, only the email approval request is sent. The WhatsApp message is silently skipped.

## Configure the approval message

The visitor approval settings are grouped together on the AI assistant page.

<Steps>
  <Step title="Open AI WhatsApp settings">
    In the Nexudus administration panel, go to **Settings → AI assistant** and scroll to the **AI WhatsApp** section. Make sure **AI WhatsApp** is toggled on.
  </Step>

  <Step title="Find the Visitor approval message block">
    Under AI WhatsApp, expand the **Visitor approval message** block. This is where you customise the message the host receives.
  </Step>

  <Step title="Fill in the fields">
    | Field                                                    | What it controls                                                                                                                                                                                                                             |
    | -------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | **Opt-in visitor approval message template content SID** | The Twilio content template SID (starts with `HX…`) used to reach the host when your last conversation with them on WhatsApp is more than 24 hours old. See [Create the Twilio content template](#create-the-twilio-content-template) below. |
    | **Custom approval message intro**                        | The first line of the approval message the host receives inside the 24-hour window. Use the placeholder `{{visitorName}}` to insert the visitor's name. The numbered options are appended automatically below this line.                     |
    | **"Approve, I'll collect them" label**                   | Label shown next to number 1 (or 2, depending on which options are enabled). Defaults to `Approve, I'll collect them`.                                                                                                                       |
    | **"Approve, send to my unit/desk" label**                | Label for the "grant access" option. Defaults to `Approve, send to my unit/desk`.                                                                                                                                                            |
    | **"Reject" label**                                       | Label for the rejection option. Defaults to `Reject`.                                                                                                                                                                                        |
  </Step>

  <Step title="Save">
    Click **Save** at the top of the page. The new message applies to the next visitor registered.
  </Step>
</Steps>

<Info>
  The **Approve, I'll collect them** and **Approve, send to my unit/desk** labels are disabled automatically if you have turned off the corresponding options in the NexIO visitor approval settings (`Host can choose to collect visitors at reception` / `Host can choose to send visitors to their unit or desk`). Only the options currently enabled for your location are shown to the host — and numbered accordingly.
</Info>

### What the host receives

With the default settings, a host with a pending visitor called Alex Smith receives a message that looks like this:

```
You have a visitor waiting for your approval: Alex Smith
1. Approve, I'll collect them
2. Approve, send to my unit/desk
3. Reject
```

If you customise the intro to, for example:

```
Hi! {{visitorName}} is at reception. Reply with one of the options below to let us know what you'd like to do.
```

…the host would see:

```
Hi! Alex Smith is at reception. Reply with one of the options below to let us know what you'd like to do.
1. Approve, I'll collect them
2. Approve, send to my unit/desk
3. Reject
```

## Create the Twilio content template

WhatsApp only allows you to send free-form messages to a customer if that customer has messaged your business on WhatsApp in the **last 24 hours**. Outside that window, WhatsApp requires you to send a **pre-approved template** — a fixed message reviewed by Meta.

For visitor approvals, Nexudus therefore uses a two-step flow when the host has not messaged you recently:

1. Send the pre-approved template asking the host to reply with the opt-in keyword (for example, "yes").
2. When the host replies with the keyword, the actual approval message (with the numbered options) is sent as a free-form follow-up.

<Steps>
  <Step title="Create a template in Twilio">
    In your Twilio Console, go to **Content > Templates** and click **Create Template**.

    Use a template that names the visitor and asks the host to reply to receive the approval options. For example:

    ```
    You have a visitor at reception: {{1}}. Reply YES to receive the approval options.
    ```

    The template uses a single variable:

    * `{{1}}` — the visitor's full name (Nexudus fills this in automatically for each approval request).

    Submit the template for Meta approval. Once approved, note its **Content SID** (starts with `HX`).
  </Step>

  <Step title="Paste the SID into Nexudus">
    Back in Nexudus, paste the SID into the **Opt-in visitor approval message template content SID** field under **AI WhatsApp → Visitor approval message**.
  </Step>

  <Step title="Confirm the opt-in keyword">
    The opt-in keyword is shared with the rest of the outbound messaging setup (**Settings → AI assistant → AI WhatsApp → Outbound messaging → Opt-in keyword**). It defaults to `yes` and is case-insensitive.
  </Step>
</Steps>

<Warning>
  If you leave the template SID empty, hosts who have not messaged you in the last 24 hours will not receive a WhatsApp approval request. The email approval request is still sent as normal.
</Warning>

## How the flow works

<Steps>
  <Step title="Visitor self-registers at NexIO">
    A guest walks in and registers at the NexIO kiosk. They select their host from the customer list. The visitor's approval status is set to **Requested**.
  </Step>

  <Step title="Nexudus sends the approval message">
    * **If the host has messaged your WhatsApp number in the last 24 hours**, Nexudus sends the customised approval message directly, with the numbered options.
    * **If not**, Nexudus first sends your approved Twilio template asking the host to reply with the opt-in keyword (e.g. "yes"). Once they reply with the keyword, the approval message with the numbered options is sent.

    The approval email is also sent, so the host can respond from whichever channel is more convenient.
  </Step>

  <Step title="Host replies on WhatsApp">
    The host can reply in whichever way is most natural:

    * **Number** — `1`, `2`, or `3`, matching the options shown in the message.
    * **By name** — `approve Alex`, `reject John`, `approve Maria and send her to my desk`, `approve Bob, I'll collect him`.
    * **By state** — if there is only one visitor waiting, `approve` on its own is enough.
    * **In bulk** — `approve all` processes every pending visitor for that host. The AI asks once which approval type to apply, then applies it to all of them.

    The host can also simply ask `any visitors?` or `who's waiting?` and the AI will list everyone currently pending.
  </Step>

  <Step title="AI confirms the choice">
    Before making any change, the AI reads the visitor's name, expected arrival time, and the chosen action back to the host, then asks them to confirm — for example:

    > Just to confirm: approve Alex Smith (expected at 10:30), option **Approve, I'll collect them**? Reply *confirm* to apply or *cancel* to abort.

    Nothing is updated until the host confirms.
  </Step>

  <Step title="Status is updated and staff are notified">
    Once confirmed, the visitor's approval status is set on the record — **Accepted — hold for collection**, **Accepted — grant access**, or **Rejected**. Staff members with **Visitor registration** notifications enabled receive a system message about the outcome.

    If the host chose **Approve, send to my unit/desk** and **Automatically check approved visitors in** is enabled in NexIO settings, the visitor is also checked in automatically at that moment.
  </Step>
</Steps>

### Handling multiple visitors

If a host mentions several visitors at once ("approve Bob but reject John"), the AI drafts each decision, presents a combined summary, and only applies the changes after the host confirms the full set. This makes it safe to process a busy morning of walk-ins in a single reply.

### If the AI cannot find the host

If the mobile number the host is messaging from does not match any customer profile, the AI asks the host to check the mobile number saved in their member profile. Approvals are only applied once the number can be matched to a customer.

## What happens on the visitor record

Regardless of whether the host replies by email, on WhatsApp, or via the Passport mobile app, the visitor record ends up in one of these states:

| Status on visitor record           | Meaning                                            |
| ---------------------------------- | -------------------------------------------------- |
| **Requested**                      | Waiting for the host's response                    |
| **Accepted — hold for collection** | Host will come to reception to collect the visitor |
| **Accepted — grant access**        | Visitor may proceed to the host's desk or unit     |
| **Rejected**                       | Host has turned the visitor away                   |

The status is visible in the callout at the top of the visitor form in the Nexudus administration panel and in the **Status** column on the visitors list.

## Turning it off for a specific location

* To stop sending WhatsApp approval requests entirely, turn off **AI WhatsApp** for the location.
* To keep the WhatsApp channel but skip the approval flow, disable **Require host approval for walk-in visitors** in the NexIO settings for that location. Visitors registered without approval requirements do not trigger a WhatsApp message.
* To remove one of the approval options (say, the "send to my unit/desk" option), toggle it off in NexIO settings. The corresponding option is automatically removed from the WhatsApp message and no longer accepted as a reply.

## Costs

The visitor approval message is sent via your Twilio WhatsApp sender. Twilio charges per WhatsApp conversation window in line with their [WhatsApp pricing](https://www.twilio.com/en-us/whatsapp/pricing). Nexudus does not add any extra charges.

Because the same 24-hour conversation window is reused for follow-up messages, a typical approval interaction (template + opt-in reply + approval message + host reply) costs one business-initiated conversation.

## Troubleshooting

<AccordionGroup>
  <Accordion title="The host never receives a WhatsApp message">
    Check, in order:

    * The host has a **mobile phone number** on their customer profile (including country code).
    * **AI WhatsApp** is enabled for the location.
    * **Require host approval for walk-in visitors** is enabled in NexIO settings for the location.
    * The visitor was registered via **NexIO** (visitors created by staff or by customers in the Members Portal do not trigger approval).
    * The Twilio **Auth Token** in Nexudus matches the current token in your Twilio Console.
  </Accordion>

  <Accordion title="The host receives the template but not the approval message">
    The template is sent when your last conversation with the host is more than 24 hours old. The follow-up message with the numbered options is only delivered when the host replies with the configured opt-in keyword (default: `yes`).

    * Ask the host to reply with the exact keyword.
    * Confirm the keyword under **Settings → AI assistant → AI WhatsApp → Outbound messaging → Opt-in keyword**.
    * If the host replies with something else, the template expires quietly after 24 hours and no approval message is sent.
  </Accordion>

  <Accordion title="The host replied but the visitor's status did not update">
    The AI always asks the host to confirm before applying a decision. If the host did not reply *confirm* (or an equivalent), the decision was drafted but not applied.

    * Ask the host to check the last message from the AI — it will either be the confirmation prompt (needs a `confirm` reply) or a message saying the confirmation window expired (needs a fresh reply).
  </Accordion>

  <Accordion title="The AI says it cannot match the phone number">
    The mobile number the host is messaging from does not match the mobile number stored on their customer profile. Update the customer's mobile number in the administration panel — including the country code and `+` prefix — and ask the host to send their reply again.
  </Accordion>

  <Accordion title="I want to change the wording after approval, not just the intro">
    The numbered option labels (`Approve, I'll collect them`, `Approve, send to my unit/desk`, `Reject`) are configurable in **AI WhatsApp → Visitor approval message**. Change any of them to match the language your hosts already use.

    The confirmation prompt shown by the AI cannot currently be customised.
  </Accordion>
</AccordionGroup>

## Related pages

<CardGroup cols={2}>
  <Card title="Visitors" icon="user-plus" href="visitors">
    Main visitor management — registration, check-in, and lifecycle.
  </Card>

  <Card title="Visitor Approval" icon="circle-check" href="visitor-approval">
    Configure the visitor approval workflow and response options.
  </Card>

  <Card title="WhatsApp channel setup" icon="whatsapp" href="/member-portal/ai/setup-whatsapp">
    Connect your Twilio account and register a WhatsApp sender before configuring visitor approvals.
  </Card>
</CardGroup>
