Author: Bryce Mecum
Date: 2021-05-14

# Workflows with RT

#### Bryce Mecum

#### 2021-05-14

The `rt` package was built to make it easier for our own team to work with RT in an automated fashion. As a result, most functions in the package have return values suitable for passing into other functions in the `rt` package or functions from other packages. Notably, functions are pipeable when possible.

Below are some example workflows you might use this package for.

## Creating tickets

You can always email your RT installations associated email address to create a ticket but you can also create one programmatically:

    rt_ticket_create("General", "me@example.com", "Hey, a quick question...")

You could also create a set of tickets from a database dump of some kind, such as an old ticket tracking system.

First, let’s create some example data to work with:

    old_tickets <- data.frame(
      queue = "General",
      subject = c("I need some help", "about those TPS reports...", "hello!"),
      requestor = c("someone@example.com", "boss@initech.com", "user@example.com"),
      stringsAsFactors = FALSE
    )

With some example data, creating tickets for each of those in on go is only a few lines of code:

    lapply(seq_len(nrow(old_tickets)), function (row) {
      do.call(rt_ticket_create, as.list(old_tickets[row,]))
    })

We can then check our work:

    library(dplyr)

    rt_ticket_search('Queue="General"') %>%
      select(id, Subject)

    # A tibble: 3 x 2
      id    Subject
      <chr> <chr>
    1 1     I need some help
    2 2     about those TPS reports...
    3 3     hello!

## Editing tickets

Each ticket has a set of properties associated with it and `rt` makes it quick to update those programmatically.

For example, we write R code to resolve a ticket. For example, say we’re ready to resolve ticket number 6:

    rt_ticket_edit(6, status = "resolved")

What if we wanted to re-assign a set of tickets? We could go about this the slow way: By looking up ticket IDs in our web browser and resolving them one by one. Instead, we can make `rt` do the work for us:

    result <- rt_ticket_search("Owner = 'manager'", format = "i")
    sapply(result, function (id) {
      rt_ticket_edit(id, owner = "intern")
    })

## Comment and Replying

If you’re already using RT, you’re probably already familiar with commenting and replying to tickets. You’ve also possibly pasted text into your web browser from another source. `rt` can help automate some of this.

For example, what if we were calculating some statistics for a ticket and wanted to put that information in the ticket as a comment?

    rt_ticket_history_comment(6, paste(capture.output({summary(iris)}), collapse = "\n"))

Above, we used the handy `capture.output` function along with `paste` but there are many other ways to get information from R into RT.

We can look at the comment we just made like so:

    cat(rt_ticket_history(3)$body)

    ...
    # 3/3 (id/47/total)

    id: 47
    Ticket: 3
    TimeTaken: 0
    Type: Comment
    Field:
    OldValue:
    NewValue:
    Data: No Subject
    Description: Comments added by root

    Content: Sepal.Length    Sepal.Width     Petal.Length    Petal.Width          Species
             Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100   setosa    :50
             1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300   versicolor:50
             Median :5.800   Median :3.000   Median :4.350   Median :1.300   virginica :50
             Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199
             3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800
             Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500

    Creator: root
    Created: 2020-03-03 01:07:45
    ...

## Piping

Many functions in `rt` return values suitable for passing into other functions, such as with the `%>%` operator from the `magrittr` package that’s commonly used in the `tidyverse`. Here’s an example of how this can be used:

    rt_ticket_create("General") %>%
      rt_ticket_edit(owner = "some_user") %>%
      rt_ticket_history_comment("Hey, this is just a comment...")