WhatsApp AI for Real Estate Leads: Build the Permission Gate Before the Follow-Up
A WhatsApp AI lead assistant should decide whether a message is allowed before it decides what to say. Store the permission, channel, purpose, and evidence as structured data; calculate whether a customer-service window is open; then choose a relevant reply, an approved template, a human handoff, or no message.
This distinction matters in property lead handling. Someone who asks about one listing may welcome an answer about that property and still not expect an automated sequence of unrelated offers. For a concrete example, the WhatsApp Business lead workflow for real-estate inquiries illustrates the channel-and-CRM journey a team should inspect. The design question is whether each next contact is authorized and useful, not whether an assistant can send it quickly.
The practical rule is: on WhatsApp Business Platform, an eligible user message opens or refreshes a 24-hour customer-service window. Within it, automation may respond, but the current policy requires a prompt, clear, direct escalation route. Outside it, a business-initiated Platform conversation must use an approved message template. The window does not replace permission to contact the person, and a template does not create consent. Check the live policy for the exact product and jurisdiction before release.
The reusable asset here is a permission state machine, an evidence ledger, and a small validation function. They help prevent a common implementation error: treating lead captured, message sent, delivered, answered, and permission confirmed as if they meant the same thing.
The decision to make for each lead
Every contact attempt should resolve to one explicit action: respond within a valid service window; send a currently approved template outside that window when every prerequisite is satisfied; create a human task when automation reaches a boundary; or suppress the attempt because permission, identity, or system evidence is missing. “Try again later” is not a safe default if it ignores channel rules.
A lead’s qualification state is not the conversation state. A person can be a qualified buyer in the CRM while the WhatsApp service window is closed. A conversation can be open because the user recently messaged while the person has not agreed to another category of future contact. Someone can agree to viewing updates without agreeing to recurring property promotions. Store each fact separately.
For a property inquiry, an assistant can retrieve approved listing facts, capture a requested next step, record time preferences, and route a question to an agent. It should not infer permission from a phone number, assume a user wants a long nurture sequence, or say a viewing is confirmed before the calendar and confirmation steps succeed.
The answer to “may we send this now?” depends on product surface, the user’s latest interaction, message purpose, permission record, and applicable law. Meta’s current policy governs use of its products; local privacy and direct-marketing requirements can add conditions. This article presents an operational control, not legal advice or a substitute for jurisdiction-specific review.
What the visible results promise, and what is missing
A review of current search results for AI real-estate lead tools found a repeated product proposition: answer at all hours, contact quickly, qualify an inquiry, and book a showing. For example, Norin’s real-estate page advertises follow-up, CRM synchronization, and appointment booking. Agentes Inteligentes describes a voice-and-WhatsApp sequence for property developers. These are vendor descriptions of product features and claims. They do not establish a comparative response-time benchmark or prove that any specific follow-up pattern is compliant.
The missing detail is the operational permission boundary. A page may say “follow up,” but a buyer still needs to know how the system distinguishes an inbound reply from permission for future outreach; what it does at the 24-hour boundary; how it handles a rejected or paused template; how a person opts out; whether a human can take over; and how the CRM records the decision. A demo that flows from form submission to appointment is not enough to test those controls.
Search Console provides a narrow clue about the reader’s intent. In a Search Analytics capture reviewed on 29 October 2026, the selected page row for the WhatsApp Business agent page showed 348 impressions, five clicks, and average position 9.6 for 29 September through 26 October 2026. Among the query rows returned were “agent ia whatsapp” with 59 impressions and no clicks at average position 10.7; “agent ia whatsapp business” with 38 impressions and no clicks at 4.6; and “ia whatsapp business” with 28 impressions and two clicks at 5.4. These are one property’s observations under one report scope, not a complete query census or proof of commercial demand.
The page was indexed when checked on 29 October. URL Inspection reported a successful fetch, allowed crawling and indexing, and a Google-selected canonical matching the user-declared canonical; the recorded last crawl was 24 October. The live page returned HTTP 200 and self-canonicalized. This confirms the URL was eligible and represented in the indexed snapshot at that inspection. It does not guarantee future indexing or prove that a content change will move metrics.
A public support discussion surfaced a practical question: an operator said outbound messaging was blocked after the 24-hour window and that it was unclear how to collect opt-in for templates. That is an anecdotal user question, not policy authority. It illustrates the gap between a template being approved and permission evidence being available for a particular recipient. Read the discussion about collecting WhatsApp opt-in for proactive messages as an example of confusion, not as a source of platform rules.
Read the current WhatsApp policy precisely
The current WhatsApp Business Messaging Policy, displayed as updated 23 September 2026 when reviewed, applies to both the WhatsApp Business App and Business Platform, with Platform-specific conditions identified separately. It says a business may contact a person only when the business has the person’s phone number or username and has received opt-in permission for subsequent messages or calls. It places responsibility on the business to choose an opt-in method that complies with laws applicable to its communication.
For the Business Platform, the policy says a business may initiate a conversation only with an approved message template, used for its designated purpose. A business may reply without a template within the customer-service window. That window opens and resets with each user message and lasts 24 hours from the latest one. The policy permits automation during that window only where a prompt, clear, direct escalation path is available; listed routes include an in-chat human transfer or phone number. The text is subject to change, so re-check it at implementation time.
Do not compress these rules into one checkbox named “opted in.” A template is a message format and approval, not proof that the recipient agreed to a category of messages. An inbound question creates a service interaction; it does not automatically authorize every future offer. A reply inside an open window still needs to be relevant to the conversation and consistent with permission and local requirements. Meta recommends making expected message categories clear and offering understandable opt-out paths.
Keep the product boundary clear. The Platform-specific template rule should not be projected onto every feature of the Business App. Confirm whether the agency uses the App, Platform/API, or a provider that routes through one of them. A CRM integration’s screen does not identify the underlying product contract by itself. Document the actual messaging surface and policy version.
Platform compliance is not the same as legal compliance. Meta assigns responsibility for applicable laws, notices, and permission to the business. A team operating across countries needs a locally reviewed contact policy. The FCC’s 2024 ruling on AI-generated voices, for example, clarifies a United States rule for calls using artificial or prerecorded voices. It is relevant if a workflow adds calls in the United States; it does not govern WhatsApp messages globally and must not be presented as a rule for Spain, Mexico, or another market.
Permission data that survives the handoff
A permission record should make a send decision reproducible. Store the business identity shown to the person, channel, message purpose or category, the words or form version explaining the contact, date and time captured, source surface, action taken, and any later change or withdrawal. Keep only the data needed for the operational and legal purpose, with access and retention controls appropriate to the business.
Separate permission by channel and purpose. Permission to receive a viewing confirmation is not necessarily permission for a weekly digest of other listings. Permission for a text message is not necessarily permission for a voice call. A call request can be limited to one callback. If a web form bundles multiple categories, do not guess what the person understood. Show a clear choice and persist the actual selection.
For each outgoing attempt, retain a decision snapshot: product surface, latest user-message timestamp, calculated service-window state, intended message purpose, template identifier and approval state if relevant, permission record identifier, suppression check, and the reason for the chosen action. This is more useful than an unqualified CRM field called “WhatsApp allowed.” A reviewer needs to know what the automation knew when it acted.
For a property inquiry, distinguish source request from inferred preference. “Asked whether listing 847 is available” is an observed request. “Wants similar listings” is an inference unless the person said so. A question about one property does not establish a subscription. Record the property identifier, facts supplied by the person, requested next step, and unresolved questions without silently converting them into marketing preferences.
A human handoff needs an owner and a due state. “Escalated” alone can conceal a dropped conversation. Record the destination queue or named owner, transfer time, whether the agent accepted, the context the agent needs, and the next action. If the handoff fails, tell the person what will happen and create a monitored task rather than leaving an unacknowledged transfer indicator.
The Permission State Machine
This state machine separates permission evidence, the customer-service window, and delivery. It is a design model, not an official Meta taxonomy. The states represent the minimum facts needed to choose a next action.
stateDiagram-v2 [*] --> Captured Captured --> PermissionVerified: channel and purpose evidence present Captured --> Suppressed: evidence absent or ambiguous PermissionVerified --> WindowOpen: eligible user message within 24 hours PermissionVerified --> WindowClosed: no recent user message WindowOpen --> ServiceReplyAllowed: relevant reply and suppression clear WindowClosed --> TemplateRequired: Platform business-initiated message TemplateRequired --> TemplateAllowed: approved template and matching permission TemplateRequired --> Suppressed: template missing, rejected, or purpose mismatch ServiceReplyAllowed --> HumanRequested: person asks for a person TemplateAllowed --> HumanRequested: exception or uncertainty ServiceReplyAllowed --> Delivered: transport reports delivery TemplateAllowed --> Delivered: transport reports delivery HumanRequested --> HandoffPending HandoffPending --> HumanAccepted HandoffPending --> RecoveryTask: transfer not accepted Delivered --> OptedOut: person withdraws or asks to stop OptedOut --> Suppressed Suppressed --> [*] The diagram deliberately separates PermissionVerified, WindowOpen, and Delivered. Permission answers whether the business may contact this person for a stated purpose and channel. The service window answers which message form is available for a Platform reply. Delivery describes a transport result after an attempt. None of these states means that the recipient read, understood, or accepted the content.
Only an eligible user message should change the service-window state. A CRM form submission is not a WhatsApp message. An outbound delivery receipt is not a user message. A note from a salesperson that “the client is interested” is not automatically a permission artifact. Explicit event types prevent an arbitrary application event from refreshing the timer.
Check template status immediately before sending. Approval can be changed, paused, or rejected, and a template must be used for its designated purpose. Store the exact template identifier and the intended purpose. If a person edits the wording after approval, or an approved utility template is used for an unrelated promotion, the old approval record does not establish that the send is appropriate.
Opt-out is a state transition, not a phrase to append and forget. If the person asks to stop on WhatsApp or through another business channel, suppress future messages according to the applicable policy. The current policy says requests to block, discontinue, or opt out, including requests received off WhatsApp, must be respected for WhatsApp communications. Persist the time, scope, source, and systems updated.
A decision table for the lead team
Use this table as a routing contract among the form, messaging service, CRM, and human team. Make decisions from evidence, not from a sales representative’s general impression.
| Situation | Permission evidence | Platform window | Action | Evidence to keep |
|---|---|---|---|---|
| Person asks a question in WhatsApp | Existing record checked; reply relates to request | Open | Relevant service reply with clear escalation | Inbound event time and decision |
| Form asks for one WhatsApp callback | Channel and purpose explicitly selected | Closed | Apply current product rules; template where required | Form wording, selection, timestamp, property |
| Phone field exists but no message choice | No WhatsApp opt-in recorded | Any | Suppress WhatsApp; use only another requested route | Missing-evidence reason |
| Last user message is older than 24 hours | Permission may exist | Closed | Approved Platform template matching purpose | Last inbound, template ID, purpose |
| Person asks about similar listings | Scope explicitly requested | Open or closed | Answer only within current rules; avoid assuming ongoing offers | Exact request and selected next step |
| Template is paused or rejected | Permission may exist | Closed | Suppress; route to permitted alternative or human | Template state and failed decision |
| Person asks for an agent | Permission and window may be valid | Open | Offer direct transfer or phone route | Handoff request and acceptance |
| Latest inbound timestamp is missing | State uncertain | Unknown | Suppress Platform send and reconcile events | Missing event and recovery task |
| Person opts out by phone or email | Withdrawal recorded | Any | Update suppression and stop WhatsApp contact | Scope, source, timestamp |
| Listing status is stale | Contact may be allowed | Any | Do not assert availability; retrieve approved data | Source timestamp and uncertainty |
| User’s language is unsupported | Contact may be allowed | Any | Offer human or supported channel | Language signal and route |
| Calendar write succeeds but confirmation fails | Contact may be allowed | Any | Mark pending, then reconcile | Event ID, send state, owner |
A missing fact should not be silently treated as positive permission. Fail closed for an uncertain state, but fail helpfully: explain what can happen next, preserve an owned human task, and avoid making a person repeat information unnecessarily.
A relevant service reply stays near the question asked. If someone asks whether a named listing is available, retrieve the approved record for that listing. Do not pivot into unrelated offers just because a window is open. A 24-hour window is a technical condition, not a mandate to send or a license to ignore what the person expects.
An executable permission gate
This JavaScript function illustrates the decision boundary. It does not implement Meta’s API, legal consent evaluation, template approval, or CRM integration. It returns a conservative action from an already-normalized event. Verify those values at a trusted server boundary and point the permission record to durable evidence.
function decideWhatsAppAction(event, now = Date.now()) { const permission = event.permission; const purpose = event.messagePurpose; const inbound = event.lastInboundAt ? Date.parse(event.lastInboundAt) : NaN; const windowOpen = Number.isFinite(inbound) && now >= inbound && now - inbound < 24 * 60 * 60 * 1000; if (event.optedOut === true) { return { action: 'suppress', reason: 'withdrawal-recorded' }; } if (!permission?.verified || permission.channel !== 'whatsapp' || !permission.purposes?.includes(purpose)) { return { action: 'suppress', reason: 'permission-not-proven-for-purpose' }; } if (event.personRequestedHuman === true || event.needsReview === true) { return { action: 'handoff', reason: 'human-request-or-review-boundary' }; } if (event.surface === 'platform' && windowOpen) { return { action: 'service-reply', reason: 'eligible-window; escalation-route-required' }; } if (event.surface === 'platform') { if (event.template?.approved !== true || event.template?.purpose !== purpose) { return { action: 'suppress', reason: 'matching-approved-template-required' }; } return { action: 'template', reason: 'platform-window-closed' }; } if (event.surface === 'business-app') { return { action: 'manual-review', reason: 'confirm-product-and-current-rules' }; } return { action: 'suppress', reason: 'unknown-messaging-surface' }; } The function assumes permission evidence has already been verified. In production, permission should point to a durable record, not a model-generated Boolean. Confirm that lastInboundAt came from an authenticated inbound event and that clock skew, retries, duplicate webhooks, and out-of-order events are handled. A malformed timestamp should not be treated as an open window.
The 24-hour calculation represents the current policy description reviewed here. A production implementation should follow the platform’s current terms and event semantics, including account-specific or provider-specific details. It should not assume that a duplicate inbound webhook resets a window. Idempotency and event ordering are necessary to make the state trustworthy.
The function returns manual review for the Business App because a Platform template workflow should not be projected onto the App without checking product behavior. It returns a handoff when a person asks for human help or the system reaches a review boundary. A real system must make that action reachable and tell the person what to expect.
Appointment integrity: a request is not confirmation
Real-estate workflows often compress several events into “booked.” A lead can request a viewing, select a preferred time, receive a calendar invitation, and still lack a confirmed appointment. The ledger should distinguish requested, slot proposed, calendar created, confirmation sent, confirmation delivered, human accepted, and attendee confirmed whenever those states can be observed.
A booking action can fail after the assistant has told the person it succeeded. The calendar service may time out, create a duplicate on retry, or store the wrong time zone. A confirmation message may be rejected because the window closed or a template is unavailable. Keep a visible pending state and reconciliation task rather than a false “showing confirmed” flag.
Listing facts should be authoritative and timestamped. Availability, price, viewing conditions, and contact person should come from an approved record with a last-updated time. If the assistant cannot retrieve it, say that the detail cannot be verified and offer human follow-up. Do not turn old page copy, an inferred preference, or another listing’s status into a fact about the current property.
If a lead asks about financing, legal terms, building defects, or a sensitive personal circumstance, the assistant should not improvise professional advice. It can capture the question at a high level, offer a qualified human, and avoid requesting account numbers, documents, or unnecessary sensitive details in chat. The boundary should be reviewed for the relevant market and professional role; this is an operational safeguard, not a universal legal summary.
The system should be honest about automation. Do not pretend that an AI is a human agent. Explain the next step and provide a contact route. Clarity protects trust and allows the person to choose whether to continue.
Measure completed outcomes, not sends
A dashboard that reports the number of messages sent can make a weak workflow look productive. A better funnel starts with eligible leads, then tracks permission evidence, allowed attempts, delivered messages, replies, task completion, human handoffs accepted, and appointments actually confirmed. Keep the denominator visible at every stage.
Separate policy outcomes from commercial outcomes. A message can be eligible and irrelevant. A delivery does not mean it was read. A reply does not necessarily show qualified interest. A requested viewing can fail because the slot is unavailable. A completed viewing does not guarantee an offer. Do not describe sends, replies, appointments, showings, offers, and sales as interchangeable conversions.
The National Association of REALTORS® 2024 Technology Survey reported that 32 percent of respondents named CRM among the tools that gave them or their agents the highest number of quality leads over the previous twelve months, and 28 percent reported using AI and machine learning. These are survey responses, not a controlled comparison of WhatsApp systems; they do not establish that CRM or AI caused a lead or sale.
The Deloitte commercial real-estate outlook describes AI adoption among commercial real-estate organizations as early-stage for many respondents and emphasizes data readiness. It concerns commercial real estate, not residential brokerage leads. Use it for the broader implementation lesson that data quality and organizational readiness matter, not as a prediction about residential conversion rates.
A Gartner survey about human access in GenAI customer service reported that 87 percent of surveyed customers considered human access essential when companies use GenAI, from 3,566 B2B and B2C customers surveyed in February and March 2026. This is not a real-estate-specific result and does not show that a particular handoff improves bookings. It is a reason to test whether the human route is visible and usable, then measure the agency’s own experience.
The NIST AI Risk Management Framework gives organizations a voluntary structure for governing AI risks; it is not a WhatsApp requirement and cannot decide whether an individual message is allowed under Meta policy or local law. Use it to structure the control owner, evidence, monitoring, and escalation record. For evidence boundaries, the Stanford AI Index synthesizes broad trends in AI research and adoption, but it does not measure WhatsApp opt-in compliance, property-lead conversion, or the correctness of a specific agent. It is context for the technology landscape, not proof that this workflow is safe or effective.
A useful dashboard combines operational integrity and outcome quality. Operational measures include permission completeness, wrong-purpose suppression, template rejects, duplicate sends, handoff acceptance, stale listing facts, and unresolved retries. Outcome measures include response, valid task completion, confirmed appointment, attendance, and later commercial outcomes. State the cohort, channel, period, denominator, and exclusions. Without a fair comparison group, describe results as observations rather than incremental lift.
Sixteen acceptance cases before a pilot
Before sending to real leads, simulate ordinary paths, boundary states, failures, and reversals. The purpose is not to make the assistant sound polished. It is to verify the correct transition, honest user-facing wording, and recoverability by a human.
| Case | Setup | Expected result | Failure signal |
|---|---|---|---|
| 1. Inbound property question | User asks if a named listing is available | Answer from current approved record | Stale or invented availability |
| 2. Form with explicit WhatsApp choice | Permission includes channel and purpose | Apply current product-specific rules | Permission inferred from phone field |
| 3. Form without messaging choice | Number exists; no WhatsApp selection | Suppress and offer requested route | Message sent anyway |
| 4. Window open | Recent authenticated user message exists | Relevant reply and direct escalation | Timer started by outbound event |
| 5. Window closed | Last inbound exceeds 24 hours | Matching approved Platform template required | Free-form Platform send |
| 6. Template unavailable | No approved template for purpose | Suppress and create human task | Improvised substitute |
| 7. Purpose mismatch | Approved utility template; proposed promotion | Suppress | Approval treated as blanket permission |
| 8. User asks for a human | Conversation is open | Offer transfer or phone route | Bot repeats qualification questions |
| 9. Handoff queue unavailable | Transfer call returns error | Inform user; create recovery task | Success claimed without acceptance |
| 10. Opt-out in WhatsApp | Stop request received | Update suppression and stop messages | Nurture sequence continues |
| 11. Opt-out by phone | Agent records withdrawal | Update shared suppression record | Channel system keeps sending |
| 12. Duplicate webhook | Same inbound event repeats | One state change and no duplicate reply | Multiple messages or timer reset |
| 13. Out-of-order event | Older event arrives after newer | Preserve latest valid state | Timer reopens from stale timestamp |
| 14. Unknown listing status | Approved data source unavailable | State uncertainty and route to person | Hallucinated price or availability |
| 15. Calendar timeout | Appointment write result uncertain | Mark pending; reconcile idempotently | Confirmation sent before event exists |
| 16. Unsupported language | Confidence below approved threshold | Ask one repair question or route | Repeated guesses or false summary |
The test report should store input state, expected action, actual action, evidence reference, user-visible wording, software version, tester, date, and pass/fail. If a scenario fails, disable that path until corrected. A failure in case five must not be hidden by a high average across the other fifteen.
Do not report a pass rate from this designed set as a production accuracy statistic. The cases are deliberately selected to cover behavior; they are not a random sample of conversations. Their role is to expose failure modes before launch. If production performance is later reported, state the period, eligible population, case count, exclusions, and treatment of missing outcomes.
Failure modes and recovery
The phone field is treated as permission. A number may have been supplied for a listing question, a call, or an unrelated transaction. Verify that the record covers WhatsApp and this purpose. If not, suppress the message and use only another route the person requested.
An inbound question is treated as permission for every future message. The message begins a service interaction; it does not automatically prove the person wants recurring promotions. Keep permission scope separate from window status.
Template approval is treated as opt-in. Approval applies to the template and its designated purpose, not automatically to a recipient. Verify permission evidence for the person and the content category before sending.
The timer is refreshed by an incorrect event. Outbound messages, delivery receipts, duplicate webhooks, and CRM notes are not the same as an eligible user message. Use an authenticated inbound event and preserve its timestamp.
A failed handoff is presented as success. A transfer initiation is not agent acceptance. Show a pending state, explain the next step, and assign a monitored recovery task.
The assistant invents listing facts. A stale page, unavailable CRM, or vague prompt can tempt the model to fill gaps. Restrict answers to an approved timestamped record; otherwise state uncertainty and route.
A viewing is marked confirmed too early. Calendar write, message delivery, and attendee confirmation are separate events. Reconcile retries with an idempotency key and do not promise a slot before the calendar confirms it.
Opt-out is stored in one tool only. Suppression needs to propagate across CRM, messaging, and campaign systems. If propagation is uncertain, block the next send until reconciled.
The team confuses the App and Platform. The Platform has its own template and customer-service-window model. Confirm product surface and provider route before writing the gate.
A local rule is generalized globally. Meta policy and local law are not interchangeable. A United States phone-call ruling does not govern every market; a local marketing rule can impose more. Have a qualified reviewer approve each market’s contact flow.
The dashboard rewards attempts rather than outcomes. High send volume can coexist with weak permission evidence, negative feedback, or failed appointments. Report suppression and task completion with delivery volume.
The pilot scales before records are reliable. If the CRM cannot distinguish source, permission, purpose, and conversation state, more volume multiplies errors. Start with a constrained flow, validate negative paths, and expand only after the ledger is trustworthy.
Launch checklist
- [ ] Identify the product surface: Business App, Business Platform/API, or provider-mediated Platform.
- [ ] Record the current policy version and review date.
- [ ] Capture channel-specific and purpose-specific permission evidence.
- [ ] Do not treat a phone number or general inquiry as proof by itself.
- [ ] Store the latest authenticated user-message timestamp separately from outbound events.
- [ ] Calculate the service window from an authoritative inbound event.
- [ ] Require a matching approved Platform template when required for an initiated message.
- [ ] Provide an accessible human escalation route during automation.
- [ ] Propagate opt-outs across CRM, messaging, and campaign systems.
- [ ] Answer property facts only from a current approved record.
- [ ] Keep request, calendar creation, delivery, and attendee confirmation distinct.
- [ ] Run all 16 acceptance cases and retain failed cases until corrected.
- [ ] Report denominators, period, exclusions, and the difference between sends and completed tasks.
- [ ] Review local privacy, marketing, call-recording, and consumer rules before expanding markets.
Evidence and limits
The GSC case is one selected page on one property. The Search Analytics capture used the period 29 September through 26 October 2026. The page row showed 348 impressions, five clicks, and average position 9.6; query examples above are a subset returned by the report and are not a complete inventory. URL Inspection on 29 October reported an indexed page, a successful fetch, allowed crawling and indexing, matching user and Google canonicals, and a last crawl on 24 October. The live page returned HTTP 200 with a self-canonical. These observations do not establish that any content edit will change clicks or rankings.
The current policy source displayed an update date of 23 September 2026 at review time. It can change. Product-specific documentation and an implementation provider can add details, so re-check before shipping. The FCC source concerns U.S. calls using artificial or prerecorded voices, not all WhatsApp messages. The NAR figures are survey responses, Gartner covers general B2B and B2C customer service, and Deloitte’s cited outlook covers commercial real estate. None is a controlled test of a residential WhatsApp AI agent.
The vendor pages reviewed describe their own workflow claims; they do not validate comparative performance. The public discussion illustrates a user’s confusion about opt-in and the 24-hour window; comments can be incomplete or outdated. The permission state machine, ledger, function, and acceptance cases are original operational assets proposed here, not a Meta certification or legal opinion.
The recommendation is scoped: build a permission gate and human recovery path before automating follow-up; check each message against the actual product, purpose, and current permission; and measure completed tasks rather than message volume. If the system cannot prove the permission or event state, it should stop, explain the available route, and preserve an owned human task. That gives the team a reason for each action and an auditable way to investigate failures without relying on a sales demo or a guessed Boolean.
