Files
redmine/docs/contact_triage_loop_raw_notes_2026-07-04.md
T
Jason Thistlethwaite 9ee9eb3ec6 Organized
2026-10-17 20:50:35 -04:00

10 KiB

eh, I think you misunderstood me about the filters. I see this:

batch-update Apply one payload to a filtered contact batch.

Unless I'm misunderstanding how to use that. it sounds like it's not what I wanted/

I was hoping to be able to do this:

  1. In batches of perhaps 10-20, pull a list of contacts that have not been updated for a while, and who either:

    • also have specific tags
    • also lack specific tags
  2. For each of those contacts, do the following:

    • check if there's anything about the contact itself that informs me I shouldn't need to look at anything else about it, and I can quickly tag them as something like "spam". I expect most of the time, I won't be able to do that.

    • Fetch the 3-5 most recent tickets from the contact, and look at them, using some framework to score any tags that should apply

      • Examples:
        • customer:

          • somebody on our side emailed back +1
          • seems like they're talking about packages or items in our warehouse +1
        • promo + spam: contact seems like a business sending us advertisements

          • from address is something like "no-reply", "noreply", "deals", or "promotions" +1
          • it mentions a deal, discount, or coupon +1
    • If the scores for any particular set set of tags >= a threshhold, use add_tag to add those tags to the contact

      • otherwise, add a tag like "ai-checked"
    • The last step caused the updated date of the contact to increase

  3. Due to the very last step above (which bumps the updated date), if I wait and loop back through Step 1 again a few minutes or hours later, I won't retrieve the same contacts I already tagged.

    • In this way, a looping/repeating task will eventually cycle through all contacts.
      • Eventually, the ones it has already tagged will have been updated long enough ago, that they will get pulled again

To be clear:

I am describing a broad pattern of workflow here, not specifics. I am just explaining this because:

a) The way you implemented the changes seems counterintuitive for how I want to use this, but I could of course be misunderstanding.

b) I think the basic concept of this loop should be added to the project documentation, maybe even with a diagram

Further down the road:

  • I will want to develop tags that indicates a specific kind of evaluation needs performed with a contact, just as summarizing their most recent communications with us.
    • When looping through contacts, I can add that tag to contacts whose comms need to be summarized
    • Then, another agent or script can fetch only contacts tagged to indicate they need summarized
      • That script/agent fetches their recent communications, does it's job, and removes the tag, indicating that job is finished
  • Other likely tags I will eventually implement:
    • basic info needs corrected:
      • Typical auto-import problems exist in the contact data, such as:
        • company field contains their email address
        • username portion of email address is in first_name, but their actual name is in the footer of the email or in the "from" part
        • basic contact info is actually in the ticket, but not in the correct contact fields:
          • first name, last name
          • additional email addresses
          • phone number(s)
          • job title
          • name of their business
        • We know the name of the company they work for, but no contact.is_company=true exists with that name
          • Create it
          • Tag it as needing enrichment
          • Update the contact(s) who work for that company, setting company = that company
    • NMI mapping:
      • Contact seems to be a customer, but their "Account Number" field is blank, so we're not sure which NMI account is their's
        • Try to figure it out by comparing stuff like:
          • email address
          • name of company
          • tracking numbers or order ids mentioned
          • ^^ above, but for other contacts who work at the same company
        • Update linkages all around:
          • Update that company (and it's employees) contacts in redmine so "Account Number" matches user_account.user_account_id in NMI
          • Set the redmine.contact_id's into a mapping table in NMI that link which contacts are for which account
          • Update obsidian profile about the contact/person to include both pieces of info
    • entity extraction and enrichment:
      • members of our team responded to somebody, but we don't have (much) info about them in either redmine contacts or in obsidian
      • This tells us the person is probably an active employee, so we:
        • search for 5-10 other tickets they worked on lately, and use that to infer a profile of what their job is or fill in context about what they've worked on lately
      • phone number linkage to accounts:
        • transcribe/ingest tickets that are call transcripts, adding summary to contact file automatically

          • add "note/call" to contact automatically
          • identify if follow-up action is needed; if it is, create ticket, assigned to relevant person
        • bobcat caller id: recognized contact calls us...

          • route call based on context, not just the number:
            • we're super busy, short staffed, and person likes to talk alot: "sorry, we're not available"
            • Bob usually talks to this person, but Bob is marked "do not disturb": "voice mail / not available"
          • show on-screen bobcat overlay caller-id
    • Needing enrichment (likely more than one tag to represent the kind of enrichment):
      • social media:
        • try to identify their social media profiles (linkedin, facebook, twitter, etc) using name, email, etc.
        • possible search known social media groups for people with same/similar name
        • identify product website(s)=
      • potential suppliers:
        • search places like alibaba for products we've seen them sell, and try to narrow down who their suppliers are
        • pull checkin pictures of shipping labels from them, and cross-reference with other info to locate possible suppliers
    • special handling:
      • SLA/VIP: this contact needs very fast or special responses for some reason
        • possibly tied to dedicated agent who does something special with their emails, like:
          • trace package: pull data we'd need to trace the workflows about it:
            • if it looks like it has a tracking number, kick off the workflow to pull that up in NMI, get pictures, check who worked on it, tracking status, etc.
            • Possibly fetch surveillance from synology autmatically:
              • For each major timestamp involved ( box.checkin_date, box.presort_date, individual_product.checkin_date ) pull 2-3 minutes of footage before/after from cameras known to overlook the 2-3 nearest locations in the warehouse
                • split the video feed into a series of still images 30-seconds apart
                • have a VLM explain what it sees in the images, even checking for specific things:
                  • presence of truck at loading dock
                  • person seen walking away from area carrying similar locking box/item
          • import order: email is an invoice, PO, or similar listing what a person is sending to us, perhaps the reason, and when it should arrive.
            • they're a vendor: log that supplies were being delivered and what we spent on them
            • prep customer: make a prep inbound order if it doesn't exist already
          • vendor receipt or invoice:
            • automatically log/input that into the expense tracker if it's not there already
            • check if there is a purchase order for it.
              • if there is, do something like mark it en-route, received, etc.
                • create ticket, assigning somebody to put it away
              • assign an AI-INFO-BLOCK to the manager, asking them to find out who ordered it, what for, and why they didn't make a PO
      • employee and it's about scheduling
        • check the attendance-schedule project to see if they already reported it in there
          • if not, add it
            • assign an AI-INFO-BLOCK asking them to explain why they could not do that themselves
          • check for time-off blockers: - [ ] somebody else already has time off within 1-2 days - [ ] customer has complained about delays in the past week - [ ] same person asked off on the same weekday/pattern in the past 3-4 weeks, and no good reason - [ ] overall billings/productivity have been low for over a week
            • if blocked: warn them they can't have the day off unless they can prove it's manditory/unavoidable
              • if they say it is, AI-INFO-BLOCK until they provide proof or admit they don't have it
    • very simple question
      • sales 20-questions: they sent an email that amounts to playing 20-questions about capacity (wanting to start project)
        • AI-agent uses obsidian and other data:
          • generate really slick looking brochure quickly, using obsidian-backed data
          • loop human in to approve it
          • update/expand based on human input, then send it over to client
          • save it for later, so next time, it can just be sent right away
    • spammer-be-gone:
      • Identify habitual or serious spammers, time wasters, and promoters emailing us
        • use gmail MCP to add filters to contact@ldrprep.com so that person's mail doesn't get imported into redmine anymore
    • high-risk contact:
      • there is some special risk or liability related to talking to that contact. For examples:
        • litigious person or debt collector
        • disgruntled former employee
        • stalker spouse of current employee
      • handle ticket(s) in a manner people who shouldn't talk to them can't see it or can't respond to it
        • phone calls from them do not ring to the general line anyone can answer
    • lead follow-up:
      • contacts marked as wanting to potentially buy something from us or start services, but we've heard crickets for 7+ days
        • encourage somebody to call/email them, maybe even suggest what to say/send

Please ensure this info is saved with the project and easy to locate

For right now, much of this will not be immediately practical to implement, but I think storing it here is both important context and saves time.