Synthesis VR API – Booking Widget

API As explained, the booking widget just utilizes the API and gives a ready to use example. However, in many cases, that may not be enough and as you may want to better match your website design, integrate your own payment processor, use a different language and so on. What usually would be enough is to open the widget page, copy all the source code in your own site and start editing the HTML / Javascript. However, this still may not be sufficient for some of you, so here comes the direct API integration. If you are not a developer and you don’t have such on hand, please stick to the widget. The next would just confuse you unnecessary. API CALL – AVAILABILITY URL = https://api.synthesisvr.com/ Method = GET Resource = /web/<public_key>/availability Accepted parameters: Parameter Format Description people Integer the number of VR stations you wants to book experience Integer the id of the experience type. If not provided, SynthesisVR would use the first experience type that is assigned on the widget date String ; YYYY- MM-DD A date that isn’t in the past duration Integer a duration that exists under your work hour rules customer_token String (optional) A token obtained via the /web/<public_key>/customers/auth API call JSON Response: Name Type Description balance String Shows the balance for the given customer_token or $0.00 if no balance is available coupons Array Shows the available vouchers against the given customer_token. Some vouchers may not appear if they are not allowed for the desired “people” ; “experience” ; “date” and “duration” parameters dows Integer Array From 0 to 6. Points to the days of the week when reservations can be booked. 0 = Monday ; 6 = Sunday special_days Array If a day of the week is disabled via the dows parameter, but there are exceptions. stations Key – Object pairs The key refers to experience type id. Check the “Experience Type Object” for the object values. times Key – Object pairs Represents the daily availability. Check the “Availability Object” for detailed description. Experience Type Object:   Name Type Description book_all Boolean This reservations requests to book all stations. descr Text Description of the experience type durations Integer Array Available durations in minutes pcs String Array The SynthesisVR IDs of the VR stations pos Integer If there are multiple experience types – the position of the current one stations Integer The total number of PCs under this experience type title String Title of the experience type   Availability Object:   Name Type Description cost Float The final cost to be charged per station endTimePre Timestamp – ISO 8601 A timestamp object pointing to when the session would end moreOptions Key – Object pairs Additional paid options for the current object precost Float The cost per station before discounts startTime String The startTimePre parameter in a human readable format startTimePre Timestamp – ISO 8601 A timestamp object pointing to when the session would start stations Integer The number of available (free) stations. value Time String – format HH:MM The “time” value to be used with the /web/<public_key>/book API call   API CALL – VALIDATE EMAIL URL = https://api.synthesisvr.com/ Method = POST Resource = /web/<public_key>/customers/validateEmail Accepted parameters: Parameter Format Description email String (optional) Email string to validate JSON Response: Name Type Description status Boolean True = there is a customer with such email address. You could proceed to authentication. False = no such customer exists. You could proceed with a signup process API CALL – CUSTOMER AUTHENTICATION     URL = https://api.synthesisvr.com/ Method = POST Resource = /web/<public_key>/customers/auth Accepted parameters: Parameter Format Description email String Email string to authenticate password String (optional) Password related to the given email service String (optional) The name of an authentication service. Example: “facebook” serviceString String (optional) The value to be authenticated for the given service string. JSON Response: Name Type Description cc String Last 4 digits of the CC associated with the account (e.g. XXXX1234) msg String Text description of the API call result name String Customer name pm String “0” = No payment method and no CC data collection is needed status Integer 1 = Authenticated ; 0 = Invalid credentials token String A string to be used with the AVAILABILITY and BOOK API calls API CALL – CUSTOMER CREATION URL = https://api.synthesisvr.com/ Method = POST Resource = /web/<public_key>/customers/create Accepted parameters: Parameter Format Description email String Email string to authenticate password String (optional) Password related to the given email service String (optional) The name of an authentication service. Example: “facebook” serviceString String (optional) The value to be authenticated for the given service string. name String Full customer’s name additional JSON key-value pairs Additional information to keep per customer. Example: {“birthday”:”1st April, 1985″,”phone”:”12135559999″} The API response is the same JSON as for: /web/<public_key>/customers/auth   API CALL – CUSTOMER UPDATE CC     URL = https://api.synthesisvr.com/ Method = POST Resource = /web/<public_key>/customers/updateCC Accepted parameters: Parameter Format Description customer_token String The token obtained from an “auth” or “create” API call json JSON key-value pairs The complete CC data. See below for field description. Note: the key-value pairs may vary between the payment processors JSON Response: Name Type Description status Integer 1 = Success ; 0 = Failure, use “msg” to lookup the error msg String Text description of the error. PayPal Here – JSON object:   Name Type Description credit_card Integer 1 = Success ; 0 = Failure, use “msg” to lookup the error security_digits String Text description of the error. exp_date1 Integer CC expiration Month exp_date2 Integer CC expiration Year first_name String First Name last_name String Last Name cardholder_address String Address of the CC owner cardholder_city String City cardholder_country String Country cardholder_state String State cardholder_zip String ZIP code cardholder_phone String Phone number   API CALL – CUSTOMER ASSIGN VOUCHER URL = https://api.synthesisvr.com/ Method = POST Resource = /web/<public_key>/customers/assignVoucher Accepted parameters: Parameter Format Description customer_token String The token obtained from an “auth” or “create” API call code String The voucher / coupon code JSON Response: Name Type Description status Integer 1 = Success ; 0 = Failure, use “msg” to lookup

Booking Add-On – disable opening / closing hours from booking

Due to multiple reasons (as example, having a lot of foot traffic), you may want to hide periods of the day from your booking widgets. To avoid creating new experience type with different hours and extra logic that may complicate your setup, you can simply extend the booking widget with some custom code. To make it even easier for you, we already built that code and simplified it to the possible minimum.   You may want to hide times based on day of the week or based on experience type (or both together). For that purpose, you have to build your logic and few lines of javascript code. Considering the days of week are: Monday => 1 Tuesday => 2 Wednesday => 3 Thursday => 4 Friday => 5 Saturday => 6 Sunday => 7 If you want to hide options from the widgets for only Monday + Thursday + Sunday, then you’ll have to use the following combination: 1,4,7 If it is to apply for Monday to Thursday, then use: 1,2,3,4 Next, you need your experience type ID (can be found on the Experience Types management page). Let say you work with the default “Immersive” experience type => 1 Then, your rule will looks like this: 1_1,4,7 => the _ character is used as a separator between the experience type and the days of the week 1 => in this case, you don’t have any specified days, so we assume your rule apply everyday *_1,2,3,4 => applies for ALL experience types between Monday ot Thursday Note: you can’t list multiple experience types separated by comma. You have to create multiple rules instead. You can use asterisk (*) to apply the rule for all your experience types   What the actual code looks like: Default line (no changes on it): window.svr.hideTimes = new Object(); [‘hide_before’,’hide_after’].forEach(function(i){ window.svr.hideTimes[i] = new Object(); }); Your rules: window.svr.hideTimes[“hide_before”][“*_1,2,3,4”] = “13:00”; window.svr.hideTimes[“hide_before”][“1”] = “14:00”; window.svr.hideTimes[“hide_after”][“*”] = “20:00″;   All your rules have to be enclosed in a <script> tag. You also have to load the actual custom logic: <script src=”//api.synthesisvr.com/widgetPlugins/skipTimeOptions.js” crossorigin=”anonymous”></script>   Examples 1) If you don’t want to accept bookings before 1pm and after 8pm: <script> window.svr.hideTimes = new Object(); [‘hide_before’,’hide_after’].forEach(function(i){ window.svr.hideTimes[i] = new Object(); }); window.svr.hideTimes[“hide_before”][“*”] = “13:00”; window.svr.hideTimes[“hide_after”][“*”] = “20:00″; </script> <script src=”//api.synthesisvr.com/widgetPlugins/skipTimeOptions.js” crossorigin=”anonymous”></script>   Example 2) To skip late booking (after 6pm) for the Immersive experience type during the busy days (Friday to Sunday): <script> window.svr.hideTimes = new Object(); [‘hide_before’,’hide_after’].forEach(function(i){ window.svr.hideTimes[i] = new Object(); }); window.svr.hideTimes[“hide_after”][“*_5,6,7”] = “18:00″; </script> <script src=”//api.synthesisvr.com/widgetPlugins/skipTimeOptions.js” crossorigin=”anonymous”></script>   You need to append the final code to the “Add HTML before the BODY tag closure” option under the Booking Widget settings (the Edit button).  

Command Calls – Create/Execute Custom Scripts & Commands

Required version: 3.9.6 Overview: As LBVR progress through the years, we sees a good number of new VR related hardware coming to the market. Often, to ensure fast and flawless operation, the new hardware have to be integrated in Synthesis. As long as we are working toward native support for as much hardware as possible (KATVR + KAT I/O as an example), we feel there is so much more you could achieve if you have the right tools to unleash your creativity. This is what the “Command Calls” are purposed for. Working with hardware in LBVR normally comes down to 4 simple events: An extra 5th event is -> manual actionsWhat if you could write a simple code in ANY programming language and attach it to any of the 4+1 events? Idea 1) You can turn the Graphic Card color to RED when the station is occupied and back to GREEN when its free Idea 2) In a conversation with the studio behind an upcoming game title utilizing the “fear of height” (like Richie’s Plank Experience), we came up to the idea it will be great if they could send a simple UDP START message when a person is falling down and STOP when the person “reach the destination” 🙂 If the develop do this (which is pretty easy for them), we’ll develop a very tiny open source app that will let you catch the START/STOP states and convert that to turning the power on/off for one the PC USB ports. On that port, you could attach a USB powered fan and that will have a great impact to the customer immersion with a very tiny investment on your end. Idea 3) If you are running hydraulic racing simulators, you have to use SimTools. What if SimTools can be taken care of by a script or by a direct call to the SimTools executable? Idea 4) Start the Vive Wireless Adapter software along with the session and stop it once the session is over. The “Command Calls” event system makes it all possible. Setup Guide: Example: In our example, the content of the startcmd.bat file is: For test purposes, you can attach it to a session start. Then, the opposite endcmd.bat will be: As result, Notepad and the Windows Calculator will open upon start of the session and close along with the session end.

Booking Add-On – Booking Widget Setup

This Documentation will provide a step by step guide to setting up your booking widget, integrating it in to your WordPress website and other advanced configurations. On your left menu click Administration Click Advanced Settings – Web Widgets as shown below  This takes you to the Widgets Page. On the Booking Widgets TAB – Click the + sign to create a new web widget. This will open up a pop up menu to create a new widget.   Widgets Pop Up Settings 1. Title – A Suitable title for your widget 2. Predefined Template – Select Template Version 5 from the drop down menu as shown below  3. Click the Experience Type+ buttonSelect the correct Experience from the dropdown menu this widget is going to apply. You can have multiple Experiences on the same widget. Make sure to click Experience Types+ button to add more experience. 4. Take Out Time Options+ (Optional) By default the booking will show all your time slots. Example: You have a 15, 30, 45 and 60 minutes duration on your Booking Rules for VR Experience. Online you only want to show the 30,45 and 60 minutes option and do not want customers booking 15 minutes, then you can use this Take Out Time Options+ and not show the 15 minutes duration as shown below. 5. Waiver Template (Optional)If you want your customers to select a waiver before checkout select the correct Waiver Template from the drop down as shown below: 6. About Field – (Optional)Here you can add text explaining the booking widgets or conditions. 7. Payment moduleSynthesis VR can integrate multiple merchant processors for free. Here you can select the correct Payment module that is to applied for taking customers’ payment online. **This module has to be setup prior to selecting from the drop down. 8. Collect More Information About Your Customers+ (Optional)By default only Email, Password and Full Name is entered when a customer is making a booking online. If you want to collect more information you can use this button to add multiple fields. All fields are default text inputs, but limitations can be set as shown below.**For more customization options check the booking customization section. 9.Booking Confirmation Points+ (Optional)You can create points that the customer would check off using this. For example, something like “I agree to come 15 minutes prior to my session start”. This checkbox would be required to be checked off. 10. Add HTML to the HEAD and BODY tag (Optional)These fields are used to customize various options on your widget settings. Using this you can pretty much customize and enhance various options according to your own individual requirements. **This is clearly explained in the customization section with multiple examples as use case scenarios.11. Customer can pay in your locationIf you want your customers to pay at your Arcade instead of ONLINE, select YES, If the customer has to Pay ONLINE, select NO 12. Disable enforcing account registrationIf you want to enforce customers to register before checkout. This option will be OBSOLETE if ONLINE PAYMENT OPTION is selected, customer will have to create a profile before checking out. 13.Arcade Image (Optional)Upload your logo or image of choosing for the widget 14. External CSS URL (Optional)Synthesis VR supports external styling using CSS. Please input URL to enable external styling. 15. Time FormatAs shown below, which format of time you want to use in your widget. AM/PM or Military style Time. 16. Pre-selected duration upon loading the widget (Optional)If you want a certain duration to load by default based on your booking duration, input the duration in minutes as shown below. This will load the 30 minutes duration by default on the booking page. 17. Earlier Possible Time After (Optional)This is an extremely valuable field for events and party bookings. For special events and parties if you require a certain duration then use this field.Type Digit and Type of Duration as shown below. This will require a 24 hour notice before they can make a reservation online. This will prevent same day reservations and have to be used carefully. Once you have setup everything please click the Save Changes button. 

VR Session Manager – Session Tags

Real life usage case If you don’t yet have any employees, you definitely would have to hire some as your business grows. Then, you would create them “Operator” SynthesisVR accounts, as you wouldn’t want them to have full control over your setup. With this, certain functionalities would be limited. To name few: As we are all humans, your employees would do mistakes from time to time and you would be the one that would supervise and take care to “fix” their mistakes. In the regular case, your employees would let you a reservation comment, so you can take care for it. With the business growth, you may end up having 20, 30, 100+ reservations per day and it may become difficult and time consuming to check the comments one by one. However, if your staff add a comment and add a label to the reservation, you would be able to take care significantly faster. We are sure you would be able to think of more usage cases and we are eager to hear them. How to create Tags 3. Select your location, Give a Title that is relevant and select a color and Save Adding A Tag to an existing Reservation

Experience Types Add-On – Work Hours – By Game

The purpose of this Rule is to allow your arcade to act more like a traditional arcade where someone pays to play a game until a certain criteria is reached. For example, they play until they “die”, or play just a single round. Once the criteria is reached (set within the Game Categories section explained here), the session ends.  Then click on the “Add/Edit Operation Settings” button under your experiences: To remove a line item in this section, click on the red “x” to the right of it.

Rewards Points Add-On

The module represents a multi-purposed powerful marketing tool. As such, it may seems complex at first, but provides an endless flexibility. This document dives into explanation of different usage cases. Web Administration Upon subscription, the following settings are unlocked in the SynthesisVR Web Administration interface: Administration >> [click on your arcade name] >> Advanced >> Point System DefinitionYou are able to define as many point systems as you need and use different exchange rates. Combined with the ability to define different Membership Plans, your customers will be able to collect points of a different value.Administration >> Business Setup (tab) >> Operational Settings >> Three lines button >> [Edit] >> Advanced (tab) >> Allowed Payment Methods Through the Experience Types settings, you are able to define a global payment behavior for the given attraction. Administration >> Business Setup >> Extras (tab) >> Goods >> Add/Edit a “Good” option > Advanced o Allowed Payment Methods – have the same purpose as the “Experience Types” setting and applies for the specific item you are editingo Add Points to Customer – the system will add the specified points to the customer account.o Widget Cover Image – Specify a full URL to an image for the widget shown on the websiteo Quantity Limit – When this item is part of a booking, multiply the amount by the number of stations. o Short Web Description – The description for this widgeto Add Balance to Customer – If you want to add balance to your customer, do it from hereAdministration >> Extras >>  Cards >> [Edit] a card mode >> Points CollectionNote: Detail explanation on the Membership Cards can be found hereBased on the experience type and day of the week, the system will automatically add points to the selected Point System. The points quantity will be based on the specified method: Minute – the points quantity will be multiplied by the minutes in the given session Session / Per Station – the points will be multiplied by the number of stations Session / All Stations – the customer will receive the specified amount of points Аdd / take points from the account Locate the customer account through the “Customers” page or by clicking on the customer name on the “Your Arcade” page or by using an NFC card or QR code.You are able to add / take points from the account. In the case of taking points, make sure you are entering a positive value and the minus option is selected: How to use the points in the Web Administration 1. Paying for VR SessionsUpon starting a Walk-in Session or paying for an existing session, the points will be multiplied by the exchange rate and displayed as a payment option. The point payments can be combined with standard Cash, Balance, Credit-Card or other payment of default options:If you don’t want to be able to pay with points for a specific type of VR attraction, all you have to do is to edit the specific Experience Type settings and make sure only the “Default” set of payments are allowed.The opposite behavior can be setup as well.2. Paying for Goods: Usage cases Similarly to the VR sessions, you can combine different experience types and limit the allowed payment methods.One step further, you can use the Good’s “Add Points to Customer” as an alternative exchange rate. You are allowed to pay for an item from the customer’s points and, as result of the purchase, give the same customer another type of points.Example Use Cases Run a reward program and allow your loyal customers to have free sessions. Have an experience type that is not for sale to your first time visitors. Add games that are not available with your standard offering and make the experience type being available only in exchange of points. This is a good way to promote upcoming games and collect reactions. Have branded T-Shirts or other promo materials that cost $50, but they can get them free if they have enough points. Diversify what can be booked online and only on site. Use the points as a reward in tournaments. Use the points as a reason to collect customer data (email, phone number, etc.).How to make most of the points systemYou have 24×7 control of the value of your reward points.Use two different point systems with a different exchange rate. In the common case, your customers wouldn’t have an idea about the actual value of one point, each time they’re spending money.1. Brand your membership programs2. Build a community3. Encourage your customers to use points and to sign up for a membership program4. Put your offers front and center – the more visibility the better5. Keep It Simple, Stupid – don’t dive into too many conditions6. Communicate the benefits clearly7. Advertise the points as the best value of this type of experience8. Have limited time options and add urgency at every step. Add a count down on your website9. Advertise your offers on your social channels10. Use membership tiers11. Let your customers sell for you12. Encourage social media sharing and tagging by providing points in exchange

Experience Types Add-On – Custom VR Session Types

Introduction “Experience Add-On” is a purchasable add-on for Synthesis VR Essential Access . Modules & Add-Ons are purchasable features that increase the functionality and capability of the Synthesis VR platform. The “Experience Add-On” allows you to create and manage custom VR Session Types.. Additional Notes: 14. The minimum number of stations that can be booked for the particular experience can be defined using Minimum number of stations in a session. 15. The maximum number of stations that can be booked for the particular experience can be defined using Maximum number of stations in a session. 16. Difference in minutes on the calendar allows you to decide the time difference in between the booking slots. 17. If this Experience Type is for all stations, then choose “Yes” from the “Complete Stations Booking” drop down menu. This will be most useful for walk in sessions for a full venue and will save a few steps. This would also be good for online bookings for full venue reservations. If this is for individual stations or anything less than the full venue booking, then choose “No” from the drop down menu. 18. Once you’ve entered in all the necessary (and optional) sections, you will see that the “Save” button is now solid and clickable. Click that to save, otherwise your edits will be lost. If you want to exit and start over click the tiny “x” button in the top right of the window or click the “Hide” button at the bottom of the window.

Game Categories – Organize Your Content

Synthesis VR game categories allow you to choose which games are available for customers to choose from. They also can act as filters as you will see below. By default SynthesisVR will include all downloaded games as available game options during sessions. Once a game category is setup and assigned, only those games will be available. To create a game category navigate to Administration>> Business Setup >> Games, Categories, Licenses. Followed by clicking on the Categories tab: To create a new category, click on the large New Category button. This will bring up a new game category window. To add games to the Game Category, you can either double click on the games displayed in the left column or drag them from the left column to the right space. Note that the list on the left can be searched using the search field at the top (and additionally, this list only displays games discovered to be installed on your stations). If you are building a Game Category of all your games, you can simply click on the “Assign all your installed games”: To organize the order your games displayed in you simply need to click and drag the games within the right hand list. Alternatively, if you want them in alphabetical order you can click on the “Sort Alphabetically” button. Once done, click on the Save button at the bottom. At this time, you have only created a game category and it is not connected to anything else. To have it shown to customers, you need to assign the Game Category to one or more of your Work Rules. You can refer to this article for Work Rules within Operation Settings: https://synthesisvr.com/knowledge-base/work-rules-by-duration/ Note that you can also reach the Work Rule by clicking on it where it shows it is Assigned in the Categories section: When you are in the Work Rule, head to the Games tab and simply click on the Assign Game Categories + button to add more Game Categories or click on the red x to remove game Categories. Using the drop down on each Game Category allows you to choose which one will show. Note that the order the Game Categories show in this section is the order they will display for the customer in the headset. Enforced vs Optional If you create an Available Games – Enforced Game Category, then when you assign the Game Category will show in every session that the Game Category is assigned to. If you create a Restricted Access – Enforced Game Category, then when you assign this Game Category to a Work Rule, all games in this Game Category will be hidden in any other Game Categories are assigned to that Work Rule. This is most helpful if you want to create different Work Rules with the same Game Categories as your other Work Rules, but don’t want to go through and create different Game Categories to remove individual games and you can just add this Restricted Game Category to the Work Rule. If you create an Available Games – Optional Game Category and assign it to a Work Rule, than you are able, on a station by station basis, decide to include that category or not in the session. Note that at the start of a session, the Available Games – Optional categories will be selected by default and must be UNCHECKED to have them not show. If you create a Restricted Access – Optional Game Category and assign it to a Work Rule then you are able, again on a station by station basis, decide to essentially hide the games in this Game Category from a specific station. Note that at the start of a session, the Restricted Access – Optional categories will be unselected by default and must be CHECKED to hide games in this category. In the below image, the “Easy” Game Category is set to Available Games – Optional and the Medium is set to Restricted Access – Optional. Again, each station can have different options chosen at the start of a session. You can also assign games directly from the game itself. From the Your Games tab in the Games, Categories, Licenses section click on any game and go to the Categories tab: From there you can Enable or Disable a Game Category that a game is assigned to. Once finished, click on the Save button at the bottom. Note that a Game Category must have at least one game assigned to it prior to using this method. You can use the drop down number on the right of an Enabled Game Category to assign where in the list the game should show up.

Reading Leaderboard Through API

 To programatically read the leaderboard data collected by SynthesisVR, please follow the steps: 1. Login into SynthesisVR with your administrator account and navigate to:  2. Head to the API & Webhooks tab and click on the + button on the top right:  Make sure the leaderboard permission is assigned.If the “Strict Access” option is enabled, you will be able to access the collected data ONLY from an IP address associated with your location. 3. Prepare the following URL: Example: Upon refreshing the Widgets page, you’ll be able to locate your API key: Game ID — keep it to 0 (zero) if you want to fetch information about all the collected games. Based on that response, you’ll be able to see and use specific game idsDuration — any combination of <number> + <period>. Examples: The API response data is formatted as JSON and have the following structure: The “score” object itself contains:info = raw data extracted from the game (differ between the games)score = SVR attempt to recognize and extract the score from the info objectcustomer = the customer associated with the SynthesisVR session. In a multi-station session, the data don’t necessary correlate with the actual player.utcepoch = the UTC epoch when the leaderboard record is logged (you can look up the exact date/time in any programming language ; online example: https://www.epochconverter.com/)