Service Account Configuration Guide

Complete guide for configuring Service Accounts in Moveworks Setup with channel_id_info and itsm_id_info for all systems.

View as Markdown

Overview

A service account is required for Moveworks to function properly. Without a configured service account, the user roster cannot be ingested, and the bot cannot perform automated actions on behalf of the system.

Purpose:

  • User Roster Ingestion: Service Account / Bot User must be present for the User Identity Flow to execute successfully
  • Automated Actions: Enables the bot to create tickets, submit requests, and perform other actions in connected systems
  • System Integration: Links the bot’s identity across chat platforms (Teams/Slack), ITSM systems (ServiceNow/Jira), and identity providers (Okta/Azure AD)

What This Configuration Does: The service account configuration maps the bot’s identity across all integrated systems using channel_id_info (chat platforms) and user_itsm_id_info (ITSM systems). This allows Moveworks to operate as a unified bot identity across your entire stack.


Complete Configuration Example

Note: This example includes inline comments for documentation purposes. When creating your actual configuration in Moveworks Setup, remove the comments & sections not relevant to your tech stack.

1{
2 // ==========================================
3 // Primary email address - the canonical email for this service account
4 // ==========================================
5 "email_addr": "moveworks-bot@company.com",
6 "record_id": "moveworks-bot@company.com",
7 "user_name": "moveworks-bot",
8 "full_name": "Moveworks Bot",
9 "role": "Virtual Assistant (Bot)",
10 "department": "IT",
11 "location": "Mountain View",
12 "user_tags": ["BOT"],
13
14 "user_id_info": {
15 // ==========================================
16 // Email aliases - all email addresses this account is known by across systems
17 // Used for identity resolution and joining across different systems
18 // Typically from the Identity system (primary source)
19 // ==========================================
20 "user_email": [
21 "moveworks-bot@company.com",
22 "bot@subsidiary.com"
23 ],
24
25 "channel_id_info": [
26 // ==========================================
27 // MS Teams - Primary Tenant
28 // Get Microsoft App ID from MS Teams connector in Moveworks Setup
29 // Format: "28:{microsoft_app_id}"
30 // If installed from MS App Store: "28:b8ec4e1a-e05a-49d0-ba3a-05119b8b62c0"
31 // ==========================================
32 {
33 "integration_id": "msteams",
34 "user_channel_id": "28:b8ec4e1a-e05a-49d0-ba3a-05119b8b62c0"
35 },
36
37 // ==========================================
38 // MS Teams - Secondary Tenant (GCCH)
39 // Get Microsoft App ID from MS Teams connector in Moveworks Setup
40 // Format: "28:{microsoft_app_id}"
41 // ==========================================
42 {
43 "integration_id": "msteams_gcch",
44 "user_channel_id": "28:87654321-4321-4321-4321-cba987654321"
45 },
46
47 // ==========================================
48 // Slack - Primary Workspace
49 // API: GET /api/auth.test (returns user_id and team)
50 // Use: Slack connector in API Playground
51 // Format: "{user_id}:{team_id}"
52 // ==========================================
53 {
54 "integration_id": "slack",
55 "user_channel_id": "U01ABC123:T01ABC123"
56 },
57
58 // ==========================================
59 // Slack - Secondary Workspace
60 // API: GET /api/auth.test (returns user_id and team)
61 // Use: Slack connector in API Playground
62 // Format: "{user_id}:{team_id}"
63 // ==========================================
64 {
65 "integration_id": "slack_subsidiary",
66 "user_channel_id": "U02DEF456:T02DEF456"
67 },
68
69 // ==========================================
70 // Web Chat
71 // Format: Service account email address
72 // ==========================================
73 {
74 "integration_id": "movewebchat",
75 "user_channel_id": "svc.moveworks@company.com"
76 }
77 ],
78
79 "user_itsm_id_info": [
80 // ==========================================
81 // ServiceNow
82 // API: GET /api/now/table/sys_user?sysparm_query=user_name={username}&sysparm_fields=sys_id,user_name,email,first_name,last_name,name&sysparm_limit=1
83 // Use: ServiceNow connector in API Playground
84 // Alternative query: sysparm_query=email={email}
85 // ==========================================
86 {
87 "integration_id": "snow",
88 "itsm_user_id": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
89 "external_id": "moveworks.bot",
90 "first_name": "Moveworks",
91 "last_name": "Bot",
92 "full_name": "Moveworks Bot"
93 },
94
95 // ==========================================
96 // Jira Service Management
97 // API: GET /rest/api/3/user/search?query={email}
98 // Use: Jira connector in API Playground
99 // Alternative: /rest/api/3/user?accountId={account_id}
100 // ==========================================
101 {
102 "integration_id": "jira_service_desk",
103 "itsm_user_id": "5d8e9f0a1b2c3d4e5f6a7b8c",
104 "external_id": "moveworks-bot@company.com",
105 "first_name": "Moveworks",
106 "last_name": "Bot",
107 "full_name": "Moveworks Bot"
108 },
109
110 // ==========================================
111 // Salesforce
112 // API: GET /services/data/v58.0/query?q=SELECT Id,Username,Email,FirstName,LastName,Name FROM User WHERE Username='{username}'
113 // Use: Salesforce connector in API Playground
114 // ==========================================
115 {
116 "integration_id": "salesforce",
117 "itsm_user_id": "0051234567890ABCDE",
118 "external_id": "moveworks.bot@company.com",
119 "first_name": "Moveworks",
120 "last_name": "Bot",
121 "full_name": "Moveworks Bot"
122 },
123
124 // ==========================================
125 // FreshService
126 // API: GET /api/v2/requesters?query="primary_email:'{email}'"
127 // Use: FreshService connector in API Playground
128 // ==========================================
129 {
130 "integration_id": "freshservice",
131 "itsm_user_id": "15001234567",
132 "external_id": "moveworks.bot@company.com",
133 "first_name": "Moveworks",
134 "last_name": "Bot",
135 "full_name": "Moveworks Bot"
136 },
137
138 // ==========================================
139 // ManageEngine
140 // API: GET /api/v3/users?input_data={"list_info":{"search_criteria":{"field":"email_id","value":"{email}"}}}
141 // Use: ManageEngine connector in API Playground
142 // ==========================================
143 {
144 "integration_id": "manageengine",
145 "itsm_user_id": "158691000000209025",
146 "external_id": "moveworks.bot@company.com",
147 "first_name": "Moveworks",
148 "last_name": "Bot",
149 "full_name": "Moveworks Bot"
150 }
151 ]
152 }
153}

How to Use API Playground

  1. Navigate to Setup → Manage Connectors → System Connectors
  2. Find the connector for your system (e.g., “MS Teams”, “Slack”, “ServiceNow”)
  3. Click “Test in API Playground”
  4. Enter the API endpoint and parameters from the configuration example above
  5. Copy the response values into your service account configuration

Note: API Playground handles authentication automatically through your configured connector.


API Quick Reference

Chat Systems

SystemHow to Get user_channel_idFormat
MS TeamsGet Microsoft App ID from MS Teams connector in Moveworks Setup
If installed from MS App Store: Use fixed value
"28:{microsoft_app_id}"
App Store: "28:b8ec4e1a-e05a-49d0-ba3a-05119b8b62c0"
SlackAPI: /api/auth.test
Returns: user_id (U…) and team (T…)
"\{user_id}:{team_id}"
Web ChatUse service account email address"email@company.com"

ITSM Systems

SystemEndpointSearch ParameterResponse Field → Config Field
ServiceNow/api/now/table/sys_usersysparm_query=user_name={username}
sysparm_fields=sys_id,user_name,email,first_name,last_name,name
sysparm_limit=1
sys_iditsm_user_id (32-char hex)
user_nameexternal_id
Jira/rest/api/3/user/search?query={email}Email or usernameaccountIditsm_user_id
emailAddressexternal_id
Parse displayName → first/last name
Salesforce/services/data/v58.0/queryq=SELECT Id,Username,Email,FirstName,LastName,Name FROM User WHERE Username='{username}'Iditsm_user_id (18-char)
Usernameexternal_id
FreshService/api/v2/requestersquery="primary_email:'{email}'"iditsm_user_id (numeric)
primary_emailexternal_id
ManageEngine/api/v3/usersinput_data={"list_info":{"search_criteria":{"field":"email_id","value":"{email}"}}}iditsm_user_id (string)
email_idexternal_id

Field Descriptions

channel_id_info Fields

FieldDescriptionFormat Examples
integration_idYour connector ID from Setup"msteams", "slack", "msteams_gcch"
user_channel_idUser ID in chat platformTeams: "28:{app_id}"
Slack: "{user_id}:{team_id}"
Web Chat: "email@company.com"

user_itsm_id_info Fields

FieldDescriptionFormat Examples
integration_idYour connector ID from Setup"snow", "jira_service_desk", "salesforce", "freshservice", "manageengine"
itsm_user_idUser ID in ITSM systemServiceNow: 32-char hex
Jira: accountId
Salesforce: 18-char
FreshService: numeric
ManageEngine: string
external_idUsername or emailVaries by system
first_name, last_name, full_nameName fieldsParse from API response

Common Issues

Cannot find service account in API

  • Try different search fields (email vs username vs UPN)
  • Verify account exists and is active
  • Check connector permissions
  • For ServiceNow, try: sysparm_query=email={email} or sysparm_query=user_name={username}^active=true

MS Teams - Where to find Microsoft App ID

  • Go to Setup → Manage Connectors → System Connectors
  • Find your MS Teams connector
  • The Microsoft App ID is displayed in the connector configuration
  • Format for service account: "28:{microsoft_app_id}"
  • If installed from MS App Store: Use "28:b8ec4e1a-e05a-49d0-ba3a-05119b8b62c0"

Slack - Getting user_id and team_id

  • Use API Playground with your Slack connector
  • Call /api/auth.test endpoint
  • Response includes both user_id (starts with U) and team (team_id, starts with T)
  • Format: "{user_id}:{team_id}" (e.g., "U01ABC123:T01ABC123")

Jira displayName needs splitting

  • Parse displayName (e.g., “Moveworks Bot”) into first/last name
  • Example: firstName = displayName.split(" ")[0], lastName = displayName.split(" ").slice(1).join(" ")
  • Add sysparm_limit=1 (ServiceNow) or use exact match filters
  • Use unique identifiers (email) instead of partial names

Best Practices

  1. Test in API Playground first - Verify response format before configuring
  2. Use descriptive integration_ids - For multi-tenant: msteams_commercial, msteams_gcch, slack_main
  3. Document multi-instance setups - Add inline comments for each tenant/workspace
  4. Validate after configuring - Setup → User Identity → View Users → search for service account

Notes

  • MS Teams format: user_channel_id is "28:{microsoft_app_id}" from connector settings, or "28:b8ec4e1a-e05a-49d0-ba3a-05119b8b62c0" if installed from MS App Store
  • Slack format: user_channel_id is "{user_id}:{team_id}" from /api/auth.test (e.g., "U01ABC123:T01ABC123")
  • Web Chat format: user_channel_id is the service account email address
  • ITSM ID formats: ServiceNow (32-char hex), Jira (accountId), Salesforce (18-char), FreshService (numeric), ManageEngine (string)

Document Version: 4.0 Last Updated: 2025-01-21