Channel Resolver Integration - Zendesk

View as Markdown

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 -%}
    ]
    }
    }