mattrguerra/meridian-skillsmainPrivate on GitHub, published here in full

SKILL.md

Language Markdown10.7 KB225 lines

skills/matt-easy-win-bitrix-triage/SKILL.md

  1. ---
  2. name: matt-easy-win-bitrix-triage
  3. description: >-
  4. Identify Meridian Display Co. Bitrix24 leads that should close as Junk (not a viable lead:
  5. promotional or notification email, spam, bad contact info, recruiting traffic, calls that never
  6. got through the phone menu, or a prospect who never replied to our first reply) or Out Of Scope (a
  7. real inquiry falling outside what Meridian can produce), and produce a reviewed worklist before
  8. anything closes. Use whenever Matt or anyone at Meridian wants to junk leads, mark leads out of
  9. scope, or clean up the lead queue: "move these to junk", "junk this one", "that's not even a
  10. lead", "we can't make that", "clear the noise out of Bitrix". Also use to check whether a lead
  11. already closed as Junk or Out Of Scope was filed correctly. Critical: Bitrix's internal stage ID
  12. for Unconverted Lead is literally the string JUNK, and the button opening the close dialog is
  13. itself labelled "Junk Lead", so these get confused constantly. Consult this skill before closing
  14. any Meridian lead as either.
  15. ---
  16. # Junk and Out Of Scope at Meridian Display Co.
  17. Meridian closes leads with one of several terminal reasons. This skill covers the
  18. two that pull a record *out* of the sales funnel rather than recording a sales
  19. outcome: **Junk** and **Out Of Scope**.
  20. Getting these right matters because both are routinely misfiled as Unconverted
  21. Lead, which inflates the "opportunities we lost" number with records that were
  22. never opportunities. A phone provider's billing notice counted as a lost sale is noise in
  23. every report downstream.
  24. Source of truth for the definitions: the team's lead-management SOP (the
  25. internal guidance doc on managing leads in Bitrix24). Where this skill goes
  26. beyond the SOP it is marked as practice rather than policy.
  27. ## Two naming traps, both involving the word "junk"
  28. **Trap 1: the stage ID.** In Bitrix's data model the internal `stageId` for
  29. **Unconverted Lead** is the literal string `JUNK`. The real Junk close reason is
  30. stage `3`. Whenever you're reading raw field data or an API response, `JUNK`
  31. means **Unconverted Lead**. Never reason from that string; use the table below.
  32. **Trap 2: the button.** In the Bitrix UI, closing a lead means opening the last
  33. stage in the top bar, **Complete Lead**, then pressing the red button labelled
  34. **Junk Lead**. That button does not junk anything; it opens the close dialog
  35. where you pick the actual reason. Pressing it is a step on the way to *every*
  36. close, including Converted Lead. Someone reading over a colleague's shoulder, or
  37. reading the SOP quickly, can easily come away thinking every close is a junking.
  38. ### Lead stage IDs (verified against the Bitrix UI)
  39. | Close reason | `stageId` | `stageSemanticId` |
  40. |---|---|---|
  41. | **Junk** | `3` | `F` |
  42. | **Out Of Scope** | `UC_R4TQ2N` | `F` |
  43. | Reorder Completed | `1` | |
  44. | Unconverted Lead | `JUNK` | `F` |
  45. | Converted New Lead | `CONVERTED` | `S` |
  46. Converted Lead has a separate ID that hasn't been identified yet; look it up
  47. before writing to it rather than assuming it's `CONVERTED`.
  48. Older triage output compounds the confusion: a board tag reading `[→Unconvert]`
  49. has repeatedly been applied to records that are really Junk or Out Of Scope,
  50. because whoever wrote it hit Trap 1. Treat those tags as unverified and classify
  51. from the record itself.
  52. ### Reading current state: use `list_records`, not `pipeline_summary`
  53. `pipeline_summary` collapses every closed status into one reported bucket,
  54. `Unconverted Lead [JUNK]`, at a count far below reality: in one check it reported
  55. 412 against a true 3,870 in Junk and 216 in Out Of Scope. Anything built on it
  56. will mis-sort.
  57. `list_records` with an explicit `stage` reads each column correctly and at its
  58. true count, and `get_record` returns a single lead's real `stageId`. Use those:
  59. - `list_records(entity_type="lead", stage="3")`: everything in Junk
  60. - `list_records(entity_type="lead", stage="UC_R4TQ2N")`: everything in Out Of Scope
  61. - `get_record(entity_type="lead", record_id=...)`: one lead's actual close reason
  62. `stage` wants the ID, not the label; passing "Out Of Scope" returns nothing
  63. rather than erroring, which reads as "no such leads" and is easy to misread as
  64. an empty column.
  65. ## Junk
  66. Per the SOP: *the lead is not viable, either due to incorrect information or
  67. promotional emails, disinterest.* In practice this covers:
  68. - Promotional email, marketing blasts, newsletters
  69. - System, service and billing notifications: expiring trials, delivery-failure
  70. bounces, automated privacy notices
  71. - Spam and irrelevant requests
  72. - Vendor and agency solicitations, cold sales calls into our line
  73. - Recruiting traffic: job applicants, application status chasers, staffing firms
  74. - Records whose contact information is wrong or unusable
  75. - **Phone calls that never got through the phone menu**, including our own
  76. callbacks that land in another company's IVR
  77. - **A prospect who never replied to our first reply**
  78. That last one is the SOP's own criterion and it is easy to get backwards, so it
  79. gets its own section.
  80. ### "Never replied to first reply" versus "went quiet"
  81. These sound alike and close differently.
  82. **Junk** is for a contact who never engaged at all. We replied; nothing ever came
  83. back; there was never a conversation, a requirement, or a quote. There was no
  84. opportunity here to lose.
  85. **Unconverted Lead** is for a real prospect who *did* engage: we learned what
  86. they wanted, we answered or quoted them, and then they went silent or went
  87. elsewhere. Bitrix largely handles this on its own: a lead sitting in Quote Sent
  88. for 16 business hours moves to No Reply, and 178 hours in No Reply moves it to
  89. Unconverted Lead. Don't race that automation by junking a quoted lead.
  90. The dividing question is whether a real exchange ever happened, not how long the
  91. silence has run. A prospect who described a job in chat and received pricing is
  92. Unconverted no matter how quiet they've gone; an address that received our reply
  93. and never responded at all is Junk on the SOP's terms.
  94. Where a record sits close to that line (a short call with an untranscribed
  95. recording, or a single inbound with an ambiguous body), hold it rather than
  96. guessing. Someone needs to listen to the call or read the thread.
  97. Age and silence otherwise don't apply to Junk. A promotional email is junk the
  98. moment it lands; there's no waiting period and no follow-up owed.
  99. ## Out Of Scope
  100. Per the SOP: *the lead's request falls outside the company's services or
  101. capabilities.* A real inquiry from a real prospect that we decline because we
  102. can't produce what they need. Typical shapes:
  103. - The spec isn't feasible in the material they need, such as an over-the-street banner
  104. requiring a mesh openness we can't print
  105. - Hardware we don't stock, such as an odd-length replacement bar
  106. - Graphics for another manufacturer's frames; ours fit our own hardware
  107. - A compliance or code requirement our substrate doesn't meet
  108. - A service we don't offer at all, asked in good faith
  109. Against Junk: a person genuinely wanted to buy something from us. Against
  110. Unconverted Lead: we're the reason it ended, and not through any failure: we
  111. gave them a straight answer and it was no.
  112. Out Of Scope requires that we actually *can't* produce it. Declining on price,
  113. lead time, or stock availability is a lost sale, not a capability limit, and
  114. belongs in Unconverted Lead.
  115. Like Junk, this doesn't age. Once we've declined on capability it's Out Of Scope
  116. whether they replied or not.
  117. ## What is *not* covered here
  118. Leave these alone; they belong to other close reasons or to follow-up:
  119. - **A prospect quoted or answered who then went quiet**: Unconverted Lead, and
  120. the automation usually gets there by itself.
  121. - **Anything that became an order**: Converted Lead, or Reorder Completed for a
  122. returning client rebuying prior work.
  123. - **A client who asked for time**: that's Parked, not a close.
  124. - **Anything where we owe them something.** This is the big one. A great deal of
  125. what looks like a dead lead at Meridian is our own silence: a quote we promised
  126. and never sent, a callback never made, a question never answered. That is an
  127. open task, not a close of any kind. In particular, a lead cannot be junked for
  128. "never replied to first reply" if our first reply was an autoresponder; the
  129. SOP criterion assumes a human actually replied. If the ball was ours, route it
  130. to follow-up and say so.
  131. ## Producing the worklist
  132. Default output is a review table, not a write:
  133. ```
  134. ## Junk (N)
  135. | Lead | Who / source | Which junk criterion it meets |
  136. ## Out Of Scope (N)
  137. | Lead | Who | What they wanted | Why we can't make it |
  138. ## Hold: ask Matt (N)
  139. | Lead | Who | What's unclear |
  140. ```
  141. Name the specific criterion in the Junk table rather than writing "not a lead".
  142. "Promotional email", "IVR, never reached us", "no reply to first human reply"
  143. are checkable; a bare assertion isn't.
  144. Put anything ambiguous in Hold with the specific question. The cases worth
  145. naming rather than guessing:
  146. - A short call with a recording nobody has transcribed: it may be a real
  147. inquiry. Don't call it a dead call until someone has heard it.
  148. - A decline that was really about price, lead time or stock: Unconverted, not
  149. Out Of Scope.
  150. - A lead whose only outbound was an autoresponder: our silence, not theirs.
  151. - Internal, test, or staff-created records: flag, don't close.
  152. Also flag, rather than silently correct, any lead whose existing close reason or
  153. title tag disagrees with the evidence.
  154. ## Writing back
  155. Closing leads is a bulk write to production CRM. Confirm the specific list
  156. before anything executes, and re-verify current state at that moment.
  157. Worklists drawn from a triage board go stale within a day or two as the team
  158. works the queue, so drop anything already closed rather than re-closing it.
  159. Two things to establish before trusting `set_lead_fields` for this:
  160. **Does the write land on the right stage?** Unverified. Reading works, so the
  161. write path is plausible, but the failure mode that matters is silent: a write
  162. accepted while the lead quietly lands in Unconverted Lead, recreating at scale
  163. the exact problem this skill exists to prevent. Test on one throwaway lead, then
  164. read it back with `get_record` and confirm `stageId` is `3` or `UC_R4TQ2N`. The
  165. read-back is the check; a successful-looking write response is not evidence.
  166. **Do stage qualifiers block it?** The SOP notes that certain stages are gated:
  167. Bitrix refuses to move a lead there until required fields are filled, once per
  168. lead. Whether those gates apply to these two close reasons, and whether the API
  169. enforces or silently bypasses them, is unconfirmed. A refusal is the good case;
  170. a bypass that skips required data is worse than a manual close.
  171. If either check fails, deliver the worklist and let Matt apply the closes
  172. through the UI: **Complete Lead** → red **Junk Lead** button → pick the reason →
  173. **Save**. It takes a few seconds per lead and is not worth a risky automation.