Feature · Settings

WhatsApp

The number your crew answers and who may message it.

Last changed

Generated from commit 1d7dbff ·

How it works

Connect in one click

When your Crewshal server offers it:

  1. On the WhatsApp page in Settings, select Set up WhatsApp. In setup, go to the channels step. Then select Connect WhatsApp. You can type your own WhatsApp number first.
  2. In Meta's window, sign in, pick or create the business and the WhatsApp account, and add and verify a number. Meta may ask for a payment method. This part belongs to Meta and you cannot skip it.
  3. When the window closes, Crewshal shows a checklist: Token, Webhook, Number, Template and Allowed sender. Each failed step has Retry.

WhatsApp works when the token, webhook and number are done.

Your number

Only allowed numbers reach the CEO. Crewshal ignores and logs messages from other numbers.

  • When you typed your number, it becomes the allowed sender.
  • Otherwise Crewshal shows a 6-character claim code. Send it from your phone to the business number within 15 minutes. It works one time.

Add other members' numbers under Allowed senders on the WhatsApp page.

The 24-hour window

Meta lets a business write freely only within 24 hours after your last message. Outside that window, Crewshal uses an approved template message, agent_update by default: "There is an update on your request". Reply to it to continue. Until the template is approved, write to the business number first to open the window.

Talk to a worker by name

One WhatsApp number serves the whole team. Each worker signs its messages with a bold name line, such as *🟣 Maya · Sales*.

  • Write @maya draft the newsletter, maya: … or /ask maya …. Maya owns the work and answers.
  • Reply to a worker's message to answer that worker.
  • Send /team to see the team and tap a name. Send /who to see who answers, and /back to return to the CEO.
  • A message without a name stays with the worker you talked with in the last 15 minutes.

An admin can give a worker its own number for a customer-facing line, such as "Acme Sales". Meta accepts only a business or department name for it, and each number has its own 24-hour window.

Limits

  • Meta can hold back template messages under its own limits. Then Crewshal does not resend the same template for 24 hours. The words wait and follow when you write.
  • Crewshal drops queued messages that are older than 72 hours.
  • Only owners and admins can set up WhatsApp.

Manual setup

An admin can also enter the phone number id, business account id, access token, app secret and verify token by hand. On the WhatsApp page, open Use your own Meta credentials.

From the help article WhatsApp, checked against the product on .

What you can do

The operations this feature's screens call. Each one is POST /api/<name>, and the badge says who may call it.

  • getOrgSettings

    Viewer

    Gets org settings.

    Types: { includePanels?: true } returns OrgSettingsDto

  • getKillSwitch

    Viewer

    Gets the kill switch.

    Types: EmptyRequest returns KillSwitchDto

  • whatsapp/status

    Viewer

    WhatsApp: status.

    Types: EmptyRequest returns WhatsAppStatusDto

  • listMembers

    Viewer

    Lists members.

    Types: EmptyRequest returns ListMembersResponse

  • whatsapp/configure

    AdminNo API tokens

    WhatsApp: configure.

    Types: WhatsAppConfigureRequest returns WhatsAppStatusDto

  • whatsapp/useUtilityTemplate

    AdminNo API tokens

    WhatsApp: uses the utility template.

    Types: EmptyRequest returns WhatsAppStatusDto

  • whatsapp/sendTest

    AdminNo API tokens

    WhatsApp: sends a test.

    Types: WhatsAppSendTestRequest returns WhatsAppSendTestResponse

  • frontDesk/team

    Viewer

    Front desk: team.

    Types: Record<string, never> returns TeamRosterDto

  • frontDesk/numbers

    Viewer

    Front desk: numbers.

    Types: Record<string, never> returns FrontDeskNumbersDto

  • frontDesk/bindNumber

    AdminNo API tokens

    Front desk: binds the number.

    Types: { integrationId: string; workerId: string | null } returns FrontDeskNumbersDto

  • frontDesk/syncProfile

    AdminNo API tokens

    Front desk: syncs the profile.

    Types: FrontDeskSyncProfileRequest returns FrontDeskNumbersDto

  • frontDesk/connectNumber

    AdminNo API tokens

    Front desk: connects the number.

    Types: FrontDeskConnectNumberRequest returns FrontDeskNumbersDto

  • frontDesk/connectNumberSignup

    AdminNo API tokens

    A second number through Meta's Embedded Signup popup: the same steps as the front desk's one click, bound to a worker.

    Types: { workerId: string; code: string; phoneNumberId: string; wabaId: string } returns FrontDeskNumbersDto

  • frontDesk/checkGroups

    AdminNo API tokens

    Front desk: checks groups.

    Types: Record<string, never> returns FrontDeskNumbersDto

  • frontDesk/createGroup

    AdminNo API tokens

    Front desk: creates a group.

    Types: { subject?: string } returns FrontDeskNumbersDto

  • listWorkers

    Viewer

    Lists workers.

    Types: ListWorkersRequest returns ListResponse<WorkerSummary>

  • whatsapp/embeddedSignup

    AdminNo API tokens

    WhatsApp: embedded signup.

    Types: WhatsAppEmbeddedSignupRequest returns WhatsAppStatusDto

  • whatsapp/retrySetup

    AdminNo API tokens

    WhatsApp: retries setup.

    Types: WhatsAppRetrySetupRequest returns WhatsAppStatusDto

Screens

What it records

The feature writes these events to the audit log, the permanent record of what happened.

  • Integration changed
  • Policy changed
  • Budget reserved
  • Checkpoint saved
  • Context retrieved
  • Memory recalled
  • Model called
  • Policy evaluated
  • User signed in

Generated from code at commit 1d7dbff ·

Turn the numbers into shipped work.

Crewshal runs these choices for you: a persistent AI worker with memory and rules, on your Claude and Codex subscriptions.