What exactly can CraftyBot do?

 

Below we have compiled a list of the current features from the CraftyBot, extracted from the built in help text. We’re adding and enhancing features constantly, faster than we’re updating this page!!

 

How are the commands designed ?

 

The goal for the design for the commands is to handle 80% of the use cases.  

Trying to make the commands able to handle all the possible needs makes them too complex to remember and use.

 

Where the ConnectWise API makes it possible, the results of the commands will provide quick links to the items created/changed/etc. so you can go direct to them in ConnectWise should a particular ticket/activity need unique changes.

 

I don’t see what I need on the list below?

 

Let us know! As mentioned, we’re constantly adding features that work great for everyone. Need something really CRAZY? We can work with you to create custom actions just for your team.

 

(The formatting below is for a full workstation display, it might not show up well on a mobile device)

 

The Complete Command List

 

Ticket Actions

  • Inline Ticket Lookup and detail
    Any time the bot sees the pattern T#XXXXXX where XXXXXX is a valid ticket
    number on your system, it will place a clickable link with the ticket details into the
    Slack channel.
  • Create Tickets
    This is the primary feature of the bot.  Create tickets quickly from the bot.

!ticket <company_id> <"Ticket Subject"> [Initial notes to add to the ticket]
• The Slack user will be assigned to the ticket
• The ticket will be on the issuers USERS pre-selected default board and default status
• The bot will respond with a clickable link for the new created ticket if custom changes are needed
Example Usage:
!ticket angryfoxco "Reboot Router #12321" New firmware ready, device needs reboot
!ticket angryfoxco "Website down"

  • Change Ticket Status
    !ticket status <ticket_number> [status_name]
    • If no [status name] is provided, it will return the current board and status
    • If the [status name] does not exist on the current board, it will return a list
    of available status types
    • The bot will respond with a clickable link for the altered ticket if further custom changes
    and to confirm the correct ticket was typed in
    Example Usage:
    !ticket status 123412
    !ticket status 123412 In Progress
  • Search Tickets
    Search ConnectWise (open) Tickets with a string in their summary, ordered by ticket number descending
    !search ticket[_closed | _all] <search string>
    • Maximum of 25 shown.
    • Long lists will be sent by direct message
    Example Usage:
    !search ticket reboot server
    !search ticket_closed windows 98
    !search ticket_all armegedon

Time Actions

  • Create Time
    Create a time entry against a ticket or a charge code.  (to be expanded to add time to anything as we find use cases)
    This is probably our most complex command because we had quite a large 80% use case for time entries.
    !time <ticket_number | charge_code> [@<start_date_string>] [for <duration> | until <end_date_string>] <"<notes>">
    • Duration will default to 0.5 minutes
    • You can have FOR duration or UNTIL end data, not both
    • Start will default to Now minus Duration
    • If you have UNTIL you need Start
    Example Usage:
    !time 12345 @Today at 10am for 0.5 "This is a time entry note"
    !time 12345 for 1.23 "This is a time entry that will start 1.23 hours ago"
    !time 12345 @Tuesday 13:20 for 0.73 "Time entry for 0.73 hours starting last Tuesday at 1:20 PM"
    !time personal @13:20 until 13:45 "Personal charge code time entry 1:20PM to 1:45PM"
    !time service management @April 1st 2pm until 3pm "Service Management charge code time entry April 1st from 2pm to 3pm"
    !time vacation @April 20th 4:20pm until April 21st 9am "Vacation – time entry over night"

 

Note Actions

  • Create a new note (for a ticket)
    This is in a separate section as it will be used shortly for not just tickets, but for other items (Activities, etc.)
    !note [u][i|r] <ticket_number> <The note details follow after the ticket number>
    • u = Also mark ticket as "Client Updated"
    • i = Mark for Internal Note
    • r = Mark for Resolution Note
    Example Usage:
    !note i 12345 This is an internal note
    !note 12345 This is a normal discussion ticket note, no update flagged
    !note u 12345 Message from client on Slack, they are ready for the reboot

 

Schedule Actions

  • Create new schedule entry for a ticket or activity
    Use this to assign members to a ticket
    !schedule <[ticket_id] | [activity_id]> [cw_user_id] [[@Start Datetime String] [for <duration>]] ["Notes if suppored by schedule type"]
    • User will default to issuer if user not supplied
    • If @ is missing, no calendar dates will be set
    • If ‘for <duration>’ is missing it will default to 0.5 @ Start Time
    Example Usage:
    !schedule 12345 jsmith @Tomorrow 10am for 0.5
    !schedule 12345 @Today 1pm for 0.5

 

Schedule Actions

  • Create new schedule entry for a ticket or activity
    Use this to assign members to a ticket
    !schedule <[ticket_id] | [activity_id]> [cw_user_id] [[@Start Datetime String] [for <duration>]] ["Notes if suppored by schedule type"]
    • User will default to issuer if user not supplied
    • If @ is missing, no calendar dates will be set
    • If ‘for <duration>’ is missing it will default to 0.5 @ Start Time
    Example Usage:
    !schedule 12345 jsmith @Tomorrow 10am for 0.5
    !schedule 12345 @Today 1pm for 0.5


Activity Actions

  • Create new activity entry
    !activity <company_id> <activity type> [@Due DateTime [for <duration> ] [assign to <cwuserid> ] <"Activity Title"> [Initial notes to add to the activity]
    • If @ is missing, no due dates will be set
    • <duration> will be 0.5h if not otherwise specified.
    • If not assigned to a specific CW User ID, slack user will used
    • An @ symbol can’t be in the company, or activity type
    Example Usage:
    !activity angryfoxco phone call @October 12th 10:15pm assign to jsmith "Call Crazy Frank" Calm Frank down about the job
    !activity angryfoxco new lead "Create Galadium opportunity

 

Batch Actions

  • Bulk Ticket Creation from Template (or no template)

This is recent and advanced feature, reach out to us for training on how to create and use templates.
The executive summary is that you will supply CBot with a ‘template’ using the template commands (see !template help)
The template is just a ‘json’ representation of the ticket object with certain values you want set.

!batch ticket [ template ] for <company, company, …> [assign to <cwuserid> ] <"Batch Tickets Subject"> [Initial notes to add to the tickets]

• If not assigned to a specific CW User ID, slack user will used

• If template is omitted just normal tickets will be created with the Subject and Notes

Example Usage:

!batch ticket gitlabupdate for acmeco,grommitinc assign to jsmith "Gitlab security updates" CSV1233 – Urgent – Patch asap

!batch ticket for acmeco,grommitinc "Review impact of CSV-193421" Review CSV with client and get approval for audit of VPN

 

Template Actions
Templates are used to upload data to the slack bot to be used for various other functions

Currently, this is used by the Batch Actions handling, but future uses are being considered.

  • List template files

!template list

Example Usage:

!template list

  • Upload template files (json) to be used for batch operations
    !template upload <ticket> <template_name>
    Instructions:
    To use this command, you will need to do a Slack "Add File from your computer" command
    (hit the + icon in the left of the slack text entry area.
    • Find the file to upload
    • In the "Add a message about this file" add the command above
    • Template name must be a single unbroken string – NO SPACES.  _ and – OK
    Example Usage:
    !template upload ticket gitlab_patch
  • Remove a template by ID
    !template delete <template_id>
    Example Usage:
    !template delete 12

 

Campaign Actions
CraftyBot can also act as a tracking endpoint for "Email Opened" tracking for emails sent from

the CW Communication Manager.  Reach out to us for details on how to configure and use this.

In addition we are adding commands to the Bot to help support campaign activities.
This is a recent addition, so reach out to us with features you would like to use with Campaigns.

 

  • List active campaigns with opened, and clicked stats

!campaign list [ closed | all ]

Example Usage:

!campaign list

!campaign list all

!campaign list closed

 

 

Search Actions

  • Search ConnectWise Companies with a string in their description

*!search company <search string>*

• Maximum of 25 shown.

• Long lists will be sent by direct message

Example Usage:

!search company bearing

  • Search ConnectWise Member with a string in their first or last name

!search member <search string>

• Maximum of 25 shown.

• Long lists will be sent by direct message

Example Usage:

!search member joshua

 

  • Search ConnectWise (open) Tickets with a string in their summary line

ordered by ticket number descending

!search ticket[_closed | _all] <search string>

• Maximum of 25 shown.

• Long lists will be sent by direct message

Example Usage:

!search ticket reboot server

!search ticket_closed windows 98

!search ticket_all armegedon

  • Search ConnectWise Activity Types against their name

!search activity_type <search string | `*` >

• Use `*` to show all

• Maximum of 40 shown.

• Long lists will be sent by direct message

Example Usage:

!search activity_type phone

!search activity *

  • Search ConnectWise Boards against their name

!search  board <search string | `*` >

• Use `*` to show all

• Maximum of 40 shown.

• Long lists will be sent by direct message

Example Usage:

!search board Helpdesk

!search board *

  • Search ConnectWise Boards and Statuses

!search  board_status <partial board string | `*` > <partial status string | `*`>

This search is a bit unique as it will return a matrix of matching boards and status

the separator between board and status criteria is a space.  *This means you can’t

have a board name with spaces in the search, just use a portion*

eg.. Board name "CP Helpdesk", just use ‘helpdesk’ in for board name in search

• Use `*` for all boards and/or all statuses

• Maximum of 80 shown.

• Long lists will be sent by direct message

Example Usage:

!search board_status help complete

!search board_status Helpdesk *

!search board_status * complete

— This will not work : !search board_status help desk complete


Tenant System (BounceBot)

The bot can also act as a message passing system between your Slack workspace

and a client Slack workspace.   This allows you to ‘Whitelable’ the bot as something

a client can deploy into a Slack channel on their Slack, and when they @yourbotname

with a message, that message will be relayed into a room in your companies Slack

space.  This is currently one direction, as in our use case we also have accounts inside

the clients Slack, so it’s more of an alert/watch system so that our team has visibility

even if not every team member has an account at the clients Slack.
Work to add Bi-Directional and ‘Automated Responses’ is already in progress

 

Fun Actions

These are just some various extras that we have internally and some clients have asked

to keep enabled in their instances.

  • Roll Dice
    This command will make a virtual dice roll in RPG notation.
    !<quanity>d<faces>
    Example Usage:
    !1d6  (will respond with a single random 6 sided dice roll
    !2d10 (will respond with two 10 sided dice roll
  • Magic 8 Ball
    Will shake the virtual Magic 8 Ball and give you the response.
    !m8b
    Example Usage:
    !m8b

>>>:8ball: Outlook not so good.

  • Pyjokes
    Will display a random programmer/it related joke from the Python PyJokes package
    !pyjoke
    Example Usage:
    !pyjoke
    >>>My friend’s in a band called ‘1023 Megabytes’… They haven’t got a gig yet!