Link Search Menu Expand Document

Customer Services

Our API allows you to contact our customer services team and receive responses from them. You can also upload attachments during the conversation.

Each conversation is a “Discussion” that has a category, a status, and a group of messages. Each discussion can also have an optional order or a list of products. This is because our customer services team can be contacted for general issues, issues related to a specific order, or issues related to specific products in an order.

Message Categories

Message categories are used to direct the customer’s query to the correct CS team and measure an influx of specific categories for analytics purposes.

Here’s the list of available categories. You can implement as many or as few of these as you please. However, we provide the full list of supported categories.

Message Statuses

When submitting a message to our CS team, the message goes through multiple statuses during its lifetime:

  • Outstanding: When a customer has sent a query, but an agent hasn’t picked it up yet.
  • In Progress: Once an agent has been assigned to the query.
  • Pending: Manually moved here if an agent is waiting for some other internal team to investigate the issue.
  • Complete: The agent has responded or if the agent doesn’t need to respond, for example, if a customer just messages saying ‘thanks.’

Attachments

When contacting customer services, you can submit attachments along with a message.
Here’s how to do it:

  1. Get the upload configuration that’s specific to a customer using the following query:

    query Config {
      attachmentUploaderConfig {
        uploadUrl
        authToken
      }
    }
    
  2. Make a request to the site’s domain (not this APIs domain) e.g. www.myprotein.com followed by the uploadUrl in the response.
    e.g. https://www.myprotein.com/account/documentupload/uploader/upload/38779254
  3. The body of the request should have the authToken from the above config request as a form parameter called authToken and the attachments as a file attachment in the form parameter called attachment.
  4. The request should look something like the following:

    curl --location --request POST 'https://www.myprotein.com/account/documentupload/uploader/upload/38779254' \
    --form 'uploadToken="145D6BC5-E617-454F-BFB2-MUM19BBC160F"' \
    --form 'attachment=@"e6ac8e98-5ec7-44db-b303-5c5e48c4710f.jpeg"'
    

    The response will be in JSON format, such as:

    {
      "successful": true,
      "token": "eTErS1ZBazJGZzNFR25TcGQzVkNxVzFCdUZDeE1yOXJDaXpVbUNweGhrMkhLVERsQjhUMXRKMjVDRHhiYUJUeVBsNUxCdHNhejB1TTV2SlR2YVNxM0E9PQ",
      "mimeType": "image/jpeg",
      "errorCode": 0
    }
    
  5. The token in the response should then be sent with a new discussion, or as a reply to an existing discussion in the attachmentToken field of the AddDiscussionMessageInput.

Examples

query GetMessages {
  customer {
    discussions {
      discussions {
        id
        # if the discussion is about a specific order and product
        selection {
          selectedOrder {
            orderNumber
          }
          selectedProducts {
            sku
            productVariant {
              title
            }
          }
        }
        category # category chosen during the submission
        status
        createdAt
        updatedAt
        read
        messages {
          messages {
            id
            type # This is QUERY or RESPONSE
            createdAt
            message
          }
          total
          hasMore
        }
      }
      total
      hasMore
    }
  }
}
mutation CreateDiscussion {
  createDiscussion(
    input: {
      category: WEBSITE_ISSUES
      message: {
        message: "Hi, I cannot log in on site, please help."
        attachmentToken: "eTErS1ZBazJGZzNFR25TcGQzVkNxVzFCdUZDeE1yOXJDaXpVbUNweGhrMkhLVERsQjhUMXRKMjVDRHhiYUJUeVBsNUxCdHNhejB1TTV2SlR2YVNxM0E9PQ"
      }
    }
  )
}
mutation MarkDiscussionAsRead {
  markDiscussionMessagesAsRead(
    input: {
      discussionId: "13183370" # This discussion currently being read
      upToMessageId: "35100000" # The lastest message being read
    }
  )
}
mutation ReplyToDiscussion {
  replyToDiscussion(
    discussionId: "13183370"
    input: {
      message: "Hi, I still cannot log in on site, please help."
      attachmentToken: "eTErS1ZBazJGZzNFR25TcGQzVkNxVzFCdUZDeE1yOXJDaXpVbUNweGhrMkhLVERsQjhUMXRKMjVDRHhiYUJUeVBsNUxCdHNhejB1TTV2SlR2YVNxM0E9PQ"
    }
  )
}

2024 © The Hut.com Ltd.