Skip to navigation

Lab #8: Ticketing (Core)

View as Markdown

Overview

  • Learning Objectives: Configure, modify, validate, and test ServiceNow IT ticketing in Moveworks
  • Estimated Time: 45 minutes
  • Prerequisites:
    • Lab #7 complete (forms ingested; Section 2 revisits it)
    • Admin access to your ServiceNow instance

Key Concepts

Moveworks manages the full lifecycle of a ticket, from creation to resolution. The core ticketing configuration involves:

  • Table Mappings: The configuration that tells Moveworks which tables to interact with (e.g., incident for breaks/fixes or sc_req_item for requests).
  • Routing Conditions: Logic that directs a user’s request to a specific workflow (e.g., routing a β€œConcierge” intent to a standard ticket generation flow).
  • Table Actions: The specific capabilities enabled for the Moveworks AI Assistant, such as the ability to β€œQuery” (look up), β€œUpdate” (add comments), or β€œResolve” a ticket.
  • Service Portal URL: The base web address of your ITSM portal. Moveworks appends ticket IDs to this URL to provide users with direct β€œView in Portal” links.

Relevant Documentation:


πŸ› οΈ 1: Walkthrough

Save after every change. Moveworks Setup does not auto-save. Click Save before you leave any page, or you lose your changes. This is the most common mistake in this lab, so the steps below include save reminders.

1.1: Add Two Custom Fields to the Incident Table

Later steps map two custom incident fields into Moveworks. A stock ServiceNow instance doesn’t have them, so create them first.

  1. In ServiceNow, navigate to System Definition > Tables and open the Incident table (incident).
  2. In the Columns related list, click New and create a column with Type String and Column label Environment. Confirm Column name reads u_environment, then click Submit.
  3. Click New again and create a column with Type True/False and Column label Is VIP. Confirm Column name reads u_is_vip, then click Submit.

1.2: Configure Ticketing

  1. Navigate to Ticketing > Ticketing Configuration > New ticketing configuration

  2. Click Get Started

  3. Select ServiceNow as the source system

  4. Start by selecting the Connector Selection

  5. Select snow as the connector & primary system

  6. Give your configuration a name

    Save your configuration name before continuing.
  7. Click Back in the bottom left, then click Setup Defaults at the top of the page to create the preconfigured ticket types.

  8. Navigate to the newly generated Table mappings page

  9. By default, Moveworks integrates with the tables shown. Click the Incident table:

    Each ticket destination (table) lists the actions configured for it at the bottom. For Incident, these come preconfigured:

    • Query: Allows requestors to search for their existing tickets
    • Create: Enables requestors to initiate new tickets
    • Update: Permits requestors to add comments to active tickets
    • Resolve: Grants requestors the ability to close their own tickets

  10. The Incident table definition opens.

    Field NameUse
    Table NameTable name within the Moveworks UI
    Table LabelName of the table in the integrated ITSM
    DomainThe associated enterprise domain that the ticket falls under (IT, HR, Finance, etc)
    Ticket TypeThe ticket type within Moveworks (Mirrors ServiceNow: Incident, Request, Request Item, Task, etc)
    Prefix IDMatches to the prefix within the target system (INC, REQ, RITM, etc)
    Requestor Column NameThe ticket field that represents the user who opened the ticket, often caller_id, requested_for, or opened_by

  11. Navigate to the Query page and review the States Configuration

    The default state mappings match a stock ServiceNow instance. In a live implementation, check the source ITSM for additional states and map any that are missing.

  12. Next, add custom_data fields to the Query mapping.

    Ticketing starts with a list of default fields. When an implementation needs fields that don’t exist out of the box, add them as custom_data. Downstream ticketing workflows can then reference them.

  13. Add these custom_data fields (the two fields you created in Section 1.1) to the Query ticket mapping:

    "custom_data.u_environment": "$TRIM($TEXT((u_environment).value OR ''))",
    "custom_data.u_vip_support": "$TRIM($TEXT((u_is_vip).value OR ''))",

    In the Query configuration, fields on the left are Moveworks fields, and fields on the right are source system fields. Reference the Ticket Data Object page on the Moveworks Help Site to understand all of the fields available on the Moveworks Ticket object by default.

    Save your Query mapping before continuing.
  14. Scroll down to the Input fields in Mapper section and add the u_environment and u_is_vip fields.

    Save your Input fields before continuing.
  15. Set a default value that Moveworks populates when it creates an incident in ServiceNow. Select Create and add the field u_environment with the value prod:

    • "u_environment": "\"prod\""

    When configuring WRITE actions (Create, Update, Resolve, Reopen), the formatting tells Moveworks whether to use a fixed value or a variable you already defined in your query configuration.

    Using Moveworks variables: To use data Moveworks already holds, use a single pair of quotes. The value on the right must match the key you defined in your query mapping.

    • Syntax: "target_field": "stored_variable"
    • Example: "assignment_group": "assignment_group" Moveworks finds the key "assignment_group" in your query mapping and uses the result of its $TRIM(...) expression.

    Using static strings: To write fixed text that isn’t a variable, escape the quotes or use single quotes. Both are valid in Bender.

    • Syntax: "target_field": "\"Fixed Value\"" or "target_field": "'Fixed Value'"
    • Example: "short_description": "\"New Ticket from Moveworks\"" or "short_description": "'New Ticket from Moveworks'"

    Save your Create mapping before continuing.
  16. Open the Resolve action and update the close_code field:

    • "close_code": "\"Resolved by caller\""

    Save your Resolve mapping before continuing.
  17. Click Next, review the Routing & Workflow conditions (no changes needed), then click Save.

    Save your Routing & Workflow configuration before continuing.
  18. Open Table Actions and confirm the Incident ticket type is enabled for polling and concierge updates.

    Save your Table Actions before continuing.
  19. Confirm the Access Control Strategy is set to Public to all members.

    Save your Access Control configuration before continuing.

This lab doesn’t change the Org level settings, but they control these behaviors across all ticket types:

  • Ingestion Control: Determines how often Moveworks polls your ITSM (e.g., ServiceNow) for updates and how far back it looks for changes.
  • Notification Window: Sets business hours and weekend rules so the Assistant doesn’t message users overnight.
  • Nudge Logic: Configures the β€œInactivity Threshold”: the number of days a ticket sits idle before the Moveworks AI Assistant automatically nudges the assignee.
  • User Display: Toggles what the employee sees in chat, such as the ticket state, assignee info, or the ability to upload attachments directly through the Moveworks AI Assistant.
  1. Open Service Portal URL and create a configuration with your snow connector and your portal URL (https://[your-instance].service-now.com/esc). This controls where users land when they click a ServiceNow ticket link in Moveworks.

    Save your Service Portal URL configuration before continuing.
  2. Ticketing for incidents is configured. File a ticket with your Moveworks AI Assistant and test each action.


πŸ”„ 2: Revisiting Lab #7: Why Form Submission Failed

2.1: Why β€œI need a standard laptop” Didn’t Complete

At the end of Lab #7, you asked the AI Assistant I need a standard laptop. The Assistant surfaced the Standard Laptop form, but submitting it didn’t create anything in ServiceNow.

That’s because form handling in Moveworks splits across two capabilities:

  1. Form ingestion (Lab #7) makes forms discoverable and fillable. Moveworks pulls the catalog items, permissions, and field definitions from ServiceNow so the AI Assistant can ask follow-up questions and render the form in chat.
  2. Ticketing configuration (this lab) provides the destination tables Moveworks writes to. A form submission creates a Request Item (sc_req_item) record in ServiceNow, which requires the Request and Request Item tables to be mapped in your ticketing configuration.

Without ticketing configured, the Assistant can collect the inputs but has nowhere to send them.

Relevant Documentation:

2.2: The Defaults Already Cover Most of It

When you clicked Setup Defaults in Section 1.2, Moveworks pre-loaded mappings for four ticket types, each with a different set of default actions:

Ticket TypeTablePrefixDefault Actions
IncidentincidentINCQuery, Create, Update, Resolve
Requestsc_requestREQQuery, Create
Request Itemsc_req_itemRITMQuery, Update, Resolve
Tasksc_taskTASKQuery, Update

Section 1 customized the Incident mapping. The other three (Request, Request Item, and Task) are already in place from the defaults; you only need to verify them.

Why these four tables work together: When the AI Assistant submits a form, it invokes the Create action on sc_request, the parent record (REQ). ServiceNow’s workflows then generate the child line items on sc_req_item (RITM) and any fulfillment tasks on sc_task. That’s why only sc_request needs Create enabled in Moveworks.

2.3: Verify the Request, Request Item, and Task Mappings

  1. Navigate to Ticketing > Table Mappings in Moveworks Setup.

  2. Confirm all four tables (incident, sc_request, sc_req_item, and sc_task) appear in the list.

  3. Click into sc_request and verify the default fields:

    FieldExpected Value
    Table Namesc_request
    Ticket TypeRequest
    Prefix IDREQ
    Requestor Column Namerequested_for
  4. Repeat for sc_req_item:

    FieldExpected Value
    Table Namesc_req_item
    Ticket TypeRequest Item
    Prefix IDRITM
    Requestor Column Namerequest.requested_for
  5. Repeat for sc_task:

    FieldExpected Value
    Table Namesc_task
    Ticket TypeTask
    Prefix IDTASK
    Requestor Column Namerequest.requested_for

  6. In the sc_request table mapping, confirm the Create action is listed. This is the action Moveworks invokes when a form submission completes.

    Save your Table Mappings if you made any changes.

2.4: Retest the Lab #7 Request

In the Moveworks AI Assistant, type I need a standard laptop again.

This time the form should fill and submit, creating a new RITM in your ServiceNow instance. Confirm it appears in sc_req_item.list.

Still failing? See Section 4: Troubleshooting below. The most common cause is a required field on sc_req_item in your instance. Check the API Logs to see which field ServiceNow rejects.


βœ… 3: Verification & Next Steps

  1. Finalize: Confirm all configurations are saved.
  2. Check success: In the AI Assistant, confirm you can do each of these ticket actions:
    1. File

    2. Query

    3. Update (Add Comment)

    4. Resolve/Close

    5. Reopen


❗ 4: Troubleshooting: Why Can’t I Act on a Ticket?

A ticketing action fails when the way Moveworks creates or updates the ticket doesn’t match what the source system expects. Work through these checks.

4.1: Identify the Failure

When a call to the ticketing system fails, the Assistant tells the user it couldn’t complete the action, often with a short summary of why. In this example, Moveworks failed to create a ticket, likely because a mandatory field was missing from the API request.

4.2: Check the API Logs

In Moveworks Setup, the API Logs module shows what Moveworks sent to the source system and how it failed.

  1. Find the log entry for the error. You can search by requesting user, trace ID, method, or plugin.

  2. Read the error message. Here, the request payload is missing short_description, which ServiceNow requires.

4.3: Build a Working Payload in API Playground

Use the details from Section 4.2 to rebuild the payload in API Playground until the call succeeds. This can take a few tries, and in a live implementation you may need more information from the customer to resolve some values.

  1. Open Moveworks Setup in another tab and navigate to Connectors > API Playground.

  2. Copy the api_url_endpoint and request_payload from the log entry.

  3. Paste them into API Playground, adjust the payload, and test it.

  4. Repeat until the call succeeds.

4.4: Update the Ticket Mapping

With a working payload, open the part of the ticketing configuration that caused the issue, apply the fix, save it, and retest in the Assistant.

4.5: Check the Moveworks Status Page

Validate that there have been no broader issues reported by the Moveworks team on the Moveworks Status Page

4.6: Escalate to Moveworks Support

Ticketing issues are almost always a misconfiguration: the ticketing configuration doesn’t match what the source system expects. Confirm with the ITSM administrator that the same API call works outside of Moveworks.

If you’ve validated the above and still can’t find the root cause, open a ticket with Moveworks Support and include:

  1. The email of the user experiencing the issue
  2. The action they are attempting to take
  3. How the Moveworks Ticketing Plugin is failing

The more detail you include, the faster Moveworks Support can help.


πŸͺž 5: Reflecting on This Configuration

Through this lab, you’ve learned the following:

  • How to complete the Ticketing Configuration
  • How to add custom_data fields to the Ticket Query Mappings
  • What ticketing actions Moveworks can take
  • How to validate the actions are working as expected
  • The thought process to follow when ticketing is not operating as expected

βš™οΈ 6: Configuration Details

Use the table below to fill in the required fields accurately.

Field NameAction / Value to Enter
Custom incident fieldsu_environment (String), u_is_vip (True/False)
Connector Selectionsnow
Mark System as Primaryβœ…
Query custom_data fields"custom_data.u_environment": "$TRIM($TEXT((u_environment).value OR ''))",
"custom_data.u_vip_support": "$TRIM($TEXT((u_is_vip).value OR ''))",
Input fields in Mapperu_environment, u_is_vip
Create Field Mapping"u_environment": "\"prod\""
Resolve Field Mapping"close_code": "\"Resolved by caller\""
Table Actions: Tables to enable for concierge updatesIncident
Table Actions: Tables enabled for pollingIncident
Access Control: User access configurationPublic to all members
Service Portal URL: Integration Idsnow
Service Portal URL: Service Portal URLhttps://[your-instance].service-now.com/esc