Commit d9fbce44 authored by Jason Colyer's avatar Jason Colyer
Browse files

Deprecate CSS doing user association - part 1

parent 055ff650
Loading
Loading
Loading
Loading
+34 −0
Original line number Diff line number Diff line
@@ -33,6 +33,40 @@ Advanced Search is an app that provides a simple visual interface for constructi

{{% /alert %}}

## Contact Management

<sup>*Introduced via [gitlab-com/eta/css/issue-tracker#7](https://gitlab.com/gitlab-com/eta/css/issue-tracker/-/work_items/7)*</sup>

This application is used for managing support contacts in Zendesk Global. Its functionality depends on the requester's association status and product type:

- For unassociated users:
  - If the `L&R Product Type` is `GitLab.com`:
    - It can attempt auto-association. This is done by reviewing the requester's gitlab.com account to locate the top-level paid namespaces it is an Owner of (and locating the corresponding organization tied to it via the Salesforce Account).
  - If the `L&R Product Type` is `Self-Managed` or `GitLab Dedicated`:
    - Associate users to an organization (via the Salesforce Account). It will ask for the needed information, add an internal note, and make any changes it is able to make.
- For associated users:
  - It can list the support contacts for the requester's organization
  - It can add users to the requester's organization
  - It can remove users from the requester's organization

All end-user changes the app performs will add a message on the `Details` attribute of the modified end-user to indicate the organization, ticket, and agent.

Do note the app will not circumvent policy restrictions, such as:

- Performing actions outside of tickets using the form `Support Ops`
- Exceeding the 30 support contact maximum limit
- Modifying support contacts for organizations using contact management projects

{{% alert title="Technical Details" color="primary" %}}

- Location: Ticket sidebar
- Restricted by Group:
  - Support Ops
  - ASEs
- This application was developed in-house and can be found [Contact Management project](https://gitlab.com/gitlab-support-readiness/zendesk-global/apps/contact-management).

{{% /alert %}}

## GitLab Reminders App

<sup>*Introduced via [support-team-meta#3036](https://gitlab.com/gitlab-com/support/support-team-meta/-/issues/3036)*</sup>
+1 −0
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ To request the deactivation of a group, please create a [Feature Request issue](
### Zendesk Global groups

- `Accounts Receivable`
- `ASEs`
- `Billing`
- `BPO`
- `General`
+39 −118
Original line number Diff line number Diff line
@@ -28,31 +28,27 @@ graph TD;
  A--> B
  B-->|Yes| C
  B-->|No| D
  C--> J
  D-->|GitLab.com| E
  C--> I
  D-->|gitlab.com| E
  D-->|Self-Managed or GitLab Dedicated| F
  E--> I
  F--> G
  G--> H
  H--> I
  I--> K
  E--> K
  J--> K
  A(Set metadata on ticket)
  B{Is requester already associated?}
  C(Pre-checks)
  D{What product type?}
  E(Attempt auto-association)
  F(Ask for proof of entitlement)
  G(Locate organization)
  H(Pre-checks)
  I(Manually associate user to organization)
  J(Use app to associate new users)
  K(Reply to ticket with appropriate macro and mark as solved)
  C[Use app to associate new users]
  D{What product type is it?}
  E[Use auto association in app]
  F[Ask for proof of support entitlement]
  G[Locate info in cDot]
  H[Fill out info in app]
  I[Reply to ticket with appropriate macro and mark as solved]
```

### Step 1: Set metadata on the ticket

Before proceeding, you need to ensure the metadata on the ticket is populated and set properly. Normal form submission should cover most metadata, so your specific focus should be on the ticket field `Support Ops Problem Type` (which you should be setting to `Manage my organization's contacts`).
Before proceeding, you need to ensure the metadata on the ticket is populated and set properly. Normal form submission should cover most metadata, so your specific focus should be on the ticket field `Support Ops Problem Type` (which you should be setting to `Manage my organization's contacts`). Beyond that, you need to ensure the `L&R Product Type` and `Subscription Email` fields have a value (if they do not, you may need to ask the customer for this information).

Once populated, submit an update to the ticket to ensure it is saved.

@@ -62,13 +58,12 @@ After doing this, proceed to [Step 2](#step-2-check-if-pre-authorized)

If a user is already associated to an organization, they are likely pre-authorized to manage their organization's support contacts. As such, the process for this is much simpler:

1. Perform the [Pre-checks](#pre-checks)
1. Gather the list of emails to add to the organization in a comma separated list
   - Example: `alice@example.com, bob@example.com, charlie@example.com`
1. Open the Support Ops Super App
1. Click `Associate User`
1. Open the `Contact Management` app
1. Click `Add users`
1. Put the list of emails in the input box
1. Click the `Associate` button
1. Click the `Add users to org` button
1. Confirm success via the app's output
1. Reply to the customer confirming the changes have been done (making sure to set the ticket's status to `Solved`)

@@ -85,13 +80,10 @@ If they have no provided it, reply to the ticket asking the user for their proof

### Step 4: Attempt auto-association

**Note**: The app does the [Pre-checks](#pre-checks) automatically for you.

For organization's who purchased a GitLab.com subscription, the process is much simpler:

1. Open the Support Ops Super App
1. Click `Attempt Association`
1. Click the `Attempt auto-association` button
1. Open the `Contact Management` app
1. Click `Associate .com requester` button

This will then perform various checks to see if the user can be auto-associated. The results will be displayed in the app.

@@ -128,9 +120,9 @@ To locate the license from an ID:
1. Navigate to the [Licenses page](https://customers.gitlab.com/admin/license)
1. Add `/xxxx` to the end of your URL (replacing `xxxx` with the license ID)

Make note of the license's URL you are at (it will be needed later for a note).
Make note of the license's ID you are at (it will be needed later for the app).

**Note**: If the cloud activation shows it is a trial (the value of the `Trial` is `Yes`), it is not a valid cloud activation (and the user has failed to pass entitlement checks). If this occurs, inform the user it is a trial and is not a valid paid subscription.
**Note**: If the license shows it is a trial (the value of the `Trial` is `Yes`), it is not a valid license (and the user has failed to pass entitlement checks). If this occurs, inform the user it is a trial and is not a valid paid subscription.

From this page, grab the value of `Zuora subscription name` and proceed to [Step 9](#step-9-locate-the-order).

@@ -140,9 +132,9 @@ To locate the cloud activation:

1. Login to the [Customers portal admin panel](https://customers.gitlab.com/admin) via Okta
1. Change your URL to `https://customers.gitlab.com/admin/cloud_activation?query=XXXX` (replacing `XXXX` with the cloud activation code)
1. Click the show button of the found cloud activation (looks like an `i` in a circle)
1. Click the show button of the found cloud activation (looks like an `i` in a circle).

Make a note of the cloud activation's URL you are at (it will be needed later for a note).
Make a note of the cloud activation's ID you are at (it will be needed later for a note).

**Note**: If the cloud activation shows it is a trial (the value of the `Trial` is `Yes`), it is not a valid cloud activation (and the user has failed to pass entitlement checks). If this occurs, inform the user it is a trial and is not a valid paid subscription.

@@ -173,116 +165,49 @@ To locate the order (from the subscription name):
1. Hit `Enter` or `Return` on your keyboard
1. Click the show button of the found order (looks like an `i` in a circle)

Make a note of the order's URL you are at (it will be needed later for a note).
Make a note of the order's ID you are at (it will be needed later for the app).

From this page, scroll down to `Billing account`, click the link, and proceed to [Step 10](#step-10-get-billing-account-information).

### Step 10: Get billing account information

Make a note of the billing account's URL you are at (it will be needed later for a note).
Make a note of the billing account's ID you are at (it will be needed later for the app).

Copy the value of the following:

- `Salesforce account`
- `Sold to`

At this point, you have all the needed information to proceed to [Step 11](#step-11-locate-the-organization).

### Step 11: Locate the organization

Here, you will need to use the `Salesforce account` value to locate the organization. Locating it from this depends on the character length of the value:

- For 15 character values, do a Zendesk search of `sfdc_short_id:xxx` (replacing `xxx` with the value)
- For 18 character values, do a Zendesk search of `salesforce_id:xxx` (replacing `xxx` with the value)

Make note of the organization URL you located (it will be needed later for a note) and proceed to [Step 12](#step-12-validate-information).

**Note** If you do not find an organization, please see [No organization found](#no-organization-found).

### Step 12: Validate information
At this point, you have all the needed information to proceed to [Step 11](#step-11-associate-via-the-app).

Here you will need to review all the information you have to determine if the user has passed entitlement checks. The key things to check:

- Was the license/cloud activation for a trial?
  - If the license/cloud activation for a trial was for a trial, they have not passed entitlement checks.
- Does the `Sold to` value from the billing account match what the user provided when filing the ticket?
  - If it does not match, they have not passed entitlement checks.

Add an internal note collating your findings and all information gathered. It should look like the following:

<details>
<summary>If using a license</summary>

```plaintext
- License: LINK_TO_LICENSE
- Order: LINK_TO_ORDER
- Billing account: LINK_TO_BILLING_ACCOUNT
- Sold-to: SOLD_TO_EMAIL
- Salesforce ID: SALESFORCE_ACCOUNT_ID
- Organization: LINK_TO_ORGANIZATION
```

</details>
<details>
<summary>If using a cloud activation</summary>

```plaintext
- Cloud activation: LINK_TO_CLOUD_ACTIVATION
- Order: LINK_TO_ORDER
- Billing account: LINK_TO_BILLING_ACCOUNT
- Sold-to: SOLD_TO_EMAIL
- Salesforce ID: SALESFORCE_ACCOUNT_ID
- Organization: LINK_TO_ORGANIZATION
```
### Step 11: Associate via the app

</details>
Here, you will use the `Contact Management` app to associate the user. It will ask for the information you obtained via cDot to do so.

How you proceed from here depends on if the user passed entitlement checks:
With the information, it will check if the user can be associated. If they cannot, it will detail why.

- If they failed entitlement checks, ensure your internal comment includes the reason for failing validation, post the note, and reply to the user accordingly.
- If they passed entitlement checks, add your internal note and proceed to [Step 13](#step-13-manually-associate-the-user).
If it can associate the user, it will:

### Step 13: Manually associate the user

With all that done, you need to associate the user. To do this:

- Copy the organization's name
- Navigate to the user's page in Zendesk
- Paste the value in the `Organization` area
- Click on the matching name of the organization from what shows

After doing so, reply to the customer confirming the changes have been done (making sure to set the ticket's status to `Solved`)
- Add an internal note with the cDot information entered
- Associate the user to the organization

## Removing associated users

If an associated user requests other associated users be removed, you will need to do this manually in Zendesk. To do this:

1. Navigate to the user in question to remove
1. Add the following to the `Notes` attribute for the user:

   > De-associated as per LINK

   - Replacing `LINK` with the ticket link you are working from
1. Click the value under `Organization`
1. Type a hyphen (i.e `-`)
1. Click the blank value (will look like `-`)

After doing so, reply to the customer confirming the changes have been done (making sure to set the ticket's status to `Solved`)
If an associated user requests other associated users be removed, you will need to use the `Contact Management` app to do so:

## Pre-checks

Before proceeding to associate a user to an organization, always check the following:

- The association of users to the organization would not cause the organization to surpass the 30 support contact limit
- There are not organization notes/details indicating you should not proceed with the request

If any of those checks fail, you cannot proceed. See [Common issues and troubleshooting](#common-issues-and-troubleshooting) for information on what to do when the checks have failed.
1. Gather the list of emails to remove from the organization
1. Open the `Contact Management` app
1. Click `Remove users`
1. Select the users to remove (it is multi-select)
1. Click the `Deassociate users` button
1. Confirm success via the app's output
1. Reply to the customer confirming the changes have been done (making sure to set the ticket's status to `Solved`)

## Common issues and troubleshooting

This is a living section that will have items added to it as needed.

### Attempt auto-association app fails to locate organization
### Attempt auto-association fails to locate organization

In cases where the Attempt Association app failed to locate the correct Salesforce account or organization, you will need to locate it manually.

@@ -299,7 +224,7 @@ To do this:
1. Click the `Search` button
1. Review the output to locate the correct Salesforce account (under `Salesforce info`)
1. Do a Zendesk search of `salesforce_id:xxx` (replacing `xxx` with the value)
1. Use the found organization to [Manually associate the user](#step-13-manually-associate-the-user)
1. Use the found organization to manually associate the user

If any of that fails, make an internal note indicating what is going on and assign the ticket to the Customer Support Systems, Fullstack Engineer to review.

@@ -309,10 +234,6 @@ If adding more users to the organization would cause it to surpass the 30 contac

Once the customer replies back telling you what changes to make to correct the problem, proceed as you normally would have in the process.

### Organization has notes or details saying not to proceed

This will vary from case to case. When in doubt, make an internal note indicating what is going on and assign the ticket to the Customer Support Systems, Fullstack Engineer to review.

### No organization found

If you found a Salesforce account, but not an organization, it can mean one of the sync mechanisms GitLab uses have had an issue.
+16 −0
Original line number Diff line number Diff line
---
title: 'Organization association'
category: Handling tickets
description: 'Documentation on Zendesk organization association'
---

{{% alert title="Technical Details" color="primary" %}}

This currently only applies to Assigned Support Engineers. For more information, please see:

- [gitlab-com/eta/css/issue-tracker#8](https://gitlab.com/gitlab-com/eta/css/issue-tracker/-/work_items/8)
- [gitlab-com/eta/css/issue-tracker#7](https://gitlab.com/gitlab-com/eta/css/issue-tracker/-/work_items/7)

{{% /alert %}}

For those working these types of tickets, please refer to [CSS > Organization association](/handbook/eta/css/zendesk/organizations/association/) at this time.