SIEZE / INIT Formulas

INIT Node Formulas

Calculate X (Number of Calls to Dial per Seized Agent). Trigger: Receipt of a Seized Agent.

"Inverse Hit Rate" (Standard Predictive)

The "Compliance Guard" (Advanced)

Best for: General dialing where you want to maintain a steady flow of calls.

This determines how many calls we need to make to get one human answer.

The Logic:

  1. Calculate Hit Rate:

    Hit Rate = Total Human Connects / Total Dials Made

  2. Calculate Pacing:

    Calls to Dial = 1 / Hit Rate

Example:

  • If you make 100 calls and get 20 human answers, your Hit Rate is 0.20 (20%).

  • Calculation: 1 / 0.20 = 5.

  • Result: The system dials 5 lines for every 1 agent seized.

Best for: Strict adherence to Abandon Rate limits (e.g., keeping abandons under 3%).

This uses the Standard formula but applies a "Brake" if the abandonment rate starts rising. It automatically slows down dialing to protect compliance.

The Logic:

  1. Calculate Hit Rate:

    Hit Rate = Total Human Connects / Total Dials Made

  2. Calculate Current Abandon Rate:

    Abandon Rate = Abandoned Calls (Dropped) / Total Human Connects

  3. Calculate Safety Factor:

    • Compare your actual Abandon Rate to your Limit (e.g., 3%).

    • If you are close to the limit, this factor drops near zero.

      Safety Factor = 1 - Current Abandon Rate / Max Allowed Abandon Rate

  4. Final Pacing Calculation:

    Calls to Dial = (1 / Hit Rate) x Safety Factor

PromQL:

Set flowId and time range accordingly.

scalar(
  1 /
  (
    sum(increase(ob_call_human_detected_total{flowId="841fa0c5e5949132"}[2h]))
    /
    sum(increase(ob_contacts_sent_for_dialing_total{flowId="841fa0c5e5949132"}[2h]))
  )
)

PromQL:

Set flowId and time range accordingly.

scalar(
  clamp_min(
    (
      # --- INVERSE HIT RATE MULTIPLIER ---
      (
        1 / 
        clamp_max(
          (
            (
              clamp_min(
                (sum(increase(ob_call_human_detected_total{flowId="841fa0c5e5949132"}[2h])) OR on() vector(0)),
                1
              ) 
            )
            /
            clamp_min(
              (sum(increase(ob_contacts_sent_for_dialing_total{flowId="841fa0c5e5949132"}[2h])) OR on() vector(0)), 
              1
            )
          ),
          1
        )
      )
      *
      # --- ABANDONMENT PENALTY ---
      (
        1 - (
          (
            (sum(increase(ob_abandoned_calls_total{flowId="841fa0c5e5949132"}[2h])) OR on() vector(0))
            / 
            clamp_min(
              (sum(increase(ob_call_human_detected_total{flowId="841fa0c5e5949132"}[2h])) OR on() vector(0)), 
              1
            )
          )
          / 0.03
        )
      )
    ),
    0 
  )
)

Metrics Used

Metric

Comments

ob_cpa_result_count ( label: result{human} )

available

ob_dials_total

available

ob_abandoned_calls_total

available

SEIZE Node Formulas

Calculate N (Number of Agents to Seize). Trigger: Pulse from the Start Node.

"Demand-Driven"

It relies on Dialer & CPA stats.

This evaluates and determines how many agents need to be seized at each interval (Pulse from the Start Node).

The Logic:

  1. Calculate the "Boolean" Gate:

    List Gate = min (1, Contacts Pending)

    (Returns 1 if there is work, 0 if empty)

  2. Calculate Human Probability:

    Human Probability = 1.0 - CPA Machine Ratio

  3. Calculate Demand (With Auto-Kickstart): We take the MAX of 1 and the Calculated Demand. This ensures that if the list is not empty (Gate=1) but dialing hasn't started yet (Active Dials=0), the system defaults to demanding 1 Agent to kickstart the loop.

    Demand = max (1, (Active Dials x Human Probability) + Orphaned Calls or Abandoned Calls )

  4. Final Calculation:

    Agents to Seize (N) = (Demand x List Gate) - Agents Currently Seized


PromQL:

Here, the value '2' is the total number of available agents. This needs to be set accordingly.

scalar(
  (
    2 
    - 
    (
      (ob_currently_seized_agents{flowId="841fa0c5e5949132"} OR on() vector(0))
      + 
      (ob_agent_seize_requests_pending_total{flowId="841fa0c5e5949132"} OR on() vector(0))
    )
  )
)


Metrics Used

Metric

Comments

Contacts Pending: ob_contacts_to_load
(Used in min(1, x) function)

available

Active Dials: ob_dialing_in_progress

available

CPA Machine Ratio

ob_cpa_result_count ( label: result{machine} )

available

Agents Currently Seized: ob_agents_seized_gauge

Available

queueName needs to be specified.

Orphaned Calls: ob_agents_needed_gauge

Roadmap Will be available in future releases. For now, we can use ob_abandoned_calls_total