Browse Guides

Custom Integrations/Runbooks
Reading mode
Copy Link
Link Copied!
Print
Feedback
This guide has multiple versions available:
<style>p { margin: 0; }span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left:0; padding-left:5px;}blockquote blockquote{ border-color: #00bcd4; color: #00bcd4;}blockquote blockquote blockquote{ border-color: #43a047; color: #43a047;} table.grid{ border-collapse: collapse;} table.grid td, table.grid th { border: 1px solid #ddd;} .fr-fic.fr-dib{ display: block; margin: 5px auto;}.fr-fic.fr-dib.fr-fir{ text-align: right; margin: 5px 0 5px auto;}.fr-fic.fr-dib.fr-fil{ text-align: left; margin: 5px auto 5px 0;}.fr-fic.fr-dii{ float: none; margin: 5px auto;}.fr-fic.fr-dii.fr-fil{ float: left; margin: 5px auto;}.fr-fic.fr-dii.fr-fir{ float: right; margin: 5px auto;}img.fr-dib.fr-fir { margin-right: 0; text-align: right;}img.fr-dib.fr-fil { margin-left: 0; text-align: left;}img.fr-dib { margin: 5px auto; display: block; float: none;}img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC;}img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc;}img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box;}</style><style> p { margin: 0; } span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left: 0; padding-left: 5px; } blockquote blockquote { border-color: #00bcd4; color: #00bcd4; } blockquote blockquote blockquote { border-color: #43a047; color: #43a047; } table.grid { border-collapse: collapse; } table.grid td, table.grid th { border: 1px solid #ddd; } .fr-fic.fr-dib { display: block; margin: 5px auto; } .fr-fic.fr-dib.fr-fir { text-align: right; margin: 5px 0 5px auto; } .fr-fic.fr-dib.fr-fil { text-align: left; margin: 5px auto 5px 0; } .fr-fic.fr-dii { float: none; margin: 5px auto; } .fr-fic.fr-dii.fr-fil { float: left; margin: 5px auto; } .fr-fic.fr-dii.fr-fir { float: right; margin: 5px auto; } img.fr-dib.fr-fir { margin-right: 0; text-align: right; } img.fr-dib.fr-fil { margin-left: 0; text-align: left; } img.fr-dib { margin: 5px auto; display: block; float: none; } img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC; } img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc; } img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; } </style><style> p { margin: 0; } span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left: 0; padding-left: 5px; } blockquote blockquote { border-color: #00bcd4; color: #00bcd4; } blockquote blockquote blockquote { border-color: #43a047; color: #43a047; } table.grid { border-collapse: collapse; } table.grid td, table.grid th { border: 1px solid #ddd; } .fr-fic.fr-dib { display: block; margin: 5px auto; } .fr-fic.fr-dib.fr-fir { text-align: right; margin: 5px 0 5px auto; } .fr-fic.fr-dib.fr-fil { text-align: left; margin: 5px auto 5px 0; } .fr-fic.fr-dii { float: none; margin: 5px auto; } .fr-fic.fr-dii.fr-fil { float: left; margin: 5px auto; } .fr-fic.fr-dii.fr-fir { float: right; margin: 5px auto; } img.fr-dib.fr-fir { margin-right: 0; text-align: right; } img.fr-dib.fr-fil { margin-left: 0; text-align: left; } img.fr-dib { margin: 5px auto; display: block; float: none; } img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC; } img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc; } img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; } </style><style> p { margin: 0; } span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left: 0; padding-left: 5px; } blockquote blockquote { border-color: #00bcd4; color: #00bcd4; } blockquote blockquote blockquote { border-color: #43a047; color: #43a047; } table.grid { border-collapse: collapse; } table.grid td, table.grid th { border: 1px solid #ddd; } .fr-fic.fr-dib { display: block; margin: 5px auto; } .fr-fic.fr-dib.fr-fir { text-align: right; margin: 5px 0 5px auto; } .fr-fic.fr-dib.fr-fil { text-align: left; margin: 5px auto 5px 0; } .fr-fic.fr-dii { float: none; margin: 5px auto; } .fr-fic.fr-dii.fr-fil { float: left; margin: 5px auto; } .fr-fic.fr-dii.fr-fir { float: right; margin: 5px auto; } img.fr-dib.fr-fir { margin-right: 0; text-align: right; } img.fr-dib.fr-fil { margin-left: 0; text-align: left; } img.fr-dib { margin: 5px auto; display: block; float: none; } img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC; } img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc; } img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; } </style><style> p { margin: 0; } span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left: 0; padding-left: 5px; } blockquote blockquote { border-color: #00bcd4; color: #00bcd4; } blockquote blockquote blockquote { border-color: #43a047; color: #43a047; } table.grid { border-collapse: collapse; } table.grid td, table.grid th { border: 1px solid #ddd; } .fr-fic.fr-dib { display: block; margin: 5px auto; } .fr-fic.fr-dib.fr-fir { text-align: right; margin: 5px 0 5px auto; } .fr-fic.fr-dib.fr-fil { text-align: left; margin: 5px auto 5px 0; } .fr-fic.fr-dii { float: none; margin: 5px auto; } .fr-fic.fr-dii.fr-fil { float: left; margin: 5px auto; } .fr-fic.fr-dii.fr-fir { float: right; margin: 5px auto; } img.fr-dib.fr-fir { margin-right: 0; text-align: right; } img.fr-dib.fr-fil { margin-left: 0; text-align: left; } img.fr-dib { margin: 5px auto; display: block; float: none; } img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC; } img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc; } img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; } </style><style> p { margin: 0; } span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left: 0; padding-left: 5px; } blockquote blockquote { border-color: #00bcd4; color: #00bcd4; } blockquote blockquote blockquote { border-color: #43a047; color: #43a047; } table.grid { border-collapse: collapse; } table.grid td, table.grid th { border: 1px solid #ddd; } .fr-fic.fr-dib { display: block; margin: 5px auto; } .fr-fic.fr-dib.fr-fir { text-align: right; margin: 5px 0 5px auto; } .fr-fic.fr-dib.fr-fil { text-align: left; margin: 5px auto 5px 0; } .fr-fic.fr-dii { float: none; margin: 5px auto; } .fr-fic.fr-dii.fr-fil { float: left; margin: 5px auto; } .fr-fic.fr-dii.fr-fir { float: right; margin: 5px auto; } img.fr-dib.fr-fir { margin-right: 0; text-align: right; } img.fr-dib.fr-fil { margin-left: 0; text-align: left; } img.fr-dib { margin: 5px auto; display: block; float: none; } img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC; } img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc; } img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; } </style><style> p { margin: 0; } span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left: 0; padding-left: 5px; } blockquote blockquote { border-color: #00bcd4; color: #00bcd4; } blockquote blockquote blockquote { border-color: #43a047; color: #43a047; } table.grid { border-collapse: collapse; } table.grid td, table.grid th { border: 1px solid #ddd; } .fr-fic.fr-dib { display: block; margin: 5px auto; } .fr-fic.fr-dib.fr-fir { text-align: right; margin: 5px 0 5px auto; } .fr-fic.fr-dib.fr-fil { text-align: left; margin: 5px auto 5px 0; } .fr-fic.fr-dii { float: none; margin: 5px auto; } .fr-fic.fr-dii.fr-fil { float: left; margin: 5px auto; } .fr-fic.fr-dii.fr-fir { float: right; margin: 5px auto; } img.fr-dib.fr-fir { margin-right: 0; text-align: right; } img.fr-dib.fr-fil { margin-left: 0; text-align: left; } img.fr-dib { margin: 5px auto; display: block; float: none; } img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC; } img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc; } img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; } </style><style> p { margin: 0; } span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left: 0; padding-left: 5px; } blockquote blockquote { border-color: #00bcd4; color: #00bcd4; } blockquote blockquote blockquote { border-color: #43a047; color: #43a047; } table.grid { border-collapse: collapse; } table.grid td, table.grid th { border: 1px solid #ddd; } .fr-fic.fr-dib { display: block; margin: 5px auto; } .fr-fic.fr-dib.fr-fir { text-align: right; margin: 5px 0 5px auto; } .fr-fic.fr-dib.fr-fil { text-align: left; margin: 5px auto 5px 0; } .fr-fic.fr-dii { float: none; margin: 5px auto; } .fr-fic.fr-dii.fr-fil { float: left; margin: 5px auto; } .fr-fic.fr-dii.fr-fir { float: right; margin: 5px auto; } img.fr-dib.fr-fir { margin-right: 0; text-align: right; } img.fr-dib.fr-fil { margin-left: 0; text-align: left; } img.fr-dib { margin: 5px auto; display: block; float: none; } img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC; } img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc; } img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; } </style><style> p { margin: 0; } span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left: 0; padding-left: 5px; } blockquote blockquote { border-color: #00bcd4; color: #00bcd4; } blockquote blockquote blockquote { border-color: #43a047; color: #43a047; } table.grid { border-collapse: collapse; } table.grid td, table.grid th { border: 1px solid #ddd; } .fr-fic.fr-dib { display: block; margin: 5px auto; } .fr-fic.fr-dib.fr-fir { text-align: right; margin: 5px 0 5px auto; } .fr-fic.fr-dib.fr-fil { text-align: left; margin: 5px auto 5px 0; } .fr-fic.fr-dii { float: none; margin: 5px auto; } .fr-fic.fr-dii.fr-fil { float: left; margin: 5px auto; } .fr-fic.fr-dii.fr-fir { float: right; margin: 5px auto; } img.fr-dib.fr-fir { margin-right: 0; text-align: right; } img.fr-dib.fr-fil { margin-left: 0; text-align: left; } img.fr-dib { margin: 5px auto; display: block; float: none; } img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC; } img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc; } img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; } </style><style> p { margin: 0; } span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left: 0; padding-left: 5px; } blockquote blockquote { border-color: #00bcd4; color: #00bcd4; } blockquote blockquote blockquote { border-color: #43a047; color: #43a047; } table.grid { border-collapse: collapse; } table.grid td, table.grid th { border: 1px solid #ddd; } .fr-fic.fr-dib { display: block; margin: 5px auto; } .fr-fic.fr-dib.fr-fir { text-align: right; margin: 5px 0 5px auto; } .fr-fic.fr-dib.fr-fil { text-align: left; margin: 5px auto 5px 0; } .fr-fic.fr-dii { float: none; margin: 5px auto; } .fr-fic.fr-dii.fr-fil { float: left; margin: 5px auto; } .fr-fic.fr-dii.fr-fir { float: right; margin: 5px auto; } img.fr-dib.fr-fir { margin-right: 0; text-align: right; } img.fr-dib.fr-fil { margin-left: 0; text-align: left; } img.fr-dib { margin: 5px auto; display: block; float: none; } img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC; } img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc; } img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; } </style><style> p { margin: 0; } span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left: 0; padding-left: 5px; } blockquote blockquote { border-color: #00bcd4; color: #00bcd4; } blockquote blockquote blockquote { border-color: #43a047; color: #43a047; } table.grid { border-collapse: collapse; } table.grid td, table.grid th { border: 1px solid #ddd; } .fr-fic.fr-dib { display: block; margin: 5px auto; } .fr-fic.fr-dib.fr-fir { text-align: right; margin: 5px 0 5px auto; } .fr-fic.fr-dib.fr-fil { text-align: left; margin: 5px auto 5px 0; } .fr-fic.fr-dii { float: none; margin: 5px auto; } .fr-fic.fr-dii.fr-fil { float: left; margin: 5px auto; } .fr-fic.fr-dii.fr-fir { float: right; margin: 5px auto; } img.fr-dib.fr-fir { margin-right: 0; text-align: right; } img.fr-dib.fr-fil { margin-left: 0; text-align: left; } img.fr-dib { margin: 5px auto; display: block; float: none; } img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC; } img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc; } img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; } </style><style> p { margin: 0; } span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left: 0; padding-left: 5px; } blockquote blockquote { border-color: #00bcd4; color: #00bcd4; } blockquote blockquote blockquote { border-color: #43a047; color: #43a047; } table.grid { border-collapse: collapse; } table.grid td, table.grid th { border: 1px solid #ddd; } .fr-fic.fr-dib { display: block; margin: 5px auto; } .fr-fic.fr-dib.fr-fir { text-align: right; margin: 5px 0 5px auto; } .fr-fic.fr-dib.fr-fil { text-align: left; margin: 5px auto 5px 0; } .fr-fic.fr-dii { float: none; margin: 5px auto; } .fr-fic.fr-dii.fr-fil { float: left; margin: 5px auto; } .fr-fic.fr-dii.fr-fir { float: right; margin: 5px auto; } img.fr-dib.fr-fir { margin-right: 0; text-align: right; } img.fr-dib.fr-fil { margin-left: 0; text-align: left; } img.fr-dib { margin: 5px auto; display: block; float: none; } img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC; } img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc; } img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; } </style><style> p { margin: 0; } span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left: 0; padding-left: 5px; } blockquote blockquote { border-color: #00bcd4; color: #00bcd4; } blockquote blockquote blockquote { border-color: #43a047; color: #43a047; } table.grid { border-collapse: collapse; } table.grid td, table.grid th { border: 1px solid #ddd; } .fr-fic.fr-dib { display: block; margin: 5px auto; } .fr-fic.fr-dib.fr-fir { text-align: right; margin: 5px 0 5px auto; } .fr-fic.fr-dib.fr-fil { text-align: left; margin: 5px auto 5px 0; } .fr-fic.fr-dii { float: none; margin: 5px auto; } .fr-fic.fr-dii.fr-fil { float: left; margin: 5px auto; } .fr-fic.fr-dii.fr-fir { float: right; margin: 5px auto; } img.fr-dib.fr-fir { margin-right: 0; text-align: right; } img.fr-dib.fr-fil { margin-left: 0; text-align: left; } img.fr-dib { margin: 5px auto; display: block; float: none; } img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC; } img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc; } img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; } </style><style> p { margin: 0; } span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left: 0; padding-left: 5px; } blockquote blockquote { border-color: #00bcd4; color: #00bcd4; } blockquote blockquote blockquote { border-color: #43a047; color: #43a047; } table.grid { border-collapse: collapse; } table.grid td, table.grid th { border: 1px solid #ddd; } .fr-fic.fr-dib { display: block; margin: 5px auto; } .fr-fic.fr-dib.fr-fir { text-align: right; margin: 5px 0 5px auto; } .fr-fic.fr-dib.fr-fil { text-align: left; margin: 5px auto 5px 0; } .fr-fic.fr-dii { float: none; margin: 5px auto; } .fr-fic.fr-dii.fr-fil { float: left; margin: 5px auto; } .fr-fic.fr-dii.fr-fir { float: right; margin: 5px auto; } img.fr-dib.fr-fir { margin-right: 0; text-align: right; } img.fr-dib.fr-fil { margin-left: 0; text-align: left; } img.fr-dib { margin: 5px auto; display: block; float: none; } img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC; } img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc; } img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; } </style><style> p { margin: 0; } span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left: 0; padding-left: 5px; } blockquote blockquote { border-color: #00bcd4; color: #00bcd4; } blockquote blockquote blockquote { border-color: #43a047; color: #43a047; } table.grid { border-collapse: collapse; } table.grid td, table.grid th { border: 1px solid #ddd; } .fr-fic.fr-dib { display: block; margin: 5px auto; } .fr-fic.fr-dib.fr-fir { text-align: right; margin: 5px 0 5px auto; } .fr-fic.fr-dib.fr-fil { text-align: left; margin: 5px auto 5px 0; } .fr-fic.fr-dii { float: none; margin: 5px auto; } .fr-fic.fr-dii.fr-fil { float: left; margin: 5px auto; } .fr-fic.fr-dii.fr-fir { float: right; margin: 5px auto; } img.fr-dib.fr-fir { margin-right: 0; text-align: right; } img.fr-dib.fr-fil { margin-left: 0; text-align: left; } img.fr-dib { margin: 5px auto; display: block; float: none; } img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC; } img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc; } img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; } </style><style> p { margin: 0; } span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left: 0; padding-left: 5px; } blockquote blockquote { border-color: #00bcd4; color: #00bcd4; } blockquote blockquote blockquote { border-color: #43a047; color: #43a047; } table.grid { border-collapse: collapse; } table.grid td, table.grid th { border: 1px solid #ddd; } .fr-fic.fr-dib { display: block; margin: 5px auto; } .fr-fic.fr-dib.fr-fir { text-align: right; margin: 5px 0 5px auto; } .fr-fic.fr-dib.fr-fil { text-align: left; margin: 5px auto 5px 0; } .fr-fic.fr-dii { float: none; margin: 5px auto; } .fr-fic.fr-dii.fr-fil { float: left; margin: 5px auto; } .fr-fic.fr-dii.fr-fir { float: right; margin: 5px auto; } img.fr-dib.fr-fir { margin-right: 0; text-align: right; } img.fr-dib.fr-fil { margin-left: 0; text-align: left; } img.fr-dib { margin: 5px auto; display: block; float: none; } img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC; } img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc; } img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; } </style><style> p { margin: 0; } span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left: 0; padding-left: 5px; } blockquote blockquote { border-color: #00bcd4; color: #00bcd4; } blockquote blockquote blockquote { border-color: #43a047; color: #43a047; } table.grid { border-collapse: collapse; } table.grid td, table.grid th { border: 1px solid #ddd; } .fr-fic.fr-dib { display: block; margin: 5px auto; } .fr-fic.fr-dib.fr-fir { text-align: right; margin: 5px 0 5px auto; } .fr-fic.fr-dib.fr-fil { text-align: left; margin: 5px auto 5px 0; } .fr-fic.fr-dii { float: none; margin: 5px auto; } .fr-fic.fr-dii.fr-fil { float: left; margin: 5px auto; } .fr-fic.fr-dii.fr-fir { float: right; margin: 5px auto; } img.fr-dib.fr-fir { margin-right: 0; text-align: right; } img.fr-dib.fr-fil { margin-left: 0; text-align: left; } img.fr-dib { margin: 5px auto; display: block; float: none; } img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC; } img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc; } img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; } </style><style> p { margin: 0; } span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left: 0; padding-left: 5px; } blockquote blockquote { border-color: #00bcd4; color: #00bcd4; } blockquote blockquote blockquote { border-color: #43a047; color: #43a047; } table.grid { border-collapse: collapse; } table.grid td, table.grid th { border: 1px solid #ddd; } .fr-fic.fr-dib { display: block; margin: 5px auto; } .fr-fic.fr-dib.fr-fir { text-align: right; margin: 5px 0 5px auto; } .fr-fic.fr-dib.fr-fil { text-align: left; margin: 5px auto 5px 0; } .fr-fic.fr-dii { float: none; margin: 5px auto; } .fr-fic.fr-dii.fr-fil { float: left; margin: 5px auto; } .fr-fic.fr-dii.fr-fir { float: right; margin: 5px auto; } img.fr-dib.fr-fir { margin-right: 0; text-align: right; } img.fr-dib.fr-fil { margin-left: 0; text-align: left; } img.fr-dib { margin: 5px auto; display: block; float: none; } img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC; } img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc; } img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; } </style><style> p { margin: 0; } span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left: 0; padding-left: 5px; } blockquote blockquote { border-color: #00bcd4; color: #00bcd4; } blockquote blockquote blockquote { border-color: #43a047; color: #43a047; } table.grid { border-collapse: collapse; } table.grid td, table.grid th { border: 1px solid #ddd; } .fr-fic.fr-dib { display: block; margin: 5px auto; } .fr-fic.fr-dib.fr-fir { text-align: right; margin: 5px 0 5px auto; } .fr-fic.fr-dib.fr-fil { text-align: left; margin: 5px auto 5px 0; } .fr-fic.fr-dii { float: none; margin: 5px auto; } .fr-fic.fr-dii.fr-fil { float: left; margin: 5px auto; } .fr-fic.fr-dii.fr-fir { float: right; margin: 5px auto; } img.fr-dib.fr-fir { margin-right: 0; text-align: right; } img.fr-dib.fr-fil { margin-left: 0; text-align: left; } img.fr-dib { margin: 5px auto; display: block; float: none; } img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC; } img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc; } img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; } </style><p><span style="font-size: 11pt;"><strong>In this guide we will cover:</strong></span></p><p><span style="font-size: 11pt;"><strong>- Building blocks of runbooks&nbsp;</strong></span></p><p><span style="font-size: 11pt;"><strong>- Log a Ticket when a Runbook Fails</strong></span></p><p><span style="font-size: 11pt;"><strong>- Runbook Statistics</strong></span></p><p><span style="font-size: 11pt;"><strong>- Worked Example&nbsp;</strong></span></p><p><span style="font-size: 11pt;"><strong>- Actions that can be completed through the API</strong></span></p><p><span style="font-size: 11pt;"><strong>- Using Previous output variables in subsequent steps</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><br></p><p><span style="font-size: 14pt;"><strong>Creating a New Runbook</strong></span></p><p><span style="font-size: 11pt;">To create a runbook head to Configuration &gt; Integrations &gt; Custom Integrations &gt; Integration Runbooks &gt; New. When creating a new runbook, you will be prompted to input a name for the runbook.</span></p><p><br></p><p><span style="font-size: 11pt;">Runbooks&nbsp;</span>can be categorised into groups using the &quot;Group&quot; drop-down. These groups can be configured using the &quot;Edit Groups&quot; button at the top of Configuration &gt; Integrations &gt; Custom Integrations &gt; Integration Runbooks.</p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Once saved you will need to configure details and flow of the runbook.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 12pt;"><strong>Creating a Runbook from JSON&nbsp;</strong></span></p><p><span style="font-size: 11pt;">Once the runbook is named and saved you can import the details and flow of the runbook from JSON using the &quot;Import from JSON&quot; button. Useful when copying runbooks between instances.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">You can create a brand new runbook using JSON, using the &quot;Import from JSON&quot; button on the Integration Runbooks page. This is useful when copying runbooks between instances as the runbook created will inherit the ID from the JSON provided.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 14pt;"><strong>Triggering a Runbooks&nbsp;</strong></span></p><p><span style="font-size: 11pt;">Head to Configuration &gt; Integrations &gt; Custom Integrations &gt; Integration Runbooks and create a new runbook. When creating a new runbook, you will be prompted to input a name for the runbook.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">You can then set the &#39;Runbook Start Access&#39; this will determine where this runbook can be started (triggered) from.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Can only be started from Halo -&nbsp;Choose this option when you would like the runbook to only be able to be started from an even that occurs within this Halo instance, such as using an action, event or workflow in Halo.</span></p><p><span style="font-size: 11pt;">Can only be started from Halo and from a public endpoint - Choose this option when you would like the runbook to only be able to be started (triggered) by an event that occurs within Halo, but you would also like events from other applications to be able to trigger this runbook.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><br></p><p><span style="font-size: 11pt;">Runbooks triggers control when a chosen runbook will be &#39;triggered&#39; to run and have it&#39;s flow begin. There are various ways to trigger runbooks.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 12pt;"><strong>Starting Runbooks from a Public Endpoint</strong></span></p><p><span style="font-size: 11pt;">When this option is selected as the &#39;Runbook Start Access&#39; it can be triggered when an external application posts to the given URL. When enabled you will be provided with the URL that the POST most be sent to to trigger this runbook.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjZkNTdiYjg0LWFhMDItNGRhNS1iNWNhLTE4MTM2NDBkNTBlMiJ9.Qah1OUKiWVfU5sd-gaomurN3ogiSSN4WvnKw8lixRb4" class="fr-fic fr-fil fr-dib" width="759" style="width: 761px; height: 252.789px;" height="253"></span><span style="font-size: 10pt;"><strong>Fig 1. URL to post to to start this runbook</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">When starting runbooks this way (externally), you can choose how the incoming request is authenticated using the &quot;Authentication&quot; field.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><ul><li style="font-size: 11pt;"><strong>No Authentication:</strong> Anyone will be able to trigger this runbook by posting to this URL (not recommended)&nbsp;</li><li style="font-size: 11pt;"><strong>Basic Authentication:</strong> Enter a username and password against the runbook in Halo, the incoming request to trigger this runbook must contain this username password in order to be authenticated.&nbsp;</li><li style="font-size: 11pt;"><strong>Validate Signature using signature key:&nbsp;</strong>Allows you to authenticate the runbook using a signature and secret key. You will need to enter the details of the secret key and signature in Halo, using the fields shown in figure 2.</li><li style="font-size: 11pt;"><strong>Halo API Bearer Token:&nbsp;</strong>Allows you to authenticate the runbook using a bearer token.</li><li style="font-size: 11pt;"><strong>Secret in Header:</strong> Allows you to authenticate the runbook using a parameter and secret value.</li><li style="font-size: 11pt;"><strong>Secret in URI Parameter:</strong> Works similarly to webhook authentication within Integrations. Allows you to authenticate the runbook using a parameter and secret value.</li></ul><p><span style="font-size: 11pt;">&nbsp;<img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImZiZmI5MTcxLThhYzAtNGJiMi04ZDJjLWY3ZWYyNjliOTNlZCJ9.l_uQRq8SwC5XgEGMahNjX4IjS43l54EqxtGdwHkOZBM" class="fr-fic fr-fil fr-dib" width="891" style="width: 893px; height: 476.89px;" height="477"></span><span style="font-size: 10pt;"><strong>Fig 2. Fields to allow runbook start to be authenticated using secret key</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">You can specify request headers to include in the signature when validating an inbound payload to start a Runbook. Any header names can be added here and they will be pre-pended to the payload when verifying the signature.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">You can also use a timestamp to authorise the request starting this runbook. The request will need to contain a timestamp in RFC1123 date standard format (E.G &quot;Tue, 29 Apr 2025 11:25:12 GMT&quot;). specify the name of the request header this timestamp is contained in in the &#39;Timestamp header name&#39; field in Halo. Halo will then validate that header is present and the value has is a valid timestamp which is within 1 minute, only then will the request be authenticated.&nbsp;</span></p><p><br></p><p><span style="font-size: 11pt;">You will be able to setup a Webhook verification handshake. To do this set the &quot;Initial Webhook Verification&quot; drop-down to &quot;Respond with a challenge token&quot;. This will trigger a challenge token once the Webhook is received, which is returned to the provider to validate that the URL is trusted.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 12pt;"><strong>Trigger based on an event in Halo</strong></span></p><p><span style="font-size: 11pt;">To have a runbook triggered automatically when a certain event occurs in Halo you will need to set an &#39;Event&#39; against the runbook.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Scroll down to the &#39;Events&#39; section within the runbook details. Here you can add an event to the table to determine which event will trigger this runbook.&nbsp;</span></p><p><br></p><p data-pasted="true"><span style="font-size: 11pt;">From v2.242+, attachments that are deleted or edited on a &nbsp;Ticket can be used to trigger a Runbook by using the events &quot;</span>Document deleted on a Ticket&quot; and &quot;Document edited on a Ticket&quot; respectively.&nbsp;</p><p><br></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImRlOTVjMTA0LTM0MTgtNGQ4Ni05MzgwLTUxZmYzMGEwYmUyMiJ9.o6xWk1UWE2FcQkNwTVeDmeWXNYkfVqtkFc6ueRk-9fA" class="fr-fic fr-fil fr-dib" width="1368" style="width: 1370px; height: 653.291px;" height="653"></span></p><p><span style="font-size: 10pt;"><strong>Fig 3. Runbook events</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Once you have chosen an event additional criteria can be added to narrow down when the runbook is triggered. In the figure 4 example the runbook will only trigger when a new ticket is logged and the primary asset linked to the ticket includes one of the selected assets.</span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNjMGIzYTk0LWM3NDQtNGI4Yy05YjRlLTQ0MjJlYzA5ZTFjMyJ9.jBrOLJAjXfpqZxYf5PRQqCWC9sXCa-hoSoBSPuUqaXw" class="fr-fic fr-fil fr-dib" width="566" style="width: 568px; height: 474.812px;" height="475"></span></p><p><span style="font-size: 10pt;"><strong>Fig 4. Example trigger criteria</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 12pt;"><strong>Trigger from an Action</strong></span></p><p><span style="font-size: 11pt;">To have a runbook trigger when a particular action is used on a ticket you will need to <a data-fr-linked="true" href="https://usehalo.com/haloitsm/guides/1921/" id="isPasted" target="_blank" rel="noopener noreferrer" style="font-size: 11pt;">configure an action</a> with the system use &#39;Send Webhook/Queue Integration Runbook&#39;. Useful when you would like to manually run the runbook.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Head to Configuration &gt; Tickets &gt; Actions &gt; new, set the system use to &#39;Send Webhook/Queue Integration Runbook&#39; then choose which runbook you would like to be triggered when this action is used.&nbsp;</span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijk3ZGEwYjc3LTM5YjEtNDkxYy1hYzU5LTJkODJkNTlhMWMwYyJ9._ixE6XPYwYHQHVBWk8hViWXfNt9HPJaacO42eZpYmi8" class="fr-fic fr-fil fr-dib" width="684" style="width: 686px; height: 633.875px;" height="634"></span></p><p><span style="font-size: 10pt;"><strong>Fig 5. Action to trigger runbook&nbsp;</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Now just ensure you add this action to the relevant workflows.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 12pt;"><strong>Trigger from a Custom Button</strong></span></p><p><span style="font-size: 11pt;"><a data-fr-linked="true" href="https://usehalo.com/haloitsm/guides/2038/" id="isPasted" target="_blank" rel="noopener noreferrer" style="font-size: 11pt;">Custom buttons</a> can be configured to start a runbook. Allowing you to manually trigger a runbook outside a ticket. This is supported for custom buttons for the following entities: Client, Site, User, Device, Quotation, Purchase Order, Invoice, Sales Orders.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Head to Configuration &gt; Custom Objects &gt; Custom Buttons &gt; New, when creating the button set the &#39;Button Use&#39; to &#39;Start a Runbook&#39;. Then choose the runbook to start.&nbsp;</span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijk3NzQyOWQyLTE0MDMtNDUzMS1hYzFmLThkYzUyZjBjZWRmYSJ9.ya7CEa12T42YR34bEadKrylkmcOgMGQyZU1rwMvK3C8" class="fr-fic fr-fil fr-dib" width="1056" style="width: 1058px; height: 634.441px;" height="634"></span></p><p><span style="font-size: 10pt;"><strong>Fig 6. Custom button to start a runbook&nbsp;</strong></span></p><p><br></p><p><span style="font-size: 12pt;"><strong>Trigger a Runbook from another Runbook</strong></span></p><p><span style="font-size: 11pt;">Runbooks can be triggered from another runbook, useful when you need a different runbook to begin when this runbook reaches it&#39;s end/a certain step. Or when the runbook being triggered uses data the the first runbook obtained.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">This is done by creating a runbook step that uses the &quot;Action Type&quot; &quot;Start a new Runbook&quot; (more information on setting up runbook steps in the next section).</span></p><p><span style="font-size: 10pt;"><strong><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImI0YTg2ZGZlLWJiZGUtNGE4Ni05YzI0LTc0YzNmZThkYTRjZSJ9.h7PPSnNrunaKn0jBn11eFmvT9rccfEUnEuQwxD_tFs8" class="fr-fic fr-fil fr-dib" width="1605" style="width: 1607px; height: 443.31px;" height="443"></strong></span></p><p><strong><span style="font-size: 10pt;">Fig 7. Step to trigger a new runbook</span></strong></p><p><br></p><p><span style="font-size: 11pt;">From v2.234+ once you have chosen which runbook you would like to trigger you can map runbook level variables together for the two runbooks. This allows you to easily pass data from the initial runbook to the new runbook. Variables mapped here will be available as starting values (variables) for the newly triggered runbook.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">In the Figure 8 example variables are mapped so that data in the ticket_id variable will be passed into the ticket_id variable of the runbook being triggered. &nbsp;</span></p><p><strong><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg5MWUxMDM5LWIzZWUtNGVjOC1iNWI4LWRhYTlhMzcyZjg5YyJ9.k-7oKWXEEojwtBLBcY2nMCz6BasG8hkj_M_7f6EC_OA" class="fr-fic fr-fil fr-dib" width="1632" style="width: 1634px; height: 446.809px;" height="447"></strong><br></p><p><strong><span style="font-size: 10pt;">Fig 8. Mapped variables example</span></strong></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 14pt;"><strong>Step Setup</strong></span></p><p><span style="font-size: 11pt;">Once you have saved your Custom Integration, the flow chart tab will become available.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">The flow chart tab will contain each step of your runbook, each step will control which action is carried out and when, the outcome of the step will then determine which step will be executed next.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">When adding a step you will need to choose the &#39;Type&#39; of step it is.&nbsp;</span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImU4NzVjZjA1LWQ0MWMtNGVkOS1iOTE2LWYyODczYjc3NTFhYyJ9.df_8ppQNnElA-gBrLW_2URCKN6qfn_yCKLGWzI6jW8o" class="fr-fic fr-fil fr-dib" width="1380" style="width: 1382px; height: 605.765px;" height="606"></span></p><p><span style="font-size: 10pt;"><strong>Fig 9. Step type</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><strong>Condition</strong> - Will allow you to configure a step that evaluates data. If the condition is met the runbook will move to step x, if not met it will move to step y.&nbsp;</span></p><p><span style="font-size: 11pt;"><strong>Action</strong> - Will allow you to configure a step that carries out an action. Various actions can be executed, this could be making a POST/GET request to a specified endpoint.&nbsp;</span></p><p><span style="font-size: 11pt;"><strong>End</strong> - Will complete and stop the runbook. You will need to then choose if reaching this step mean success or failure. &nbsp;Successful end steps will be green.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">The action you choose can be of type &quot;Start a new Runbook&quot;. This will end the current Runbook and start a new Runbook based on your selection in the drop-down below the Action Type. This is useful to break up long Runbooks to them prevent timing out.&nbsp;</span></p><p><br></p><p><span style="font-size: 11pt;">As of v2.234.1+ you will be able to access the logs of a Runbook from this screen by clicking the &quot;Logs&quot; button.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 12pt;"><strong>Halo API Actions</strong></span></p><p><span style="font-size: 11pt;">We have some pre-configured actions available for you to use in Runbooks out of the box, these are called &#39;HaloAPI&#39; actions. These are used to make requests in your own Halo instance, useful for obtaining data from your instance or updating your instance. When using these actions you do not need to setup any additional authentication as this is built into the actions.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">To use these actions set the step type to be &#39;Action&#39; and the &#39;Action type&#39; to be Halo API Action&#39;. You will then be given a choice of actions that can be used in the &#39;Action&#39; field.&nbsp;</span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc1NDk4OGM4LTkxMjItNGI1OC05MTA0LTNkNjE2ODRlMDE0MiJ9.4hle-FXZQygTklGUTso-y_W31pvFLJofsR4v678C_4s" class="fr-fic fr-fil fr-dib" width="1063" style="width: 1065px; height: 646.971px;" height="647"></span></p><p><span style="font-size: 10pt;"><strong>Fig 10. Halo API actions</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">&#39;Create&#39; actions - Will make a new entry for the entity specified. For example when &#39;Create Ticket&#39; is chosen a new ticket will be created in your instance with the specified information.&nbsp;</span></p><p><span style="font-size: 11pt;">&#39;Update/Edit&#39; actions - Will make changes to an existing instance of the entity specified. For example, when &#39;Edit Site&#39; is chosen an existing site will be updated with the specified information.&nbsp;</span></p><p><span style="font-size: 11pt;">&#39;Get&#39; actions - Will retrieve data from your database for the entity specified. For example, &#39;Get Customer&#39; will get all the information from the Clients endpoint of the Halo API. This data can then be stored as output variables to be used in later steps of the Runbook.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">When an action is chosen that is creating/updating/editing an entity, you will be provided with a default JSON body.&nbsp;</span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjE2ZDZkYmQ1LTE0NzMtNDExNS1hMzAyLTg4NGU0YzZhNDQ3MyJ9.74QjYGwLVVze0iizOIhcI3A8w-psbFf4ZRngybH5Ir4" class="fr-fic fr-fil fr-dib" width="1410" style="width: 1412px; height: 628.55px;" height="629"></span></p><p><span style="font-size: 10pt;"><strong>Fig 11. Default JSON body for Halo API Action to update a ticket</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">This provides a template for the request the action will make. You will need to edit the body here in line with the request you would like to make. For example, if you would like a specific field on the ticket to be updated with a set value, the JSON key for this field and the value will need to be included in the request.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">To find out which JSON key is needed to update the desired fields, checkout our API documentation, found under configuration &gt; Integrations &gt; Halo API &gt; API Documentation. &nbsp;</span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ5MzhjMWNkLTc2ZjAtNGFlNi1iMDM2LTJjOGViYTczODE2NiJ9.HP7V1HSeqYyyLrXtre7ry_ILlFdwhRXK1KkPeY8nN_0" class="fr-fic fr-fil fr-dib" width="1098" height="606"></span></p><p><span style="font-size: 10pt;"><strong>Fig 12. Access API documentation</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Halo API actions are useful for completing straightforward requests into your own instance. If you are looking to make a request elsewhere, you will need to configure an integration method.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 12pt;"><strong>Methods</strong></span></p><p><span style="font-size: 11pt;">Methods define a series of different API requests that can be made for a given custom integration. Each Method allows you to&nbsp;</span></p><ul><li style="font-size: 11pt;">specify a HTTP Method (GET, POST, PUT etc..)&nbsp;</li><li style="font-size: 11pt;">Send requests to a particular endpoint.</li><li style="font-size: 11pt;">Include Query Parameters for the requested resource.</li><li style="font-size: 11pt;">Include request headers, and a&nbsp;request body (if the HTTP method permits).</li><li style="font-size: 11pt;">Specify Output variables, which can be used further on down the road.</li></ul><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgwYTM1MmUwLWY4ODAtNGFkNS1iYzgyLTdmYjcwMDRjZDg4NSJ9.n0nMUTsDlI57K8TTMMRyuUsNgH2kvaFed_JM4JGuzu8" class="fr-fic fr-fil fr-dib" width="980" style="width: 980px; height: 507.492px;" height="507.492"></span></p><p><span style="font-size: 10pt;"><strong>Fig 13. Method</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">In the below example, I am making a request to the Completions endpoint of OpenAI&#39;s API. Authentication is already handled by the fact that I have selected my &#39;Integration&#39; as &#39;OpenAI&#39; (&amp; already added in the bearer token in the previous step). As I am making a POST Request, I am permitted to include a Request Body.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc5NWMxNjNhLTBlNmItNGIyZS1hZmZkLTA3OTMxMzNkNzQzNiJ9.ZadTyxZMybVyz-HWn0SEiitytXGtf2888lKNFntmUPk" class="fr-fic fr-fil fr-dib" width="775" style="width: 775px; height: 374.07px;" height="374.07"></span></p><p><span style="font-size: 10pt;"><strong>Fig 14. Request body example</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Click &#39;Test&#39; to make sure you get a successful response &amp; to check the response body.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwOWIyYjMxLTU3YmYtNDNkNC1hMDk5LThmMDc0OWMxMWZlZSJ9.InAfPnEDGK7vGOrXUogk7DNcXbIhgY4n99NIS5Rm3UU" class="fr-fic fr-fil fr-dib" width="674" style="width: 674px; height: 199.325px;" height="199.325"></span></p><p><span style="font-size: 10pt;"><strong>Fig 15. Response body following test</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><strong><em>Note: Gzip responses will be decoded.</em></strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 12pt;"><strong>Runbook Level Variables</strong></span></p><p><span style="font-size: 11pt;">The chances are you are not going to want the entire&nbsp;response body, but only particular parts of the response. In the above example, I&#39;m really only concerned with the &#39;Text&#39;, within the &#39;Choices&#39; array.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Runbook variables can be used to define a particular part of a response body, extracting and storing the data you need.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">When adding a variable, you will see the window shown in Figure 16.&nbsp;</span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjJhMDQ4MGIyLWJkZTEtNGJhNC05ZTVhLTI5ZDA0ZTFiMTM5ZiJ9.0rr5I57srWWYG2neXYCm9yg0jGs5R-pu7pZ6EIvDJuY" class="fr-fic fr-fil fr-dib" width="476" style="width: 476px; height: 590.728px;" height="590.728"></span></p><p><span style="font-size: 10pt;"><strong>Fig 16. Runbook variables example</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">There are some details in this window outlining the required syntax, the key points are:</span></p><ul><li style="font-size: 11pt;">Variables must start with response.</li><li style="font-size: 11pt;">Child properties are referenced using ^</li><li style="font-size: 11pt;">Arrays can be indexed using [x]</li><li style="font-size: 11pt;">Conditions can be added to return a specific object in an array where prop=value&nbsp;via [prop=value], i.e: response[id=123]</li><li style="font-size: 11pt;">Append ! to your variable value to remove the leading/trailing &quot; character from the value.</li></ul><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">For information on creating and using runbook variables checkout: <a target="_blank" rel="noopener noreferrer" data-fr-linked="true" href="https://usehalo.com/haloitsm/guides/2736" data-pasted="true" style="font-size: 11pt;">Runbook Level Variables</a>.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 12pt;"><strong>Triggering Multiple instances of the same runbook - Runbook Execution modes&nbsp;</strong></span></p><p><span style="font-size: 11pt;">If your runbook is triggered multiple times in a short space of time, that is the next instance of the runbook will be triggered before the previous instance has finished it&#39;s run/completed, you will need to consider the execution mode of your runbook. &nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">You can choose whether runbooks instances execute in series or in parallel. Navigate to the details tab within the runbook &gt; advanced section &gt; see &#39;Runbook execution mode&#39;.&nbsp;</span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjRjNGZhNzEyLTgzM2ItNDMzMy1iNTQyLTRhODcyYjBiOGFmZCJ9.a8zYElNb7qlqBiJS6Gw1sHgERUo7iv9XscTrYgoj1sY" class="fr-fic fr-fil fr-dib" width="1347" height="313"></span></p><p><span style="font-size: 10pt;"><strong>Fig 17. Runbook execution mode</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><strong>Parallel</strong> - When selected if the same runbook is triggered again before the previous run is finished, the next run will begin at the same time. Two or more instances of the same runbook will execute in parallel.</span></p><p><span style="font-size: 11pt;"><strong>Series</strong> - When selected if the same runbook is triggered again before the previous run is finished, the next run will not begin until the previous run has finished. Two or more instances of the same runbook will not run at the same time, they will run in the order they were triggered. This should be used when the runbook relies on a previous result of a previous run.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">There is another option here to auto-disable the runbook if it fails a certain number of times in a row. This is enabled per runbook, and defaults to be disabled. It is recommended to set this to 3-5 times so if the runbook is misconfigured, it does not continue to loop.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImE4NzU5MjdlLWM3MTEtNDhkNC05OWVjLTM0M2ZlMjQxYTBhYiJ9.N1CkLkV4JtrKW_PTYYNL-QCQnDUT-OLjlt9Jo7rnY74" class="fr-fic fr-fil fr-dib" width="338" height="101"></span></p><p><span style="font-size: 10pt;"><strong>Fig 18. Auto-disable threshold.</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Runbooks can also send a notification or email when they fail. Upon enabling the runbook notification, agents with the preference to be sent error notifications will receive these, and an additional option to send an email will show. This can be set to &quot;Don&#39;t Send&quot;, or an agent can be set here to receive the email.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjYxMTliMzEzLTU2ZGEtNDJlYi05YWRlLTM2OWFhYjRiNWExZSJ9.7Md5jysvxRj-mni0yOAhha7tVC1c9S-y6tcT6ZQI-40" class="fr-fic fr-fil fr-dib" width="393" height="126"></span></p><p><span style="font-size: 10pt;"><strong>Fig 19. Runbook failure notification.</strong></span></p><p><br></p><p>When an email is set to be sent if the Runbook fails, you will then be able to specify the email template to send. &nbsp;</p><p><br></p><p><span style="font-size: 11pt;">From v2.236+ the following variables can be used in your Runbook failure email template:</span></p><ul data-pasted="true"><li>$-RUNBOOKID - The unique identifier for the runbook</li><li>$-RUNBOOKNAME - The name of he runbook</li><li>$-RUNBOOKNOTES - The notes from the runbook</li><li>$-RUNBOOKLOGRETENTIONDAYS - The number of days that logs for the runbook are retained</li><li>$-RUNBOOKGROUPNAME - The name of the runbook&#39;s group</li></ul><p><span style="font-size: 11pt;"><br></span></p><p data-pasted="true"><span style="font-size: 14pt;"><strong>Log a Ticket when a Runbook Fails</strong></span></p><p><span style="font-size: 11pt;">You can configure a ticket to automatically log if a runbook has failed more than X times in a row. This is useful for auditing the runbook.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">To configure this head to the Details tab of the runbook &gt; Advanced section and set &quot;Create a Ticket after X failed attempts in a row&quot; with the number of times this runbook is allowed to fail before a ticket is logged.&nbsp;</span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImZiODliY2E2LTc3N2YtNDdlNS1iZDYyLTlhMDQ1ZTE0YzM3ZSJ9.4stUhBgNB7wFWNR67R7xaYQl8RruYJnyUy4onI9Z8vM" class="fr-fic fr-fil fr-dib" width="1358" style="width: 1360px; height: 417.858px;" height="418"></span></p><p><span style="font-size: 10pt;"><strong>Fig 20. Create a Ticket after X failed attempts in a row.</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Once this is set, you will need to choose the ticket type that will be logged when this runbook fails and the user the ticket will be assigned to.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Now, when a runbook fails you will be able to see in the log of the attempt if a ticket has been logged.&nbsp;</span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImU1YTMyNWRiLWYyZDktNGE3Mi04ZjE3LTk3ZjQzZTVlMzc5NiJ9.oyF4V0oKRPM68Dy5dBMVZReu08RfsYrgnrTrAHzTTTg" class="fr-fic fr-fil fr-dib" width="702" height="245"></span></p><p><span style="font-size: 10pt;"><strong>Fig 21. Ticket logged on runbook failure.</strong></span><span style="font-size: 11pt;">&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">The logged ticket will look as shown in figure 20. With the details providing a link to the runbook that logged that failed, logging the ticket.&nbsp;</span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg1ZTRjYzlmLTE3MDMtNDc2Zi05YWE1LTViMTRmYzcyNzczMCJ9.eQvaZ2IfMEqEqjIVdq46fUZNfT8-nypq01T-Ef1RsvY" class="fr-fic fr-fil fr-dib" width="1021" style="width: 1023px; height: 349.704px;" height="350"></span></p><p><span style="font-size: 10pt;"><strong>Fig 22. Ticket logged from runbook failure.&nbsp;</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 14pt;"><strong>Runbook Statistics</strong></span></p><p><span style="font-size: 11pt;">Each runbook will have a number properties tracked, these statistics will be visible under the details of the runbook.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImI4MmJjZDBkLTEwMTYtNDlhZC1iYTg0LWFiZjBmNGFiMzQwOCJ9.WMNrHOVfZJco814rHBbmOo5tYZciz5Tw95zIiKQYq_s" class="fr-fic fr-fil fr-dib" width="899" style="width: 901px; height: 622.467px;" height="622"></span></p><p><span style="font-size: 10pt;"><strong>Fig 23. Runbook statistics</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><strong>Average steps executed</strong> - This is the average (mean) number of steps within the runbook that have been executed (successfully or not) within the last 30 days.&nbsp;</span></p><p><span style="font-size: 11pt;"><strong>Maximum steps executed</strong> - This is the most number of steps within this runbook that have been executed in one run in the last 30 days.&nbsp;</span></p><p><span style="font-size: 11pt;"><strong>Average execution time</strong> - This is the average time the runbook took to execute within the last 30 days.&nbsp;</span></p><p><span style="font-size: 11pt;"><strong>Maximum execution time</strong> - This is the longest time the runbook took to execute within the last 30 days.&nbsp;</span></p><p><span style="font-size: 11pt;"><strong>Runs in the last day</strong> - The number of times the runbook has run in the last 24 hours.&nbsp;</span></p><p><span style="font-size: 11pt;"><strong>Runs in the last week</strong> - The number of times the runbook has run in the last week.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 12pt;"><strong>Statistics per run</strong></span></p><p><span style="font-size: 11pt;">Statistics are also available per instance of the runbook (each time it is triggered). You can currently see statistics for the number of steps that were executed in this run and the time it took to execute.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">To see these statistics head to the &#39;Log&#39; tab of the runbook select the log that corresponds to the instance/run of the runbook you would like to review. Select the log entry &gt; Log tab &gt; statistics are visible here.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjJjMGRmNmJjLTY2OGMtNGVkNC1iNjUxLTM3NDQxMmI5ZWMxMiJ9.n4Yr1tENbpDfNtcjiM4O1z7kmORgX61xgtSd2Ripto8" class="fr-fic fr-fil fr-dib" width="451" style="width: 453px; height: 256.043px;" height="256"></span></p><p><span style="font-size: 10pt;"><strong>Fig 24. Statistics for individual runbook instance</strong></span></p><p><br></p><p>From v2.242+, A warning will show in Automation/Custom Integration logs when execution time is longer than 15 minutes.</p><p><br></p><p><span style="font-size: 14pt;"><strong>Worked Example- Post a response from OpenAI into the ticket</strong></span></p><p><span style="font-size: 11pt;">Now we have an understanding of the building blocks towards creating a &#39;Custom Integration&#39; (i.e.: we can make requests to protected endpoints and create output variables from response data), let&#39;s look at tying multiple methods together via Runbooks.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Runbooks are similar to Ticket Workflows, in that you have a flow chart composed of &#39;Steps&#39;. The core difference is instead of each step containing Ticket Actions, they contain Custom Integration Methods.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Let&#39;s build on the previous example to create the following functionality:</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">&quot;I want to create an Action - &#39;Ask OpenAI a Question&#39; - that takes the contents of the note field from the action as the question/prompt and posts OpenAI&#39;s response back to the Ticket&quot;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Functionally, this would be composed of 2 Methods:</span></p><ol><li style="font-size: 11pt;">An initial POST to OpenAI&#39;s API<ul style="font-size: initial;"><li style="font-size: 11pt;">We will want to do this from a Ticket via an Action &amp; set the Prompt based on the Action text.</li></ul></li><li style="font-size: 11pt;">A Post back to our own API<ul style="font-size: initial;"><li style="font-size: 11pt;">This Post should create an Action on the same ticket with the text being OpenAI&#39;s response text to our Prompt.</li></ul></li></ol><p><span style="font-size: 11pt;">We have already seen how to create the first request, the only difference would be that our prompt should now take the note of the Action it will be triggered from. This can be handled by using a variable for the &#39;Prompt&#39;.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImM2ZTNmZGJmLWVmNTAtNDZiMi1iYjQ4LTYyNzBjNTlkZTA2YyJ9.BMB_SrziB9k5KU6su0ZweQhu5P0iJm2lZnWHfluX2Bo" class="fr-fic fr-fil fr-dib" width="429" style="width: 429px; height: 264px;" height="264"></span></p><p><span style="font-size: 10pt;"><strong>Fig 25. using variable for prompt</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">To POST back &quot;OpenAI&#39;s&quot; response to the Ticket in question, you would have to create a &#39;Custom Integration&#39; to your own instance&#39;s API.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjM2OTNhNGZhLTkyMTUtNGRjMC05YjNmLTRhODEwN2YzYWZkNiJ9.a-zf1lCojAsqi8dS_jbkv1gOB2A6UlDtAnI8IcBPeYU" class="fr-fic fr-fil fr-dib" width="936" style="width: 938px; height: 452.463px;" height="452"></span></p><p><span style="font-size: 10pt;"><strong>Fig 26. create new custom integration</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">The method required for this example would be a POST request to &#39;/api/actions&#39;, passing in the Ticket ID as a variable &amp; utilising the previously created Output Variable - &#39;ResponseText&#39;.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImU3MWY0MWFkLWY0MTMtNDhiZS1iMWQ4LWY3NGFhMTI5YWFiMCJ9.V-lPobnpM3lKxAQGF2JGGFxmOUaDZ_cGOOGOMO5k8hQ" class="fr-fic fr-fil fr-dib" width="473" style="width: 473px; height: 222.146px;" height="222.146"></span></p><p><span style="font-size: 10pt;"><strong>Fig 27. Method required&nbsp;</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">So we now have the two methods required for our &#39;Integration&#39;, next is to tie them together in a Runbook.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Head to the &#39;Integration Runbooks&#39; section of the Custom Integration configuration. Upon creating a new Runbook, you will first be presented with the &#39;Details&#39; tab. In here, you can establish a &#39;Runbook Start Access&#39; &amp; specify events that can occur in Halo that would trigger the Runbook.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwOTkzNGNiLWNiOWMtNGQ1Ny1iMmEzLWNmYTJjYzU3ZmZhNiJ9.GZtZTgbrvAwegDiTJUyHSMd3K7kFfBIaS2LSwwJAVdg" class="fr-fic fr-fil fr-dib" width="1175" style="width: 1175px; height: 559.497px;" height="559.497"></span></p><p><span style="font-size: 10pt;"><strong>Fig 28. Runbook start access</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">These trigger events have been added:</span></p><p><span style="font-size: 11pt;"><br></span></p><ul id="isPasted"><li style="font-size: 11pt;">Feedback Added</li><li style="font-size: 11pt;">Stock Received</li><li style="font-size: 11pt;">Stock Removed</li><li style="font-size: 11pt;">Recurring Invoice Created</li><li style="font-size: 11pt;">Recurring Invoice Updated</li><li style="font-size: 11pt;">Recurring Invoice Deleted</li></ul><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Runbook Start Access has two options:</span></p><ul><li style="font-size: 11pt;">Can only be Started from Halo&nbsp;-&nbsp;This option will mean that Runbooks can only be triggered from an Action, Event or Workflow.</li><li style="font-size: 11pt;">Can only be Started from Halo and from a public Endpoint&nbsp;- When this option is selected, some new configuration options will be presented.</li></ul><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImI1Njk3OTU1LWY3ZGMtNGU3Ni04NWE3LTRmNDg2YjgyOGNmZSJ9.D86QlDJr13Cw5S1gXp14mhxkFGBGgX06nZRycf2T2-c" class="fr-fic fr-fil fr-dib" width="588" style="width: 588px; height: 824.043px;" height="824.043"></span></p><p><span style="font-size: 10pt;"><strong>Fig 29. Runbook can only be Started from Halo and from a public Endpoint</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Firstly, a URL will be presented. This is the URL that would need to be called, if triggering the runbook from outside of Halo. this URL will only accept POST requests. Note: If triggering a runbook from an external source, Ticket variables cannot be used.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">You can also specify an authentication method required for the POST to this endpoint. Current methods include Basic Auth &amp; Signature Validation via Secret Key. Below this Authentication option, you will see an &#39;Input Variables&#39; table - this table will allow you to create variables&nbsp;from the initial payload of the POST request, that can be used in subsequent methods within the Runbook (the variables established here are only valid when the Runbook is triggered from the external source).</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">You will also see a &#39;Flow Chart&#39; tab - this is where you construct the Runbook logic. Similar to Ticket Workflows, the Flow Chart of a Runbook is composed of &#39;Steps&#39;, where each Step corresponds to a Condition or Integration method. Conditions being met or integration Methods returning successful responses can then move the runbook to a new step in the flow chart.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Lets look at the Runbook Flow Chart for our Custom Integration.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjgyYzczYmY5LTM2NzUtNDIxZC1hNzBhLWVhYWIyNTNkZWE1MiJ9.pmkESWDba-iJu5iHXgswY2mqIV8ci-pTMKAqmC99Cmg" class="fr-fic fr-fil fr-dib" width="601" style="width: 601px; height: 461.937px;" height="461.937"></span></p><p><span style="font-size: 10pt;"><strong>Fig 30. Runbook flow chart</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Again, our custom Integration is composed of two methods:</span></p><ul><li style="font-size: 11pt;">&nbsp;An initial POST to OpenAI</li><li style="font-size: 11pt;">A POST back to our own API with OpenAI response.</li></ul><p><span style="font-size: 11pt;">So we can see here that our initial step, &#39;Ask Question&#39;, is configured such that we are executing an Integration Method - Post Completions. If we get a successful response, we then move on to our next step.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjI3MThmMzBiLTFhNmMtNGFlOS1hZjlhLTdiMWZiYjI3YjRmNyJ9.gjbj3R1td5wthHtiwffTHZ_e56quMcq03bIDqohG-k0" class="fr-fic fr-fil fr-dib" width="591" style="width: 591px; height: 679.183px;" height="679.183"></span></p><p><span style="font-size: 10pt;"><strong>Fig 31. Step example</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">In the next step, we are executing a different method - &#39;Post OpenAI Action to Ticket&#39;.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Finally, we need to see how the Runbook is actually triggered. In this example, we are Triggering the Runbook from an Action in Halo. The Action is configured such that the System Use is &#39;Queue Webhook/runbook&#39;, at which point you can select the Runbook to queue.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjRkMWU4Nzc2LTNmNGYtNGI4Yi1iZmZmLWIwOGY2OTY5MWIyZCJ9.tmzW4LmqfcENtwM6GOV4OxwXkjgwV6QQFnQI8z4IbS8" class="fr-fic fr-fil fr-dib" width="375" style="width: 375px; height: 253.311px;" height="253.311"></span></p><p><span style="font-size: 10pt;"><strong>Fig 32. Runbook trigger</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 14pt;"><strong>Halo API Actions</strong></span></p><p><span style="font-size: 11pt;">Direct changes can be made to your Halo instance via runbooks. The following can be achieved by using the Halo API action on a runbook step:</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">These are the actions which can be added to a runbook</span></p><ul><li style="font-size: 11pt;">Create Customer</li><li style="font-size: 11pt;">Edit Customer</li><li style="font-size: 11pt;">Create site</li><li style="font-size: 11pt;">Edit Site</li><li style="font-size: 11pt;">Create User</li><li style="font-size: 11pt;">Edit User</li><li style="font-size: 11pt;">Create Asset</li><li style="font-size: 11pt;">Edit Asset</li><li style="font-size: 11pt;">Create Lookup</li><li style="font-size: 11pt;">Edit Lookup</li><li style="font-size: 11pt;">Create Knowledge Base Article</li><li style="font-size: 11pt;">Edit Knowledge Base Article</li><li style="font-size: 11pt;">Edit Custom Table Data</li><li style="font-size: 11pt;">Create Ticket rule</li><li style="font-size: 11pt;">Edit Ticket Rule</li><li style="font-size: 11pt;">Get Control (Global Settings)</li></ul><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 12pt;"><strong>Action Configuration</strong></span></p><p><span style="font-size: 11pt;">This can be configured within the runbook step by using the following.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjMyNjQyNjNkLTNiYWEtNDIyMS1hNjJmLWE4NjY2YzM1MzY4YSJ9.OyvLt0gGv4BVxbMwBYx_QZE5BWbxUMUBuHKBOjlEizs" class="fr-fic fr-fil fr-dib" width="1033" style="width: 1033px; height: 444.418px;" height="444.418"></span></p><p><span style="font-size: 10pt;"><strong>Fig 33. Action configuration</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">After the action has been set on the single select field &quot;Create Customer&quot; The name can be added to the JSON (The JSON will auto populate based on the action chosen)</span></p><p><span style="font-size: 11pt;">The next step is to create an action to execute the runbook (make sure to add this to the workflow if your ticket contains one, or add it to the Allowed actions if there are restrictions set on actions).</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY4MjA4YzI2LTFkOWItNGFlOS1hYjBmLWM2ZTMwNGNhZDc3ZiJ9.4yxUpphFhiH1uMsvjJSrg8_kdk-yEQLLySRExA8rksE" class="fr-fic fr-fil fr-dib" width="801" height="1167"></span></p><p><span style="font-size: 10pt;"><strong>Fig 34. Action to execute Runbook</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Then this can be actioned from a ticket to create the customer.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img data-fr-image-pasted="true" src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImQyZGUwMmJhLTVjZTctNDQwMS1iZWY1LWUxM2JhMDkwMjZmNCJ9.l06wUtY4MENXrmtGldAHf2FVPCzlGy4tnM47wmHppmc" class="fr-fic fr-fil fr-dib" width="1007" style="width: 1007px; height: 535.906px;" height="535.906"></span></p><p><span style="font-size: 10pt;"><strong>Fig 35. Using action to execute runbook</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Checking our customer list, we can see that the new customer is there.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img data-fr-image-pasted="true" src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjJkNWY3M2U4LWJhMWYtNGY2ZC04MGJhLWY5OGZkYjg3ZTFlYyJ9._2iD-zZTKPio9gA8aIvxcSiJ1Cn2f3xYNlzrtTkECCU" class="fr-fic fr-fil fr-dib" width="1004" style="width: 1004px; height: 431.942px;" height="431.942"></span></p><p><span style="font-size: 10pt;"><strong>Fig 36. New customer made</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Another type of action that can be achieved could be the one explained in the rising tide video on this guide, it covers &quot;Marking a ticket as spam via a runbook&quot;. This is achieved using the &quot;Update Ticket&quot; action shown in the Halo API actions list above.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">All of the keys that can be added to the &quot;Actions&quot; JSON Body can be found in the dev tools using &quot;Fn + F12&quot;.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY2Zjg0MWQxLTZmMjQtNDI0NS04ZDE0LTYxY2NhYWFhYjMyMSJ9.qg93xgvMhLsguUiYLb1JRd5twm8V5Xq9TWOdo16hu3g" class="fr-fic fr-fil fr-dib" width="932" style="width: 932px; height: 364.696px;" height="364.696"></span></p><p><span style="font-size: 10pt;"><strong>Fig 37. Keys visible in dev tools</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">An example JSON Body for creating an action via a runbook, as you can see the &quot;note_html&quot; on the dev tools is shown on the JSON Body as well, this is where the note would go for the action being created.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjFlNGEyZTgyLTk3ODEtNDQ2OS1iZDIwLWVkYWNlODc4ZmE2ZiJ9.cap20NCPUrbaoWhRzsvRg5OzC020WelNZ9PfapdBwOc" class="fr-fic fr-fil fr-dib" width="947" style="width: 947px; height: 270.279px;" height="270.279"></span></p><p><span style="font-size: 10pt;"><strong>Fig 38. Example JSON body for creating action via runbook</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 12pt;"><strong>Encryption</strong></span></p><p><span style="font-size: 11pt;">New features have been introduced to Custom integrations and Runbooks to handle sensitive data like passwords and secrets more securely. These are used when building a custom authentication method for an integration as it allows authentication tokens/keys to be stored more securely.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><strong><em>Disclaimer: We always recommend configuring a custom integration to authenticate requests where possible as this is more secure than implementing your own authorisation flow.</em>&nbsp;</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><strong>1. Encrypt Custom Integration method Query Params, Headers, and Body Mappings</strong></span></p><p><span style="font-size: 11pt;">Custom integration methods will now have an &quot;Encrypt?&quot; checkbox in the tables for Query Params, Headers, and Body Mappings (for x-www-form-urlencoded). Checking this will encrypt the value in the database and not reveal it in the client. It&#39;s value will also be obfuscated in the request logs and runbook logs.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjNmMjg3MTI4LTg4NWItNDA0MC1hNjNjLTNkNTVmYzgwODIxMSJ9.L53gXXzJeVVZjmWelkxkC08KFuVkGfyM0esfg-rS7iA" class="fr-fic fr-fil fr-dib" width="1216" style="width: 1218px; height: 255.706px;" height="256"></span></p><p><span style="font-size: 10pt;"><strong>Fig 39. Encrypt Query Parameter</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">The method&#39;s base Resource URL is a factor in the encryption, meaning that changing the URL will invalidate all encrypted values for optimal security.&nbsp;</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><strong>2. Encrypt the Response body on Custom Integration Methods, Halo API Actions, and Execute SQL Actions</strong></span></p><p><span style="font-size: 11pt;">The &quot;Encrypt response body&quot; option will show on the Advanced tab of a Custom integration method.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijk0NDQwOGMwLTkxZWQtNGM0Mi1iNTI2LTY5ZGVkNDM0ZWE0NSJ9.JL4b3DnTtuzZctmmrG-J5SA_sumqknUgv-Ucc-BHglA" class="fr-fic fr-fil fr-dib" width="779" style="width: 781px; height: 283.34px;" height="283"></span></p><p><span style="font-size: 10pt;"><strong>Fig 40. Encrypt response body</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">The same option also shows when configuring Halo API Actions or Execute SQL options.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImRjYTcyYzIyLThiNmItNDhlYS05YmZkLThhMTUyZWMyNDc5OSJ9.xm716TdNN10MFZGZCsmwM5Sj3MjIrl_iTKRBeOUB4es" class="fr-fic fr-fil fr-dib" style="width: 1233px; height: 663.368px;" width="1537" height="828"></span></p><p><span style="font-size: 10pt;"><strong>Fig 41. Encrypt response body</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">When this is active the Response body of the request will be encrypted in the database and no longer show in the Request logs or Runbook logs. Additionally, any Runbook-level variables that use encrypted responses will also be encrypted in the database and no longer show in the Request logs or Runbook logs. Any subsequent requests that use an encrypted response variable will have their Request Headers and Request Body removed from the logs.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><strong>3. Encrypt the Request body of the Request that triggers the Runbook</strong></span></p><p><span style="font-size: 11pt;">The &quot;Encrypt the Request Body and Headers&quot; checkbox now shows on the Runbook configuration screen when the Runbook can be started from a public endpoint.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImI3NzA4OTQ4LWZkZjUtNDgyNy05MGM3LTM0ZTI0ZmI3MDBmNyJ9.JmnKEn9Euec9oeCbC_yy4TM1MaV6jWPlqoM23FlzhJk" class="fr-fic fr-fil fr-dib" width="940" style="width: 942px; height: 291.213px;" height="291"></span></p><p><span style="font-size: 10pt;"><strong>Fig 42. Encrypt the request body and headers</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">When enabled this will remove the Request headers from the log, and encrypt the Request body in the database. Additionally, any Runbook variables that are calculated from the initial request body will also be encrypted in the database and no longer show in the Request logs or Runbook logs. Any subsequent requests that use the &lt;&lt;request&gt;&gt; variable will have their Request Headers and Request Body removed from the logs.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><strong>4. Encrypt a Runbook-level Variable</strong></span></p><p><span style="font-size: 11pt;">Individual Runbook-level variables now have an &quot;Encrypt?&quot; option.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjNiMzgxZTNmLTNjYTQtNGZhZC1iNGQzLWQwMzBiOTE1Yzg4YiJ9.TqTCEy4Mkrap3XptIMbB9ltRnUwu-rXc9AhOWkT5aQQ" class="fr-fic fr-fil fr-dib" width="596" style="width: 598px; height: 749.064px;" height="749"></span></p><p><span style="font-size: 10pt;"><strong>Fig 43. Encrypt runbook level variable&nbsp;</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">This can be used when a Runbook-level variable holds information that is constant. There is no need to set this unless the variable itself holds a password/secret by default - if the variable gets set based on the request/response from a method that has it&#39;s body encrypted then it follows that the runbook-level variable will be encrypted automatically without this option enabled (from features 2 and 3).</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">It encrypts the value in the database and prevents it from being shown in config, and any requests that use an encrypted variable will have their Request Headers and Request Body removed from the logs.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQyMzMzNTMzLTg3MzQtNGQ2MS05NTVlLWUxNmMwNWVlMjY2NyJ9.nwHr_ceJfHeufSSuFZxNADPyCjmUGDCJKP3WbdyACLY" class="fr-fic fr-fil fr-dib" width="453" style="width: 455px; height: 237.233px;" height="237"></span></p><p><span style="font-size: 10pt;"><strong>Fig 44. Encrypted request</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImM5NjU4M2IxLTQxOWYtNDM4ZS04NzQzLTNlOGU5MTcyNmVjOSJ9.jX5qhLYmD9Y_Nt5PgEQ_7FWOHCFGzRGOWFrDqowIc1o" class="fr-fic fr-fil fr-dib" width="440" style="width: 442px; height: 293.877px;" height="294"></span></p><p id="isPasted"><span style="font-size: 10pt;"><strong>Fig 45. Encrypted response&nbsp;</strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><br></p>
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.