
A reliable monitoring-to-help-desk integration creates one incident ticket for one confirmed failure, updates that ticket as evidence or severity changes, and resolves it only after confirmed recovery. It should not create a new ticket for every failed probe or webhook retry.
Use an HTTPS ingress, authenticate and persist the raw event, process it asynchronously, normalise fields into an agency-owned schema, deduplicate deliveries, map the incident to a ticket, and monitor the adapter itself.
Pingvera
↓ HTTPS webhook
ingress: authenticate, limit, persist
↓ durable queue
normalise + deduplicate + correlate
↓ routing/severity policy
Jira Service Management / Zendesk / Freshdesk / other help desk
↳ create, update, comment, resolve
As of this article's review date, this workspace does not contain a public authoritative Pingvera webhook payload and signature specification. Therefore this guide does not invent product fields or headers.
Before implementation:
The JSON examples are vendor-neutral internal contracts, not Pingvera API promises.
| Monitoring event | Help-desk action | Urgent notification |
|---|---|---|
| One unconfirmed probe failure | retain evidence; no ticket | No |
| Confirmed critical-journey failure | create incident | P1/P2 route |
| Repeat of active incident | update/comment according to policy | Only on escalation |
| Severity or scope increases | update priority and assignee | Yes if threshold crossed |
| Partial dependent recovery | add context; keep open | Normally no |
| Confirmed full recovery | move to monitoring/resolved state | Per policy |
| Planned maintenance symptom | suppress/tag; do not create incident | No |
| TLS/domain risk | create preventive task | Deadline escalation |
| Missing job heartbeat | create task/incident after tolerance | By criticality |
Do not let the webhook receiver invent business severity from one HTTP status. Use site class, journey, confirmation, scope, workaround, time, and current maintenance state.
Monitoring describes checks and states. A help desk expects client, service, queue, priority, summary, description, assignee, and lifecycle.
Networks and providers retry. The receiver must safely process the same delivery more than once.
Do not assume events always arrive in order. Store event time and allow only valid transitions.
An event must not disappear because the ticket API returns 429 or 503.
The endpoint is public infrastructure and must resist forgery, replay, oversized bodies, secret leakage, and abuse.
Prefer a provider-supported HMAC signature over the raw request body, including a timestamp and delivery ID if Pingvera supports them. If not, evaluate documented alternatives such as a secret header, bearer/basic authentication, mTLS, provider-published IP ranges, or an integration gateway.
Controls:
2xx only after durable persistence.GitHub's official webhook guidance similarly recommends a webhook secret, HTTPS, delivery IDs, event filtering, quick response, and asynchronous processing. Apply the principles while following Pingvera's actual contract.
Store:
delivery_id
received_at_utc
raw_body_hash
event_type
signature_verification_result
safe_payload_reference
processing_state
attempt_count
last_error
ticket_system
ticket_id
incident_key
Sensitive raw bodies should have strict access, encryption, minimisation, and retention.
{
"schema_version": 1,
"delivery_id": "provider-delivery-id",
"event_id": "provider-event-id",
"event_time": "2026-08-08T10:15:30Z",
"event_type": "incident.confirmed",
"state": "failing",
"site_id": "WEB-0042",
"check_id": "lead-delivery",
"incident_key": "WEB-0042:lead-delivery",
"service_class": "A",
"severity": "P1",
"summary": "Lead delivery is failing",
"observations": {
"first_failure": "2026-08-08T10:13:05Z",
"regions": ["eu-west"],
"confirmation_count": 2
},
"links": {
"monitor": "https://example.invalid/replace-with-real-link",
"runbook": "https://kb.example/WEB-0042/lead-delivery"
}
}
Populate only fields supported by the captured event plus trusted inventory/policy data. Never trust a payload-supplied help-desk project or assignee without an allowlisted mapping.
healthy
└─ confirmed failure → create/open
open
├─ repeated failure → update evidence if useful
├─ severity increase → escalate
├─ partial recovery → remain open
└─ confirmed recovery → monitoring
monitoring
├─ failure returns within window → reopen same incident
└─ stable window complete → resolve
resolved
└─ new independent failure → new incident/ticket
Define when a later failure is a reopen versus a new incident. The rule may use check ID, service, recovery window, and recurrence policy.
| Internal field | Jira Service Management | Zendesk/Freshdesk-style field |
|---|---|---|
| Client/site | Project/organisation/custom field | Organisation/company/custom field |
| Severity | Priority + incident severity | Priority/urgency/custom field |
| Summary | Summary | Subject |
| Impact/evidence | Description/comments | Description/notes |
| Incident key | Entity property/custom field | External ID/custom field |
| Monitor/runbook | Remote links | Tags/custom links |
| State | Workflow status | Ticket status |
| Event timestamps | Comments/custom fields | Notes/custom fields |
Use the current official API of the selected help desk. Do not rely on field names from this table without verifying tenant configuration.
Preferred order:
delivery_id;event_id where defined;incident_key;Do not hash the complete body as the only incident key: changing timestamps can create a new hash for the same outage.
Classify errors:
2xx: success, record response;400/422: schema or mapping defect → dead-letter, operator action;401/403: credential/permission incident → stop aggressive retry and escalate;404: project/ticket mapping may be stale → investigate;409: possible idempotency/state conflict → reconcile;429: respect Retry-After, back off;5xx/network timeout: bounded exponential backoff with jitter, then dead-letter.Treat a create-request timeout as indeterminate until you check whether the ticket exists.
receive(request):
enforce_tls_method_type_and_size(request)
verify_authentication_over_raw_body(request)
reject_replay_or_expired_timestamp(request)
if inbox.has(request.delivery_id):
return 200
inbox.persist(request.delivery_id, raw_body, safe_headers)
queue.enqueue(request.delivery_id)
return 202
worker(delivery_id):
event = normalise(inbox.load(delivery_id), trusted_inventory)
validate_schema_and_allowlisted_mapping(event)
incident = incidents.find_active(event.incident_key)
action = state_machine.decide(incident, event)
result = helpdesk.apply_idempotently(action)
persist_mapping_and_result(result)
Alert on:
5xx and latency;Test the route periodically with a clearly labelled synthetic event that cannot be mistaken for a live client incident.
The help desk and adapter can fail during the same broad provider incident. A P1 should retain an independent route—phone, pager, SMS, or another approved channel. The ticket is the work record, not necessarily the only alarm.
401 forever;They can be suitable for a low-criticality prototype if they support required authentication, persistence, deduplication, retries, data handling, and observability. Evaluate the failure model before routing P1 incidents.
No. Confirm failures and map actionable risks. Retain raw observations without turning every probe into human work.
Move to a monitoring state after confirmed recovery, validate the agreed journey for an observation window, then resolve automatically or with human approval according to policy.
Use only documented authentication and a carefully designed fallback deduplication scheme. Raise the residual risk; do not invent headers. Ask Pingvera support for the current supported contract.
Reviewed: 8 August 2026.
Previous: Monitoring as code for web agencies. Return to the Academy overview.
Before publishing implementation code, capture the real Pingvera webhook contract and test it against the chosen help-desk API. The architecture in this guide is ready; product-specific field mapping must be evidence-based.
Pingvera watches whether an online business actually works — uptime, checkout, orders, domain, SSL and server — and alerts you in Telegram, email or a webhook before a customer has to tell you.
Start freeRead next: Pingvera vs WP Umbrella: Which Fits Your Agency? · ManageWP Client Reports vs Pingvera for Agencies · Monitoring inside your AI assistant: connect Claude or Cursor to… · A Website Client Report Clients Will Actually Read · Run a free site check.