> ## Documentation Index
> Fetch the complete documentation index at: https://doc.lucidworks.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Send PagerDuty Message Index Stage

export const schema = {
  "type": "object",
  "title": "Send PagerDuty Message",
  "description": "Send a PagerDuty Message using the Fusion Messaging Service.  This can be used for things like alerting and more.",
  "required": ["eventType", "incidentDescription"],
  "properties": {
    "skip": {
      "type": "boolean",
      "title": "Skip This Stage",
      "description": "Set to true to skip this stage.",
      "default": false,
      "hints": ["advanced"]
    },
    "label": {
      "type": "string",
      "title": "Label",
      "description": "A unique label for this stage.",
      "hints": ["advanced"],
      "maxLength": 255
    },
    "condition": {
      "type": "string",
      "title": "Condition",
      "description": "Define a conditional script that must result in true or false. This can be used to determine if the stage should process or not.",
      "hints": ["code", "code/javascript", "advanced"]
    },
    "storeInContext": {
      "type": "boolean",
      "title": "Add to Pipeline Context",
      "description": "Put the generated Message later in the pipeline.",
      "default": false,
      "hints": ["advanced"]
    },
    "responseKey": {
      "type": "string",
      "title": "Message Response Context Key",
      "description": "The name of the key to store the MessageResponse under in the Pipeline Context.",
      "default": "messageResponse",
      "hints": ["advanced"]
    },
    "errorKey": {
      "type": "string",
      "title": "Message Response Failure Key",
      "description": "The name of the key to store a boolean if sending a message failed.  If set, you can check the MessageResponse errorCode and other attributes for the reason.",
      "default": "messageResponseFailure",
      "hints": ["advanced"]
    },
    "eventType": {
      "type": "string",
      "title": "Event Type",
      "description": "Select the Pager Duty Event Type.",
      "enum": ["trigger", "acknowledge", "resolve"],
      "default": "trigger"
    },
    "incidentDescription": {
      "type": "string",
      "title": "Description",
      "description": "A short description of the problem that led to this trigger. This field (or a truncated version) will be used when generating phone calls, SMS messages and alert emails. It will also appear on the incidents tables in the PagerDuty UI. The maximum length is 1024 characters.",
      "default": "Sample Description",
      "maxLength": 1024,
      "minLength": 1
    },
    "incidentKey": {
      "type": "string",
      "title": "Incident Key",
      "description": "Identifies the incident to which this trigger event should be applied. If there's no open (i.e. unresolved) incident with this key, a new one will be created. If there's already an open incident with a matching key, this event will be appended to that incident's log.",
      "default": "Incident <doc.id>",
      "minLength": 1
    },
    "client": {
      "type": "string",
      "title": "Client",
      "description": "The name of the monitoring client that is triggering this event.",
      "default": "Fusion",
      "minLength": 1
    },
    "clientURL": {
      "type": "string",
      "title": "Client URL",
      "description": "The URL of the monitoring client that is triggering this event.",
      "default": "fusion-monitoring.yourdomain.com",
      "minLength": 1
    },
    "incidentDetails": {
      "type": "array",
      "title": "Incident Details",
      "items": {
        "type": "object",
        "required": ["name", "value"],
        "properties": {
          "name": {
            "type": "string",
            "title": "Name"
          },
          "value": {
            "type": "string",
            "title": "Value"
          }
        }
      }
    },
    "incidentContextLinks": {
      "type": "array",
      "title": "Incident Context Links",
      "items": {
        "type": "object",
        "required": ["href"],
        "properties": {
          "href": {
            "type": "string",
            "title": "Target Link",
            "description": "URL to open when clicked on the link."
          },
          "text": {
            "type": "string",
            "title": "Text",
            "description": "Arbitrary text explaining the URL."
          }
        }
      }
    },
    "incidentContextImages": {
      "type": "array",
      "title": "Incident Context Images",
      "items": {
        "type": "object",
        "required": ["src", "href"],
        "properties": {
          "src": {
            "type": "string",
            "title": "Source",
            "description": "HTML 'src' tag for the image. Should be always secure connection (https://)."
          },
          "href": {
            "type": "string",
            "title": "Target Link",
            "description": "URL to open when clicked on the image."
          },
          "alt": {
            "type": "string",
            "title": "Alternate Text",
            "description": "HTML 'alt' tag for the image."
          }
        }
      }
    }
  },
  "category": "Troubleshooting",
  "categoryPriority": 3,
  "unsafe": false
};

export const SchemaParamFields = ({schema}) => {
  const sanitize = str => {
    if (typeof str !== "string") return str;
    return str.replace(/^"(.*)"$/s, "$1").replace(/\\/g, "").replace(/"/g, "'");
  };
  const formatDescription = str => {
    const s = sanitize(str);
    return (/[.!?]\)*$/).test(s) ? s : `${s}.`;
  };
  const {description, properties = {}, required: requiredProps = []} = schema;
  const visibleProps = useMemo(() => Object.entries(properties).filter(([, prop]) => !prop.hints?.includes("hidden")), [properties]);
  return <div>
      {description && <p>{formatDescription(description)}</p>}

      {visibleProps.map(([name, prop]) => {
    const isRequired = requiredProps.includes(name);
    const hasDefault = prop.default !== undefined;
    const rawDefault = prop.default;
    const isComplexDefault = hasDefault && (typeof rawDefault === "object" || typeof rawDefault === "string" && (rawDefault.length > 20 || rawDefault.includes('"')));
    const fieldProps = {
      key: name,
      body: prop.title || name,
      type: prop.type,
      ...prop.title && ({
        post: [<><span className="text-stone-400 dark:text-stone-500">API property: </span>{name}</>]
      }),
      ...isRequired && ({
        required: true
      }),
      ...!isComplexDefault && hasDefault ? {
        default: sanitize(String(rawDefault))
      } : {}
    };
    const isObject = prop.type === "object" && prop.properties;
    const isArrayOfObjects = prop.type === "array" && prop.items?.type === "object" && prop.items.properties;
    return <ParamField {...fieldProps}>
            {prop.description && <p>{formatDescription(prop.description)}</p>}

            {isComplexDefault && <div className="flex">
                <p>
                  <strong>Default:</strong>
                </p>
                <pre className="!my-0">
                  <code>
                    {JSON.stringify(rawDefault, null, 2)}
                  </code>
                </pre>
              </div>}

            {isArrayOfObjects && <div className="flex">
              <p>
                <strong>Object attributes:</strong>
              </p>
              <pre className="!my-0">
                <code>
                  {'{\n'}
                  {Object.entries(prop.items.properties).map(([iname, iprop]) => <>
                      {`  ${iname}`}
                      {prop.items?.required?.includes(iname) && <span style={{
      color: 'red'
    }}> required</span>}
                      {`: {\n    display name: ${sanitize(iprop.title || '')}\n    type: ${iprop.type}\n  }\n`}
                    </>)}
                  {'}'}
                </code>
              </pre>
              </div>}

            {isObject && <Expandable title="properties">
                <SchemaParamFields schema={{
      properties: prop.properties,
      required: prop.required
    }} />
              </Expandable>}
          </ParamField>;
  })}
    </div>;
};

export const LwTemplate = ({title = "Key questions to get you started", icon = "sparkles", cta = "Powered by Agent Studio", linkHref = "https://lucidworks.com/demo/?utm_source=docs&utm_medium=referral&utm_campaign=docs_cta_ai"}) => {
  const [isLoaded, setIsLoaded] = useState(false);
  useEffect(() => {
    const timer = setTimeout(() => {
      setIsLoaded(true);
    }, 500);
    return () => clearTimeout(timer);
  }, []);
  return <div className="lw-template-container">
      <Card title={title} icon={icon}>
        {isLoaded && <span dangerouslySetInnerHTML={{
    __html: `<lw-template id="a029c1a9-28be-427e-b0e1-5d918920246a"></lw-template
            >`
  }} />}
        <Link href={linkHref} className="agent-studio-link text-left text-gray-600 gap-2 dark:text-gray-400 text-sm font-medium flex flex-row items-center hover:text-primary dark:hover:text-primary-light group-hover:text-primary group-hover:dark:text-primary-light">Powered by Lucidworks Agent Studio</Link>
      </Card>
    </div>;
};

[localhost link]: http://localhost:3000/docs/4/fusion-server/reference/pipeline-stages/indexing/pagerduty-index-stage

[mintlify link]: https://doc.lucidworks.com/docs/4/fusion-server/reference/pipeline-stages/indexing/pagerduty-index-stage

[old doc.lw link]: https://doc.lucidworks.com/fusion-server/4.2/206

This stage sends a [PagerDuty](https://www.pagerduty.com/) Message from Fusion, for alerting, monitoring, and more, using Fusion’s [Messaging Services](/docs/4/fusion-server/concepts/system/monitoring/messaging-services).

Read more about PagerDuty integration in Fusion on our [blog](https://lucidworks.com/post/pagerduty-integration-in-lucidworks-fusion/).

<LwTemplate />

## Enabling PagerDuty Messaging

Before you can use the PagerDuty pipeline stage, you must enable PagerDuty messaging in Fusion:

1. Click **Applications > System > Messaging Services**.
2. Select **PagerDuty Message Service** from the drop-down menu.
3. Enter the following information:

   * [PagerDuty service key](https://developer.pagerduty.com/documentation/integration/events/)
   * PagerDuty Service API URL; this should be `https://events.pagerduty.com/generic/2010-04-15/create_event.json`.
4. Click **Save message service**.

## Configuration

<Tip>
  When entering configuration values in the UI, use *unescaped* characters, such as `\t` for the tab character. When entering configuration values in the API, use *escaped* characters, such as `\\t` for the tab character.
</Tip>

<SchemaParamFields schema={schema} />
