# Request WhatsApp Contact Info

Show WhatsApp's native Share Contact Info button so a username-only chat can give you a real phone number to message on.

## Getting here

**Automate → Workflows**, open a workflow, click **+** on the canvas, then pick **Request WhatsApp Contact Info** under **Add Steps**.

## Before you start

- An **owner**, **admin** or **agent** can add this step and save the workflow. Publishing that workflow — the thing that makes it run on live conversations — is an **owner** or **admin** action.
- Building and running workflows depends on your plan; see [pricing](/pricing).
- Nothing outside Inchat has to be connected. The step sends on the conversation's own WhatsApp channel.

## Set up

1. Open the workflow and click **+** where the request belongs.
2. Pick **Request WhatsApp Contact Info**.
3. Write the message shown above the button — for example, "Please share your contact info so we can follow up."
4. Save the step, then publish the workflow.

## Fields

| Field | What it means |
| --- | --- |
| Text | The message shown above WhatsApp's own Share Contact Info button. |

## How it works

- The step sends your text with WhatsApp's native contact-request button attached, going through the same send path as **Send a Message** — the same 24-hour session-window check applies before it reaches WhatsApp.
- When the customer taps the button and shares their own number, the inbound reply carries `origin: contact_request` — WhatsApp's own marker that this is the number the person confirmed as theirs, not a vCard they forwarded from someone else.
- Only a number carrying that marker is written onto the contact and used to look for an existing contact with the same phone to merge into; a hand-shared vCard (a contact card sent as an attachment, not a tap on this button) is shown in the thread but never used to identify or merge the sender.
- Nothing here checks whether the chat is username-only before sending — the step sends the button on any WhatsApp conversation, whether or not a phone number is already on file for it.

## When it fails

- Messaging window closed: the send is refused before it reaches WhatsApp, the same way **Send a Message** is. The execution log's line for this step reads **Messaging window closed — free-form send blocked. Use a send_template step (approved WhatsApp / utility template) instead.**
- The customer never taps the button: nothing else happens. The step itself already succeeded (the button was shown); there is no separate failure for an un-answered request and no timeout of its own — the run has already moved on by the time (or if) the customer taps, so there is no later point in the same run that can react to whether they did.
- This step has no failure branch of its own; a failed send here does not stop the rest of the run — steps placed after it still happen.

## Limits

- It does not pause the run to wait for the tap. The workflow continues immediately after the button is sent, the same turn, and nothing later in that same run can check whether the customer answered — a Condition rereads the contact fields the run started with, not a live copy (the one exception is marketing consent), so a Wait followed by a Condition on the contact's phone still sees the value from before the tap. Use **Ask a Question** instead if the flow needs to pause for an answer and branch on it.
- It only writes a number the customer confirmed by tapping the button (`origin: contact_request`). A vCard they share by hand is displayed in the thread but ignored for merging — it could be anyone's card, not necessarily their own number.
- It is a WhatsApp-native button; on a chat that already has a phone number on file it still sends, even though the point of the step — capturing a first number — no longer applies there.
- It does not itself check the chat is username-only. Nothing prevents adding this step to any WhatsApp flow; whether it makes sense is for the workflow's author to judge.

## Best practices

- Use it on a flow that started from a username-only WhatsApp chat — WhatsApp is the only channel this step sends on.
- Treat this as a one-way capture, not a question the flow can branch on: nothing in this run can tell whether the tap happened, so do not design the steps after it as if they know.

## Use cases

- A username-only WhatsApp customer asks about an order; the flow requests their number before continuing so a human can look it up in another system.

## FAQ and troubleshooting

### Does the workflow wait for the customer to share their number?

No. The step sends the button and the run continues immediately, and nothing later in the same run can check whether they tapped it — a Condition reads the contact fields the run started with, not a live copy (marketing consent is the one exception), so even a Wait placed after this step does not help. Use Ask a Question instead if the flow needs to pause and branch on an answer.

### The customer sent a contact card instead of tapping the button — did that count?

No. Only a number shared by tapping WhatsApp's own button is trusted and written onto the contact. A forwarded contact card could belong to anyone, so it is shown in the thread but not used to identify the sender.

### Can this reach a customer whose messaging window has closed?

No. Like Send a Message, it is refused outside the session window. There is no template equivalent for this exact button inside this step; Send WhatsApp Template with a REQUEST_CONTACT_INFO button is the outside-the-window path.

## Related

- [Send a Message](https://inchat.inseller.my/help/workflows/send-a-message)
- [Ask a Question](https://inchat.inseller.my/help/workflows/ask-a-question)
- [Start a WhatsApp Chat (new number)](https://inchat.inseller.my/help/workflows/start-a-whatsapp-chat)
- [Workflows: how a flow runs](https://inchat.inseller.my/help/workflows/workflows-overview)

---

Source files: `src/lib/workflows/ai-builder/spec.ts`, `src/lib/workflows/canvas-model.ts`, `src/components/workflows/WorkflowStepConfigDrawer.tsx`, `src/lib/workflows/engine-message-actions.ts`, `src/lib/whatsapp/bsuid.ts`, `src/lib/webhooks/normalize/whatsapp.ts`, `src/lib/inbox/wa-window.ts`, `src/lib/workflows/condition-catalog.ts`, `src/lib/workflows/live-consent-field.ts`, `src/lib/access/permissions.ts`
