collabSupport/services/jiraPoller/README.md
jmcqueen 7dc326c404 Split voice commands into status vs diag and redesign MPP phone output.
Replace /phonestatus follow-ups with /voicestatus, /wanstatus, /phonediag, and /dectdiag; extend /voicediag with relay probes and section-based MPP diagnostics.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-29 13:55:41 -04:00

67 lines
2.4 KiB
Markdown

# Jira poller enrichment
Hourly automation that enriches unassigned Jira tickets with CollabFinder
command output posted as ADF comments. Orchestrated by
[`services/jiraPollerService.js`](../jiraPollerService.js); scheduled in
`index.js` when `JIRA_POLLER_ROOM_ID` is set.
## Flow
```
JQL search → classifyTicket (AI) → resolveEnrichmentPlan (rules)
→ runEnrichmentChecks (collectors + renderers) → Jira ADF comment
→ label bot-enriched → Webex summary
```
Idempotency uses Jira labels (`bot-enriched`, `bot-skipped`), not local
state. Transient failures leave the ticket unlabeled for retry next hour.
## Communication Services symptom rules
For tickets with component **Communication Services** and a resolvable store:
| Symptom keywords | Checks run |
|------------------|------------|
| Call quality / connectivity (garbled, static, can't connect, …) | `voicestatus` + `callreport` |
| Spam / robocall / nuisance | `callreport` only |
| Neither | Default: `phone` → voicestatus, `av` → avstatus |
`callreport` uses the **today** business window (9am local → now minus 5 min).
Store number comes from the AI classifier; if missing but a symptom rule
matched, the planner falls back to `Store NNNN` in the summary.
## Adding a new symptom rule
1. Open [`enrichmentRules.js`](enrichmentRules.js).
2. Add regex patterns to `CALL_QUALITY_PATTERNS`, `SPAM_PATTERNS`, or a new
pattern list.
3. Extend `resolveEnrichmentPlan()` to push a rule id into `matchedRules`
and append check ids to `checks`.
4. Add tests in `tests/jiraPoller.enrichmentRules.test.js`.
## Adding a new enrichment check
1. Register the check in `CHECK_IDS` and `CHECK_RUNNERS` in
[`runEnrichment.js`](runEnrichment.js) (collector + renderer, same as the
chat command).
2. Reference the new check id from a rule in `enrichmentRules.js`.
3. Add tests in `tests/jiraPoller.runEnrichment.test.js`.
## Manual trigger
```
/jirapoll run poller now
/jirapoll prime label backlog without enriching (one-time adoption)
```
## Environment
| Variable | Purpose |
|----------|---------|
| `JIRA_POLLER_ROOM_ID` | Webex room for hourly summary + enables cron |
| `JIRA_STORE_FIELD_ID` | Pin Store Number custom field id |
| `JIRA_POLLER_MODEL` | Override X.AI model for classification |
| `CDR_FEED_COOLDOWN_MS` | cdr_feed rate limit (default 65000) for callreport |
See `.env.example` for full Jira poller section.