Inspect the current RingCentral/Litify SMS implementation in /Users/samaguiar/Documents/Projects/Repos/sail-litify/Litify_AI_Integration_Project without editing files. Goal was to identify the safest existing way for an Attorney Hub client birthday row to present a prebuilt SMS draft without sending it.
litifyRingCentralPanelV2, LitifyRingCentralContextController, LitifyRingCentralSmsSender, birthday queue classes, and smsUrl helper classes.LITIFY_ORG was connected and ran one read-only sample SOQL query to satisfy the Litify live-first check. No live writes were performed.litifyRingCentralPanelV2 can build a RingCentral web app URL: https://app.ringcentral.com/r/sms?type=new&number=...&content=.... This opens a prefilled RingCentral draft and does not send from Salesforce.AttorneyHubPaytonShared.smsUrl and AttorneyHubNickShared.smsUrl do not prefill SMS. They currently route to the Matter page because older comments said no public package deep link was exposed.LitifyRingCentralSmsSender.sendText, which posts to Named Credential RingCentral_SMS and broker /sms; it requires confirmed == true, a valid selected record phone option, supported Matter or Intake context, max 1,000 characters, and SMS STOP guard for client recipients.BirthdayTextQueueController.sendReviewedBirthdayText adds birthday-specific safety: confirmed review, current queue eligibility, exact matter, phone, and message match before delegating to direct send.For an Attorney Hub birthday row that should present a prebuilt SMS draft without sending it, use the draft-only RingCentral web app deep link pattern from litifyRingCentralPanelV2, not the Apex direct-send method. Feed the button from the safer BirthdayTextQueueService row shape because it already includes toNumber and messageText and excludes SMS STOP, birthday opt-out, deceased clients, missing mobile numbers, duplicate clients, and already-sent-today birthday texts. The button should be labeled like Open birthday text draft to avoid implying an immediate send.
actionUrl as a plain link to the Matter page via smsUrl, so implementation work would be needed later to use the draft-only prefill URL directly.scripts/birthday-text-queue.test.mjs imports ./lib/birthday-text-queue.mjs, but that helper file was not present in the current worktree scan. This is outside the requested SMS implementation inspection but worth checking before future test runs.If asked to implement, keep the first pass small and reversible. Prefer adding a shared client-side URL builder equivalent to litifyRingCentralPanelV2.buildRingCentralAppUrl(WORKSPACE_SMS, messageText) into the Attorney Hub birthday row component or a tiny shared LWC utility. Avoid calling BirthdayTextQueueController.sendReviewedBirthdayText unless Sam explicitly wants live sending, because that path sends SMS. Use BirthdayTextQueueService.getReviewedQueue data for eligibility and draft text rather than the older hub-local birthday list if practical. QA should include a source-level test for URL encoding of number and content, plus a no-send browser check that the RingCentral draft opens without invoking Apex send.