Login / Sign Up

Question

This represents a single question entity within the app. Title and content are required with optional youtube video embed, and attachment documents.

For multipark installs the 'sites' property is required. If you wish the offer to appear for a park then you must include it's groupsite key in the sites array.

Structure

{
  "id": 123,
  "title": "How to close the blinds",
  "content":  "To close the blinds, simply pull the back cord downwards. Pull the front cord to open.",
  "youtubeCode": "Bwr_B6MVGgQ",
  "youtubePoster": "https://your-wordpress-install.com/wp-content/uploads/2022/05/hm_imported_7488.jpg",
  "priority": 99,
  "featured": 1,
  "downloads": [
    {
      //Question Attachment
    }  
  ],
  "sites": [
    "park-one"
  ],
  "categories": [
    79
  ]
}

Properties

id

Type : Integer - Required

ID for the question. Must be unique to other questions, but does not need to differ from other entities

title

Type : String - Required

The question or title of the question

content

Type : Rich Text / Multiline String - Required

The answer to the question

youtubeCode

Type : String - Optional

This should be the code to a youtube video (not the whole url)

youtubePoster

Type : Image Url String - Optional

Optional poster image to show in the app for users to click to start the video

priority

Type : Integer - Optional

Defaults to 99 - the lower the priority the higher on the offer lists views it will be after featured sorting and before alphabetisation.

featured

Type : Boolean - Optional

Should a question be considered featured. These will always be pushed to the top of the All FAQs category, and the filtered category tabs. If several questions are featured then the priority sorting will come next before alphabetisation.

downloads

Type : Array of Link (Legacy File) - Optional

Optional list of file attachments. Should be .pdf or .doc files.

sites

Type : Array of String - Required

Only required for multi site installs - can be disregarded for single park systems. This should be a list of valid groupsite keys which this question should be available for. If this array is missing or empty then the offer will not render for any user.

categories

Type : Array of Integer - Optional

List of category IDs to associate with this question. All questions will render in the 'All FAQs' tab, but this array can set which other category tabs the offer also appears in.

Required Type Definitions

Boolean - Reveal

As we connect to different systems using a range of different languages, we can interpret several things as a true. Generally speaking holidaymaker will use a standard true/false JSON boolean, however we also read a lower case string and checked if they are "1", "true", "yes", or "on" to then create the positive boolean. Unless explicitly noted, all booleans are defaulted as false if the node doesn't exist.

{
  "optionOne": true,
  "optionTwo": false,
  "allTheseAreValidTrues" : [
    1, "1", true, "true", "on", "yes"
  ]
}

Image Url String - Reveal

Our app surfaces talk to an image engine on our infrastructure to process and resize images for different smart phone screen densities. Because of this the size of images are less relevant as they are delivered at optimum sizes anyway. However due to processing power and speed we do recommend that image urls are all 3000 pixels or below. The app surfaces will never need an image this large, so it gives you the option of still having a large quality image, but can be loaded in the apps and our infrastructure efficiently. We support both png, jpeg, and webp images. You can optionally include a '?v=' version integer so this can be used for versioning. If you do include this you can ensure images are reprocessed if the source image is changed on your servers.

{
  "imgUrl": "https://your-wordpress-site.com/wp-content/uploads/2023/08/a-large-image-3000x2100.jpg?v=1691481892",
  "image": "https://your-wordpress-site.com/wp-content/uploads/2023/08/a-smaller-image.png"
}

Integer - Reveal

Standard JSON Integer - 0 is commonly considered to be a default value, unless it is an valid ID when -1 is used. For sort priorities 99 is used as the default.

{
  "key1": 9,
  "key2": 42,
  "arrayOfInts": [
    2,
    3,
    5,
    8
  ] 
}

Link (Legacy File) - Reveal

This is a legacy type which works the same as the 'link' object, however for legacy reasons has different node names.

{
  "name": "Owner's on park agreement",
  "file": "https://your-wordpress-install.com/wp-content/uploads/2023/02/owners.pdf"
}

name

Type : String - Required

Name of file which should be used on the CTA button when rendering on a detail page


file

Type : Url String - Required

External url that the CTA button should try to externally open

Rich Text / Multiline String - Reveal

Acts the same as the standard String type, however If text is assumed to include line breaks then we use a place holder of #BREAK#. These will then be replaced by the relevant line breaks depending on the language, and device that is rendering the text. This is commonly used in entity copy, and addresses. Rich text should not include HTML or other markup. There should always be a contextual consideration as well - for example if you copy includes a html anchor link to 'Read More' - then simply removing the markup will then leave the text 'Read More' which will be a redundant, none clickable piece of text within the app surfaces.

{
  "textWithBullets": "This paragraph will now have two line breaks, and then a list of bullets#BREAK##BREAK#• Bullet 1#BREAK#• Bullet 2#BREAK#• Bullet 3",
  "address": "Holidaymaker App Ltd#BREAK#Stowey House#BREAK#Bridport Road#BREAK#Dorchester#BREAK#DT12SB"
}

String - Reveal

Standard JSON String - Often will have certain characters escaped depending what system is writing the JSON packet, however our parser only requires to have double quotes (") escaped. UTF-8 encoding is our standard, but others may be accepted if required. If line breaks are required in the text then the Rich Text / Multiline String type is used instead.

{
  "key1": "A string value",
  "key2": "Another string with an some \"quotes\" that need escaping",
  "arrayOfStrings": [
    "Item one as a string",
    "Item two as a string",
    "Item three as a string",
  ] 
}

Url String - Reveal

A Url is sent the same as a string. If our system knows this is a url it will check if it starts with http or https - Note that navigating from both iOS and Android should use https.

{
  "bookingUrl" : "https://portal.managebooking.pmssystem"
}