Channel Resolver Integration - Zendesk

View as MarkdownOpen in Claude

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

Configuration

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

  1. Create webhook manually.

  • 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
  1. After the webhook is generated, the signing_secret needs to be securely sent to Moveworks CS team.

Manual Configuration of Triggers

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.

  1. Create a trigger category for Moveworks under {{ zendesk_url }}/admin/object-rules/rules/triggers called Moveworks Triggers.
  2. 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 -%}
    ]
    }
    }