> This page is for Assistant Platform.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.moveworks.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.moveworks.com/_mcp/server.

# Channel Resolver Integration - Zendesk

## Start Here

* If the Moveworks user is set to `Admin` level permissions
  * No action needed, Moveworks Customer Success team can configure this within your system and this guide does not need to be followed.
* If the Moveworks user is set to `Agent` level permissions or more granular permissions with a `Custom Role`
  * We will not be able to automatically create the webhook on our own and require admin assistance.
  * In addition to the permissions detailed in the Zendesk document below, we need an additional permission to view, add, edit, and delete triggers\
    ![](https://files.readme.io/a054610-small-Untitled_-_2023-04-27T134816.900.png)

## Configuration

> **Info**
>
> This first step only needs to be run if Moveworks has Agent level permissions on Zendesk.

1. Create webhook manually.

![](https://files.readme.io/aed8d2d-small-Screen_Shot_2022-03-17_at_11.24.42_AM_3.png)

* Under `{{ zendesk_url }}/admin/apps-integrations/webhooks/webhooks`, create a new webhook with the following settings.
  * The `name` must be exactly `Moveworks Webhook Integration`
  * The endpoint needs to be `https://app.moveworks.ai/{ORG_NAME}/zendesk/zendesk/events`

2. After the webhook is generated, the signing_secret needs to be securely sent to Moveworks CS team.

![](https://files.readme.io/8e7e3ce-small-Screen_Shot_2022-02-27_at_2.08.55_PM_1.png)

## Manual Configuration of Triggers

> **Info**
>
> If Moveworks does not have permissions to create Triggers in your Zendesk instance, we also need to manually configure the following webhooks.

1. Create webhook.
   * Under `{{ zendesk_url }}/admin/apps-integrations/webhooks/webhooks`, create a new webhook with the following settings.
     * The `name` must be exactly `Moveworks Webhook Integration`
     * The endpoint needs to be `https://app.moveworks.ai/{ORG_NAME}/zendesk/events`
   * After the webhook is generated, the signing_secret needs to be sent to us via the customer as we will not be able to query it from our end.

![](https://files.readme.io/6af4e65-small-Screen_Shot_2022-03-17_at_11.24.42_AM_2.png)

2. Create a trigger category for Moveworks under `{{ zendesk_url }}/admin/object-rules/rules/triggers` called `Moveworks Triggers`.
3. We will need to create three separate triggers under this category.

## Moveworks Trigger - New Comment

1. Name: `Moveworks Trigger - New Comment`
2. Condition: `Comment` `is` `Present (public or private)`
3. Action: `Notify active webhook` `Moveworks Webhook Integration`
4. Payload:
   ```
   {
       "event_type": "comment_created",
       "timestamp": "{{ticket.latest_comment.created_at_with_time}}",
       "comment": {
           "id": {{ticket.latest_comment.id}},
           "type": "Comment",
           "author_id": {{ticket.latest_comment.author.id}},
           "author_name": "{{ticket.latest_comment.author.name}}",
           "body": "{{ticket.latest_comment.value}}",
           "plain_body": "{{ticket.latest_comment.value}}",
           "public": {{ticket.latest_comment.is_public}},
           "attachments": [
               {%- for attachment in ticket.latest_comment.attachments -%}
               {
                   "file_name": "{{attachment.filename}}",
                   "url": "{{attachment.url}}",
                   "size": {{attachment.size}}
               }{% unless forloop.last %},{% endunless %}
               {%- endfor -%}
           ],
           "created_at": "{{ticket.latest_comment.created_at_with_time}}"
       },
       "ticket": {
       "id": {{ticket.id}},
       "subject": "{{ticket.title}}",
       "description": "{{ticket.description}}",
       "submitter_id": {{ticket.submitter.id}},
       "requester_id": {{ticket.requester.id}},
       {% if ticket.assignee != blank %}"assignee_id": {{ticket.assignee.id}},{% endif %}
       {% if ticket.group != blank %}"group_id": {{ticket.group.id}},{% endif %}
       "created_at": "{{ticket.created_at_with_timestamp}}",
       "updated_at": "{{ticket.updated_at_with_timestamp}}",
       "type": "{{ticket.ticket_type}}",
       "status": "{{ticket.status}}",
       "comments": [
           {%- for comment in ticket.comments -%}
           {
               "id": {{comment.id}},
               "type": "Comment",
               "author_id": {{comment.author.id}},
               "author_name": "{{comment.author.name}}",
               "body": "{{comment.value}}",
               "plain_body": "{{comment.value}}",
               "public": {{comment.is_public}},
               "attachments": [
                   {%- for attachment in comment.attachments -%}
                   {
                       "file_name": "{{attachment.filename}}",
                       "url": "{{attachment.url}}",
                       "size": {{attachment.size}}
                   }{% unless forloop.last %},{% endunless %}
                   {%- endfor -%}
               ],
               "created_at": "{{comment.created_at_with_time}}"
           }{% unless forloop.last %},{% endunless %}
           {%- endfor -%}
       ]
   }
   }
   ```

### Moveworks Trigger - Ticket Updated

1. Name: `Moveworks Trigger - Ticket Updated`
2. Condition: `Ticket` `is` `Updated`
3. Action: `Notify active webhook` `Moveworks Webhook Integration`
4. Payload:
   ```
   {
       "event_type": "ticket_updated",
       "timestamp": "{{ticket.updated_at_with_timestamp}}",
       "user": {
           "name": "{{current_user.name}}",
           "email": "{{current_user.email}}",
           "id": {{current_user.id}}
       },
       "ticket": {
       "id": "{{ticket.id}}",
       "subject": "{{ticket.title}}",
       "description": "{{ticket.description}}",
       "submitter_id": {{ticket.submitter.id}},
       "requester_id": {{ticket.requester.id}},
       {% if ticket.assignee != blank %}"assignee_id": {{ticket.assignee.id}},{% endif %}
       {% if ticket.group != blank %}"group_id": {{ticket.group.id}},{% endif %}
       "created_at": "{{ticket.created_at_with_timestamp}}",
       "updated_at": "{{ticket.updated_at_with_timestamp}}",
       "type": "{{ticket.ticket_type}}",
       "status": "{{ticket.status}}",
       "comments": [
           {%- for comment in ticket.comments -%}
           {
               "id": {{comment.id}},
               "type": "Comment",
               "author_id": {{comment.author.id}},
               "author_name": "{{comment.author.name}}",
               "body": "{{comment.value}}",
               "plain_body": "{{comment.value}}",
               "public": {{comment.is_public}},
               "attachments": [
                   {%- for attachment in comment.attachments -%}
                   {
                       "file_name": "{{attachment.filename}}",
                       "url": "{{attachment.url}}",
                       "size": {{attachment.size}}
                   }{% unless forloop.last %},{% endunless %}
                   {%- endfor -%}
               ],
               "created_at": "{{comment.created_at_with_time}}"
           }{% unless forloop.last %},{% endunless %}
           {%- endfor -%}
       ]
   }
   }
   ```

### Moveworks Trigger - Ticket Created

1. Name: `Moveworks Trigger - Ticket Created`
2. Condition: `Ticket` `is` `Created`
3. Action: `Notify active webhook` `Moveworks Webhook Integration`
4. Payload:
   ```
   {
       "event_type": "ticket_created",
       "timestamp": "{{ticket.created_at_with_timestamp}}",
       "ticket": {
       "id": {{ticket.id}},
       "subject": "{{ticket.title}}",
       "description": "{{ticket.description}}",
       "submitter_id": {{ticket.submitter.id}},
       "requester_id": {{ticket.requester.id}},
       {% if ticket.assignee != blank %}"assignee_id": {{ticket.assignee.id}},{% endif %}
       {% if ticket.group != blank %}"group_id": {{ticket.group.id}},{% endif %}
       "created_at": "{{ticket.created_at_with_timestamp}}",
       "updated_at": "{{ticket.updated_at_with_timestamp}}",
       "type": "{{ticket.ticket_type}}",
       "status": "{{ticket.status}}",
       "comments": [
           {%- for comment in ticket.comments -%}
           {
               "id": {{comment.id}},
               "type": "Comment",
               "author_id": {{comment.author.id}},
               "author_name": "{{comment.author.name}}",
               "body": "{{comment.value}}",
               "plain_body": "{{comment.value}}",
               "public": {{comment.is_public}},
               "attachments": [
                   {%- for attachment in comment.attachments -%}
                   {
                       "file_name": "{{attachment.filename}}",
                       "url": "{{attachment.url}}",
                       "size": {{attachment.size}}
                   }{% unless forloop.last %},{% endunless %}
                   {%- endfor -%}
               ],
               "created_at": "{{comment.created_at_with_time}}"
           }{% unless forloop.last %},{% endunless %}
           {%- endfor -%}
       ]
   }
   }
   ```