<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><div><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><strong><span style="font-size: 11pt;">In this guide we will cover:</span></strong></p><p><span style="font-size: 11pt;"><strong>- General Runbook Configuration</strong></span></p><p><span style="font-size: 11pt;"><strong>- Iterating through the runbook</strong></span></p><p><span style="font-size: 11pt;"><strong>- Runbook Scheduling</strong></span></p><p><strong><span style="font-size: 11pt;">- Additional Information</span></strong></p><p><br></p><p style="text-align: left;"><br></p><p><span style="font-size: 11pt;">Runbooks can be used to iterate through an array of data. This can be achieved by following the guide below. The first thing to consider when configuring runbooks is the authorization of the API.<br></span></p><p><br></p><p><span style="font-size: 14pt;"><strong>General Runbook Configuration<br></strong></span></p><p><span style="font-size: 12pt;"><strong>Authentication</strong></span></p><p><span style="font-size: 11pt;">Head to Configuration > Integrations > Custom Integrations and create a new Custom Integration. When creating a new Custom integration, you will be prompted to input:</span></p><p><br></p><ul><li style="font-size: 11pt;">A name for the custom integration</li><li style="font-size: 11pt;">Base Resource URL</li><li style="font-size: 11pt;">Authorization</li></ul><p><br></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjZlODYzY2VlLWViOGYtNGZiYi1iZWIyLTk2NDBiZWJkN2Y4MyJ9.ezG5QQ3ojFiMAYlc-hbeHRDr8i3OYFXbEUbQxihZ-GY" class="fr-fic fr-fil fr-dib" width="746" style="width: 746px; height: 440.468px;" height="440.468"></span></p><p><span style="font-size: 10pt;"><strong>Fig 1. New custom integration.</strong></span><strong><span style="font-size: 10pt;"><br></span></strong></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">For the purposes of this guide, the custom integration will be integrating with Halo, to do this, first head over to Configuration > Integrations > Halo Service Desk API > Applications and click "New" on the top right.</span></p><p><br></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImE2MWY5Y2U2LWU2YTAtNDAxNC04M2E4LTc0ZjdjOWRjNTY0ZCJ9.pbSwyoyjnyrpYzWF7GG6fn5YEIoITkPboNa0kQoFo5g" class="fr-fic fr-fil fr-dib" width="756" style="width: 756px; height: 236.618px;" height="236.618"></span></p><p><span style="font-size: 10pt;"><strong>Fig 2. Halo API module.</strong></span><strong><span style="font-size: 10pt;"><br></span></strong></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.eyJpZCI6IjNkZmE2N2NlLWRlOGQtNDNiNS1iYmIzLTViNTQ0YjFhZGEyNyJ9.rcibUIKSqRFDyR9ay9fyDJmHPnJeRoWFmmlnn8YtVZk" class="fr-fic fr-fil fr-dib" width="759" style="width: 759px; height: 423.976px;" height="423.976"></span></p><p><span style="font-size: 10pt;"><strong>Fig 3. View applications.</strong></span><strong><span style="font-size: 10pt;"><br></span></strong></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Read the below instructions before configuring your API Application.</span></p><p><br></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImMzZjlhMjNkLWQwMDEtNGIwZi04Y2JhLWVmMDJiMDRjYjlhYyJ9.7ULwYYu2b0RuuZaL0VdhjoeLQw339G4qX71n-yycZtY" class="fr-fic fr-fil fr-dib" width="976" style="width: 976px; height: 577.292px;" height="577.292"></span></p><p><span style="font-size: 10pt;"><strong>Fig 4. New application.</strong></span><strong><span style="font-size: 10pt;"><br></span></strong></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 12pt;"><strong>Creating an API Only Agent</strong></span></p><p><span style="font-size: 11pt;">In Halo, navigate to Configuration > Teams & Agents > Agents and create an Agent that you will use for the integration.</span></p><p><br></p><p><span style="font-size: 11pt;"><a href="https://downloads.intercomcdn.com/i/o/1009600102/6b9d2578fdc37908719de83c/image.png?expires=1721639700&signature=6fd3be992b9a4fa16f0d4ea3beb971216433dfec5a031c4c6be3d5f6f879431e" rel="noreferrer nofollow noopener" target="_blank" style="box-sizing: inherit; color: var(--primary-color); background-color: rgb(255, 255, 255); touch-action: manipulation; text-decoration: underline; cursor: pointer; user-select: auto; font-family: Arial, Helvetica, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: break-spaces; border: 0px solid rgb(229, 231, 235); --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; --tw-contain-size: ; --tw-contain-layout: ; --tw-contain-paint: ; --tw-contain-style: ;" id="isPasted"><img data-fr-image-pasted="true" src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjdkYzJmODYzLTFkM2UtNDM1Yy1hYzc5LTA5MDA1YjAzY2I4NyJ9.XF03iFA26qCjU0bpovHaDaejo6rB4eP7imr4-MO9RrE" width="587" style="box-sizing: inherit; border: 0px solid rgb(229, 231, 235); cursor: pointer; padding: 0px 1px; user-select: none; max-width: none; min-width: 10px; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; --tw-contain-size: ; --tw-contain-layout: ; --tw-contain-paint: ; --tw-contain-style: ; height: 778.968px; width: 573px;" class="fr-fic fr-fil fr-dib"></a></span><span style="font-size: 10pt;"><strong>Fig 5. New agent.</strong></span></p><p><br></p><p id="isPasted"><span style="font-size: 11pt;">Make sure the Agent has the Administrator Role, as displayed above.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">It is also important to turn on API-only Halo Agent (This is found just below the roles input on the details tab of an agent (Beware that API-only Agents may not log into the Web or Mobile Applications nor can they be assigned tickets. However, they do not take up a licence).</span></p><p><span style="font-size: 11pt;"> <a href="https://downloads.intercomcdn.com/i/o/1084855071/e11c432a4e173126bce813e2/image.png?expires=1721639700&signature=274e5ea70e23f824b82ef2b71315412fb9708546d3161336e33ff7043833bf2f" rel="noreferrer nofollow noopener" target="_blank" style="box-sizing: inherit; color: var(--primary-color); background-color: rgb(255, 255, 255); touch-action: manipulation; text-decoration: underline; cursor: pointer; user-select: auto; font-family: Arial, Helvetica, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: break-spaces; border: 0px solid rgb(229, 231, 235); --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; --tw-contain-size: ; --tw-contain-layout: ; --tw-contain-paint: ; --tw-contain-style: ;" id="isPasted"><br><img data-fr-image-pasted="true" src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImE1OGFiNzc4LTIwMTMtNGQ5ZC1iMTRjLWU5YjM1YWQ0MmQxOSJ9.ygNStlP_Xiye_oAkuhw-QlrAfT0YXklkYxq6Mxs300g" width="167" height="auto" style="box-sizing: inherit; border: 0px solid rgb(229, 231, 235); cursor: pointer; padding: 0px 1px; user-select: none; max-width: none; min-width: 10px; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; --tw-rotate: 0; --tw-skew-x: 0; --tw-skew-y: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-pan-x: ; --tw-pan-y: ; --tw-pinch-zoom: ; --tw-scroll-snap-strictness: proximity; --tw-gradient-from-position: ; --tw-gradient-via-position: ; --tw-gradient-to-position: ; --tw-ordinal: ; --tw-slashed-zero: ; --tw-numeric-figure: ; --tw-numeric-spacing: ; --tw-numeric-fraction: ; --tw-ring-inset: ; --tw-ring-offset-width: 0px; --tw-ring-offset-color: #fff; --tw-ring-color: rgba(59,130,246,.5); --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; --tw-blur: ; --tw-brightness: ; --tw-contrast: ; --tw-grayscale: ; --tw-hue-rotate: ; --tw-invert: ; --tw-saturate: ; --tw-sepia: ; --tw-drop-shadow: ; --tw-backdrop-blur: ; --tw-backdrop-brightness: ; --tw-backdrop-contrast: ; --tw-backdrop-grayscale: ; --tw-backdrop-hue-rotate: ; --tw-backdrop-invert: ; --tw-backdrop-opacity: ; --tw-backdrop-saturate: ; --tw-backdrop-sepia: ; --tw-contain-size: ; --tw-contain-layout: ; --tw-contain-paint: ; --tw-contain-style: ; height: auto;" class="fr-fic fr-fil fr-dib"></a></span></p><p><span style="font-size: 10pt;"><strong>Fig 6. API agent only setting.</strong></span></p><p><br></p><p><span style="font-size: 11pt;"><strong>Now Input the following into your API Application</strong></span></p><ul><li style="font-size: 11pt;">Name (arbitrary)</li><li style="font-size: 11pt;">Client ID and Secret (Services)</li><li style="font-size: 11pt;">Generate (Generates a new client secret, must be done when creating a new custom integration)</li><li style="font-size: 11pt;">Copy (Copies the client secret to clipboard)</li><li style="font-size: 11pt;">Login Type: Agent</li><li style="font-size: 11pt;">Agent to log in as (Pick an agent)</li><li style="font-size: 11pt;">Permissions:<br><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImM2ZjhhMzk1LTE3YTUtNDNhYi1iZTM4LTgyNDAyYjY1MWE2NCJ9.Or4_sR8cP_0qwhs-uE_JTMB5utiOYZHX2KG43_hCv5U" class="fr-fic fr-dii"></li></ul><p id="isPasted"><strong>Fig 7. Permissions for API application.</strong></p><p><br></p><p><span style="font-size: 12pt;"><strong>Creating a Custom Integration</strong></span></p><p><span style="font-size: 11pt;">The next step is to create a new custom integration in Configuration>Integrations>Custom Integrations, this is how the Halo instance is connected to the runbook and how the API can be used to GET or POST things in Halo.</span></p><p><br></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjM5ZWI3NWJmLWJmZTUtNDEwNi04MDY4LWE4ZGI4NTMyYTFkYyJ9.T0cHuCZ7QAt0i8NLWMc4ym90Zxc5bNVPy34ASsjmjnc" class="fr-fic fr-fil fr-dib" width="652" style="width: 652px; height: 397.78px;" height="397.78"></span></p><p id="isPasted"><strong>Fig 8. Custom Integrations button.</strong></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">The following credentials should be set.</span></p><p><br></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNiYzM5MzdiLTBlNjUtNGU5NC1iMjAwLTU4YjhhOTk0YjVmOCJ9._EoVKqbrJYstZdw_GfPQ8Ld-CZIaWxwduvaHthXMFk4" class="fr-fic fr-fil fr-dib" width="913" style="width: 913px; height: 573.829px;" height="573.829"></span></p><p id="isPasted"><strong>Fig 9a. Example Credentials.</strong></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.eyJpZCI6ImFhZTRkZDZhLWRiZTUtNGVjMi05MWI0LTNjZmQwZTJmYjZhZiJ9.zlZRsPjLUBuuCVi0x6KTxaE8tvmJdXeEiZEHVE-09ek" class="fr-fic fr-fil fr-dib" width="897" style="width: 897px; height: 415.752px;" height="415.752"></span></p><p id="isPasted"><strong>Fig 9b. Example Credentials </strong></p><p><br></p><span style="font-size: 11pt;">Input the following:</span><p><br></p><ul><li style="font-size: 11pt;">Base Resource URL: Your Halo instance URL i.e. https://[Your Halo Domain].com</li><li style="font-size: 11pt;">Authorization: OAuth 2.0</li><li style="font-size: 11pt;">Authorization header name *LEAVE BLANK*</li><li style="font-size: 11pt;">Header Prefix: Bearer (Should already appear as "Bearer")</li><li style="font-size: 11pt;">Grant Type: Client Credentials</li><li style="font-size: 11pt;">Access Token URL: https://[Your Halo Domain].com/auth/token?tenant=[Your Tenant Name], The tenant_id can be found by going to: <ul style="font-size: initial;"><li style="font-size: 11pt;">https://[Your Halo Domain].com/api/instanceinfo (look for the key value pair "tenant_id" : "[Your tenant_id]" )</li></ul></li></ul><p><span style="font-size: 11pt;">Found here.</span></p><p><br></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImJkNWMzYjk0LTMyMjQtNDQxMi1hOTg1LTc0NzZlZjc1NmZmOCJ9.SWvZIC9pM8TYtFfbjAHiE9eYjw393R3iXM_hcfp_du0" class="fr-fic fr-fil fr-dib" width="796" height="137"></span></p><p id="isPasted"><strong>Fig 10. Tenant info example.</strong></p><p><br></p><p><span style="font-size: 11pt;"><br></span></p><ul><li style="font-size: 11pt;">Client ID (Found in the Halo API Application created)</li><li style="font-size: 11pt;">Client Secret (Need to paste it from clipboard) <strong><em>NB:</em> </strong>If the custom integration doesn't work when saving, you may need to input a new client secret by generating a new one in the Halo API Application</li><li style="font-size: 11pt;">Scope: all</li></ul><p><br></p><p><span style="font-size: 11pt;"><strong>Creating a Method</strong></span></p><p><span style="font-size: 11pt;">Switch to the "Method" Tab on the custom integration and this should be the view.</span></p><p><br></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjNiYmYzMzM2LWEyODAtNDljZC1hNzJlLThmMjNhN2E5M2FkMSJ9.HNrKP6JOdTL6dGsgP3QqrBFcZQoF6A8alQhmzrWD7uo" class="fr-fic fr-fil fr-dib" width="971" style="width: 971px; height: 389.329px;" height="389.329"></span></p><p id="isPasted"><strong>Fig 11. Method.</strong></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">This worked example is for creating a runbook that returns a list of clients on a Halo instance. In the text box beside the Halo domain, input /api/client.</span></p><p><br></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjMxZWI2Yzc2LWZjNjYtNDAzYS1iOWNjLTIyN2NiMDYyYzg5YSJ9.61IlSWNLJFVwMxQ6Z7k1V4rBRpv4fMAJgUs4bJxF4-U" class="fr-fic fr-fil fr-dib" width="969" style="width: 969px; height: 94.7888px;" height="94.7888"></span></p><p id="isPasted"><strong>Fig 12. GET method.</strong></p><p><br></p><p><span style="font-size: 11pt;">In the above photo the name of the method is "Get Clients" and the API method has been set to "GET"</span></p><p><span style="font-size: 11pt;">The next thig to do is set the output variables, again solely for this example the output variable is.</span></p><p><br></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImYxNzdmOWQ5LWIzMTQtNDk5YS1iNGI3LTkxYzBiMjQxOTQxYiJ9.k6ALdq4kJd7RvwYEbYO83HRdCSVB0fgoPHj9zuJO5pY" class="fr-fic fr-fil fr-dib" width="1008" style="width: 1008px; height: 155.077px;" height="155.077"></span></p><p id="isPasted"><strong>Fig 13. Output variables.</strong></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">"response" must be the prefix of all output variable values that are inputted. This "Value" shown above translates to access the response of the GET on the clients, then get all of the properties of type clients within that GET, the "^" refers to a child property of an object.</span></p><p><br></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjBjNjIwZGQyLTZlYWYtNDA3OS1iZWJmLThjZmJmZjY2ZmE3YSJ9.BWTKViaIqWy-D6HCJtok4hkj8Tp7u7pralzfYQqNkA4" class="fr-fic fr-fil fr-dib" width="533" style="width: 533px; height: 776.794px;" height="776.794"></span></p><p id="isPasted"><strong>Fig 14. Output variable example.</strong></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><strong>Integration Runbooks</strong></span></p><p><span style="font-size: 11pt;">Now that the custom integration is set up and the method has been created. The next step is to create the runbook. Click into the "Integration Runbooks" button on the main page of custom integrations.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">The first step to make in the runbook is the method step, this will pull in the arrays we have accessed from the output variable of the method.</span></p><p><br></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijk5MWRjM2QwLTRiNGEtNGQ1Yi05YjM0LTFmYjkwNWVkYzEzMCJ9.0KqO5epW3u5HgKrH1xDGJP_fO4jX7fbVwjNz2UBncOI" class="fr-fic fr-fil fr-dib" width="984" style="width: 984px; height: 448.243px;" height="448.243"></span></p><p><span style="font-size: 10pt;"><strong>Fig 15. Method step.<br></strong></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><em><strong>Note: </strong><strong>The "Move to Step" will change after the step has been created to reflect the correct flow. Make sure to mark this as the start step.</strong></em></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Next pick the step which has tailed of from the successful outcome, and configure it in the following way.</span></p><p><br></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjZmYmExMmMwLWFiOTAtNGY5ZC04MTkzLTNmZjIzYTQwMDY5YiJ9.38-QWgpXjSmiMwPQkOBORRmGW6PrR6dUXKryqeJqeRE" class="fr-fic fr-fil fr-dib" width="980" style="width: 980px; height: 435.337px;" height="435.337"></span></p><p><span style="font-size: 10pt;"><strong>Fig 16. Method step.</strong></span></p><p><br></p><p><span style="font-size: 11pt;">The array iteration start is the first step in iterating through the array we got from the method step. For context "!" denotes getting the value of the name property.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">If the array has no elements it will be sent to a different step as nothing was returned.</span></p><p><br></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImFkNmQ1YTg5LTdhYjAtNGFkZC05MmJlLWY3N2FjYmM2NWJlOSJ9.D0XgmbzysCrlM5cf2XbXMfIZzwnKtgWfuKBCZFGp18Q" class="fr-fic fr-fil fr-dib" width="976" style="width: 976px; height: 125.239px;" height="125.239"></span></p><p><span style="font-size: 10pt;"><strong>Fig 16. Outcomes</strong></span><strong><span style="font-size: 10pt;"><br></span></strong></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">The next configurable step will be set up the following way.</span></p><p><br></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjQ1ODhlMjVkLTMyYmMtNDM3MC04ZDc2LWYyODY0YmUyNTE5MyJ9.bycFoVFaAU4v2OO5_HtjYyZDCxRoG6pqTg-YxXE1OsA" class="fr-fic fr-fil fr-dib" width="983" style="width: 983px; height: 482.564px;" height="482.564"></span></p><p><span style="font-size: 10pt;"><strong>Fig 17. Step action.</strong></span><strong><span style="font-size: 10pt;"><br></span></strong></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">This is making an action to GET the name element in the form of a note field in Halo. </span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;"><em><strong>Note: </strong><strong>The "note_html" section has the value "<<Name>>" this is the output variable from step 2 and it is placed in quotations ("") so that Halo can process it correctly.</strong></em></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 14pt;"><strong>Iterating through the runbook</strong></span></p><p><span style="font-size: 11pt;">In order to iterate through the runbook we add an end step and this then knows to connect back to our original start iteration step. This will then continue to run until no more elements are found in the array based off of the criteria set.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">This step should look like the following.</span></p><p><br></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjcyOTM5MWY0LTkyZGQtNGRjZi04Njk5LTRmZDA2MjdiMzFjOSJ9.YUgtdALXyRN586Nc89Wk2HQtL-mV445VFdcvHFOTBDc" class="fr-fic fr-fil fr-dib" width="1027" style="width: 1027px; height: 602.773px;" height="602.773"></span></p><p><span style="font-size: 10pt;"><strong>Fig 18. Iteration in runbook step.</strong></span><strong><span style="font-size: 10pt;"><br></span></strong></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">This step defines which array to iterate through, and because the action type is set to "Array Iteration Next/ End" it knows to iterate through.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">Here is a high level overview of the entire runbook, notice the steps that the program will be sent to if the step fails/ returns no elements.</span></p><p><br></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjhiOWFkYmZlLTFkNDItNDg5OS1iN2RmLTZmNjE2MjNkNDdmNSJ9.Ag-hr6kjjr52FPFSqEyG4G7Aegr_8ugydwqpRe2sw2U" class="fr-fic fr-fil fr-dib" width="1004" style="width: 1004px; height: 523.765px;" height="523.765"></span></p><p><span style="font-size: 10pt;"><strong>Fig 19. Runbook flow chart.</strong></span></p><p><br></p><p><span style="font-size: 11pt;">This concludes the setup of the runbook for iterating through an array.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 12pt;"><strong>Example of the Outcome</strong></span></p><p><span style="font-size: 11pt;">Click into the "Log" tab of the runbook and then click into a log, you can see the different logs that were returned.</span></p><p><br></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImE4OGU1ZmE1LWZiNmYtNDlhMS05NmQyLWZiNzNiN2JkMTRjNSJ9.8dj-qQFgL9_z_Mjvu7tEbnnQBSL3xwTp7sTcfkJnx94" class="fr-fic fr-fil fr-dib" width="999" style="width: 999px; height: 224.59px;" height="224.59"></span></p><p><span style="font-size: 10pt;"><strong>Fig 20. Runbook Log.</strong></span><strong><span style="font-size: 10pt;"><br></span></strong></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">The top 3 responses on the log represent the customers being pulled from the array and onto an action, the bottom response (which is the first one) is the GET on the clients array.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 11pt;">An array will not be visible if the method "Test" doesn't return anything.</span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 14pt;"><strong>Runbook Scheduling</strong></span></p><p><span style="font-size: 11pt;">Runbooks can now be scheduled, similar to other scheduling services in Halo, there are many ways to configure this schedule. For this service to be available, the scheduling service on Halo must be enabled, it can be configured under Configuration > Advanced Settings. </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.eyJpZCI6IjllNzJjZGM2LTgxZjgtNDRjMi1hYTcwLWM5NDIzNjQ4ZTFiNiJ9.4O_-0m4apqiuzzoZzEmjPzYwpjLq7oFG3aNISySQx1c" class="fr-fic fr-fil fr-dib" width="997" style="width: 997px; height: 75.2837px;" height="75.2837"><br></span></p><p><span style="font-size: 11pt;">In order to run the schedule daily, the schedule can be set up the following way, where the start date and time are arbitrary:</span></p><p><span style="font-size: 11pt;"><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImI4MzA3MjdiLTYzYzktNDNlMy05NTUzLWE0ZjBkYmRjYmNiYSJ9.K1MLIep6TUY_YrvNmDOSiMCebJrtuWR_nErcbjB3clU" class="fr-fic fr-fil fr-dib" width="991" style="width: 991px; height: 433.751px;" height="433.751"></span></p><p><span style="font-size: 10pt;"><strong>Fig 21. Runbook schedule.</strong></span><strong><span style="font-size: 10pt;"><br></span></strong></p><p><span style="font-size: 11pt;"><strong><em> </em></strong></span></p><p><span style="font-size: 11pt;"><em><strong>Note: Runbooks that run via a schedule cannot access Ticket variables or Input variables, so they are only suited to tasks which fetch data from an API on the first step, and then do something with that data. Runbooks that do not depend on Ticket or Input variables can now be tested from the config screen from the Schedule settings area.</strong></em></span></p><p><span style="font-size: 11pt;"><em><strong><em style="box-sizing: inherit;"><br><img data-fr-image-pasted="true" src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjE0YzNkMTgwLWExOTctNGUxMC04MmYxLTNhNDhiMDc0NGMwNyJ9.lESTJN1L6p41gFt_cfLfv_UiW_oS1QzXCvC1qs_PJrI" width="853" height="129" style="box-sizing: inherit; border-style: none; cursor: pointer; padding: 0px 1px; user-select: none; text-align: left; max-width: none !important;" class="fr-fil fr-dib"></em></strong></em></span></p><p><strong><span style="font-size: 10pt;">Fig 22. Runbooks that run via a schedule cannot access ticket variables or input variables.</span></strong><span style="font-size: 10pt;"><br></span></p><p><span style="font-size: 11pt;"><br></span></p><p><span style="font-size: 14pt;"><strong>Additional Information</strong></span></p><ul><li style="font-size: 11pt;">Each path of the runbook flow after an Array Iteration Start step must finish up at either an Array Iteration Next/End step or an Array Iteration Break step for the same runbook variable that the iteration was started for.</li><li style="font-size: 11pt;">Array Iteration Next/End allows you to continue on to the next element in the array. This step will go back to the Array Iteration Start step but move on to the next element in the array. Once all elements have been iterated the runbook flow will proceed to the next step after the Array Iteration Next/End step.</li><li style="font-size: 11pt;">Array Iteration Break allows you to escape the array iteration without reaching the end of the array. Use this if you're looking for a particular value in an array, rather than operating on the entire array.</li><li style="font-size: 11pt;">Array iterations can be nested inside other array iterations.</li><li style="font-size: 11pt;">Array iteration steps are shown in Orange on the diagram.</li></ul><p><span style="font-size: 11pt;"><img data-fr-image-pasted="true" src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjIwZjdlMWUxLTczOWEtNDRkNy04MGQxLTNlNzE1NDdkYjA5OCJ9.ZwsBfcdgK3IDwxiOPsueSIGJg2U4rFK1WJTeCgXfWAg" class="fr-fic fr-fil fr-dib" width="1013" style="width: 1013px; height: 587.274px;" height="587.274"></span></p><p><span style="font-size: 10pt;"><strong>Fig 23. Runbook iteration flow chart example.</strong></span><strong><span style="font-size: 10pt;"><br></span></strong></p><p><br></p></div>