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:
-
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
-
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
-
- Examples:
-
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
-
-
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
- In this way, a looping/repeating task will eventually cycle through all contacts.
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
- Typical auto-import problems exist in the contact data, such as:
- 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_idin 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
- Update that company (and it's employees) contacts in redmine so "Account Number" matches
- Try to figure it out by comparing stuff like:
- Contact seems to be a customer, but their "Account Number" field is blank, so we're not sure which NMI account is their's
- 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
- route call based on context, not just the number:
-
- 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
- social media:
- 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
- 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
- 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
- if there is, do something like mark it en-route, received, etc.
- trace package: pull data we'd need to trace the workflows about it:
- possibly tied to dedicated agent who does something special with their emails, like:
- 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
- if blocked: warn them they can't have the day off unless they can prove it's manditory/unavoidable
- if not, add it
- check the attendance-schedule project to see if they already reported it in there
- SLA/VIP: this contact needs very fast or special responses for some reason
- 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
- AI-agent uses obsidian and other data:
- sales 20-questions: they sent an email that amounts to playing 20-questions about capacity (wanting to start project)
- 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
- Identify habitual or serious spammers, time wasters, and promoters emailing us
- 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
- there is some special risk or liability related to talking to that contact. For examples:
- 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
- contacts marked as wanting to potentially buy something from us or start services, but we've heard crickets for 7+ days
- basic info needs corrected:
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.