Introduction
The documentation below gives you an overview of how to connect
interactive haptic devices to FeelTechnology services and how to
integrate the
@feelrobotics/feel-apps-api
JavaScript library into your web application.
In the interest of simplicity, FeelTechnology will be referred
to as FeelTech.
Compatible interactive devices
New devices are constantly being added to the FeelTech platform. When a new device is added, it is automatically available to all integrations without any changes on your side.
Services
FeelTechnology offers two integration modes through the @feelrobotics/feel-apps-api library:
- Full mode: haptic subtitle playback synchronized with video content, combined with real-time device control
- Slider mode: real-time device control only, without subtitle/video synchronization
Both modes communicate with interactive devices through the user's FeelConnect mobile app over the Feel Exchange Center (FEC), a real-time Socket.IO server managed by FeelTech.
Connecting an Interactive Device to the FeelConnect App
Before any API integration can control a device, the device must be paired with the FeelConnect mobile app via Bluetooth.
-
Download and install the FeelConnect
from
AppStore
or
Google Play Store
- Turn on Bluetooth on the mobile phone
- Turn on the interactive device (it starts in Bluetooth mode automatically)
- Open the FeelConnect app
- Tap the + button in the top of the screen
- Tap Device, then Search for device
- Select the device from the list and tap Connect
Connecting the FeelConnect App to Your Website
Once a device is paired, the user connects the FeelConnect app to your website by scanning a QR code. This establishes a real-time session between the app and the Feel Exchange Center (FEC), enabling your page to send haptic commands to the device.
- Open the interactive site you want to connect to, or the Demo page
- Open the FeelConnect App, then press the Sync tab
- Tap the Scan button in the top right corner and then tap Website
- Scan the QR code displayed on the page
For Webcam
Connecting Devices to the Interactive Tipping Functionality
- Connect a device to the FeelConnect App using the instructions above
-
Follow the link
here
to the test API for tipping
-
Click the "Get QR code" button
- Scan the QR code with the FeelConnect App (follow the instructions mentioned above in the Connecting to Your Website section)
- Click the "Get User Status" button to get information on connection status and which toys are connected
- Click the "Send the Tip" button and the device that is connected will react according to the parameters set
- Please find additional detailed information here
Connecting Two People in an Interactive Room
- Download the FeelConnect App on two different mobile phones (one for the customer and one for the webcam performer)
- Follow the instructions on how to connect the interactive devices to the FeelConnect App for both devices
- Follow the instructions to connect to the desktop application for both devices
-
Open the
test API for tipping
twice as shown below. Please make sure that the User ID at the top
of the page is different for each user
-
Enter the same Unique Room ID for both users and select
"Add User to the Room". Set each user's role:
- control = write (the user controls the other's device)
- be controlled = read (the user's device is controlled)
In a one-to-one session, you can enable both read and write for both users so they can control each other.
- After adding both users, you can control each other's devices
- To remove either user from the room, select the room ID used to set up the connection and click "Kick user out of room"
- Note: A user cannot be added to more than one room at the same time. If the user has already joined another room, this call will return an error.
Please find more detailed information on the Room API here.
Connecting to Interactive 2D Video Content on Desktop
- Download the FeelConnect app from AppStore or Google Play Store
- Follow the connecting device to app instructions above
- Go to the example interactive video site here
- Follow the instructions to connect the app to the website
-
On your site, initialize in Full mode and wire up
the video element:
import { init, subs } from '@feelrobotics/feel-apps-api' await init(feelSubsToken, fecToken, userId, roomName) // Load haptic subtitle data for the video await subs.load(videoId, subtitlesId, externalUserId) // Wire up the HTML5 video element video.addEventListener('play', () => subs.play(video.currentTime)) video.addEventListener('timeupdate', () => subs.timeupdate(video.currentTime)) video.addEventListener('pause', () => subs.stop()) video.addEventListener('ended', () => subs.stop()) - After pressing play, the interactive devices will react in sync with the haptic events embedded in the video
Please find more information on how to get started
here.
To watch interactive content on mobile, please read the
"In Mobile browsers"
section.
API Reference
The library is available as the
@feelrobotics/feel-apps-api
npm package.
npm install @feelrobotics/feel-apps-api
Environments
Set the target environment at build time via the
FEEL_ENV variable:
| FEEL_ENV | Feel Apps API | Subtitles API | Feel Exchange Center (FEC) |
|---|---|---|---|
| prod | api.feel-app.com | api.pibds.com | fec.feelme.com |
To override endpoints at runtime before calling init:
import { setServers } from '@feelrobotics/feel-apps-api'
setServers({
apps: 'https://api.feel-app.com',
subs: 'https://api.pibds.com/api/v2',
})
Top-level functions
| Function | Description |
|---|---|
init(feelSubsToken, fecToken, userId, roomName)
|
Full mode: connects to FEC, starts device monitoring, and sets up haptic subtitle playback once a device connects. |
initSlider(fecToken, userId, roomName) |
Slider mode: real-time device control only, without subtitle synchronization. |
setServers({ apps, subs }) |
Override default API endpoints before calling
init.
|
destroy() |
Disconnect the socket and reset all internal state. |
subs module: subtitle / video sync
| Function | Description |
|---|---|
subs.load(videoId, subtitlesId, externalUserId?,
channel?)
|
Fetch haptic subtitle data for a video. Returns a Promise. |
subs.play(currentPosSec) |
Start playback from the given video position (in seconds). |
subs.timeupdate(currentPosSec) |
Update the current position. Call on every
timeupdate event. Handles seek detection
automatically.
|
subs.stop() |
Stop playback and reset the device to neutral. |
subs.onSubtitleEvent(callback) |
Subscribe to haptic events. Callback receives
percentValue (0–100).
|
subs.offSubtitleEvent(callback) |
Unsubscribe from haptic events. |
apps module: device status & room data
| Function | Description |
|---|---|
apps.status.subscribe(callback) |
Listen for device connection changes. Callback receives
{ online, devices }.
|
apps.data.subscribe(callback) |
Listen for haptic position messages from peer devices.
Callback receives (percent, deviceName).
|
apps.data.unsubscribe(callback) |
Remove a previously registered data callback. |
Additional Information
If your developers need any help, please contact us at
info@feeltechnology.com.
The FeelTech Team ensures that current and future interactive
devices work with the technology. When a new device is released,
only the FeelConnect App needs to be updated. Your integration
remains unchanged.
The Feel Exchange Center (FEC) provides a real-time presence system:
your application is notified immediately when a user's FeelConnect
app comes online and when their device connects or disconnects. By
updating the user's experience in real time, this ensures the best
possible interaction for everyone involved.