Skip to content

feat(guild): Do Not Text system note on contact opt-out change - #9848

Open
FredPeal wants to merge 47 commits into
developmentfrom
feat/do-not-text-system-note
Open

FredPeal wants to merge 47 commits into
developmentfrom
feat/do-not-text-system-note

Conversation

@FredPeal

@FredPeal FredPeal commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Hook ContactObserver::updated to emit a Do Not Text enabled / Do Not Text disabled system note in the lead's systemNotes channel whenever is_opt_out changes.
  • Uses the existing ai-control MessageType so the trace appears alongside Sally mode and follow-up changes in the timeline.
  • Targets the most recent non-deleted lead of the contact's people.

Captures all paths that mutate is_opt_out: GraphQL updateContact mutation, $contact->opOut(), People::optOutPhoneContacts() (compliance handoff), and connector pulls (Elead/VinSolution).

Test plan

  • New: tests/GraphQL/Guild/ContactOptOutSystemNoteTest.php (4 tests, 12 assertions) — covers enable, disable, no-op update, and targets-most-recent-lead-only
  • Existing opt-out tests in tests/GraphQL/Guild/PeopleTest.php still green (8 tests, 31 assertions)

kaioken and others added 16 commits May 29, 2026 16:04
Merge pull request #9809 from bakaphp/hotfix/cancel-subs
refact: database tempalte notification
refact: flatten ai_mode / ai_follow_up keys on Lead in V2
… follow-up triggers

- ApplyLeadAiModeAction::applyNewLead now honors company working hours when picking
  the AI mode default key (isOpen=false when outside working hours).
- Persist the resolved default keys + values as `first_followup` on the lead so the
  snapshot of the config used at creation time survives later type/status changes.
- Implement closeLead / soldLead triggers: they read the closed-not-sold and
  closed-sold follow-up keys respectively from the lead type config and apply them.
- Add explicit LeadConfigurationService methods:
  getFollowUpActiveDefaultKey, getFollowUpClosedNotSoldDefaultKey,
  getFollowUpClosedSoldDefaultKey, and getAllDefaultKeys.
- Tests: 6 new cases in LeadConfigurationServiceV2Test (15 passing).
…d-close-sold

feat(intelligence): work-hours-aware AI mode + close/sold follow-up triggers (1.x)
Hooks ContactObserver::updated to emit a 'Do Not Text enabled/disabled'
system note on the most recent lead's systemNotes channel whenever
is_opt_out flips. Uses the existing ai-control MessageType convention
so the change shows up alongside Sally mode / follow-up trace.
@FredPeal
FredPeal requested a review from kaioken June 2, 2026 06:13
FredPeal and others added 13 commits June 3, 2026 00:15
The previous code set $variant->cost, but products_variants has no cost column (only base_cost) — saveOrFail() threw "Unknown column 'cost'", breaking the product sync webhook and batch. Write map_price to products_variants_warehouses.cost instead, in the same save as the config.
…-cost

fix(netsuite): write MAP PRICE to warehouse cost column, not variant
kaioken and others added 18 commits June 3, 2026 12:12
- logSystemNote now creates the AI-control message with is_public: 0.
  System notes (Sally Mode changes, follow-up enabled/disabled) are
  internal lifecycle records and should not surface in public feeds or
  Scout/Typesense indexing.
- isCompanyWithinWorkingHours now returns true when the company has no
  work_hours configured, matching BaseAgentResponderAction's existing
  default. An unconfigured schedule should fall back to "open", not
  silently switch the lead to the _closed_default config branch.

Fixes TriggerIntelligenceActivityTest: 24/24 passing (was 4/24 — 20
errors masked the 3 logic failures caused by the closed-by-default
fallback).
…fault-working-hours

fix(intelligence): private system notes + open-by-default work hours

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants