handleFastForward and handleRewind never triggered

App Name: ABCNews
App Link on Amazon Appstore (found through Developer Console > Actions column in App List > View on Amazon.com): Your App Link [e.g., Netflix - App on Amazon Appstore ]
SDK Version: v0.23.9221
React Native Version: RN0.72

We’re implementing media controls using `@amazon-devices/kepler-media-controls`. We’ve registered handlers for `handleFastForward` and `handleRewind`, but voice commands never invoke them — everything routes to `handleSkipForward`/`handleSkipBackward` with correct time offset when input, or the default one when not.
**Question:** Under what conditions do `handleFastForward` and `handleRewind` actually get called? Is there a voice utterance?

Setup
We register all handlers via `MediaControlServerComponentAsync.getOrMakeServer()` and declare both `Action.FAST_FORWARD` and `Action.REWIND` in our capabilities:

                                                                                                       capabilities: {                                                                                                          
     actions: [                                                                                                           
         Action.PLAY,                                                                                                     
         Action.PAUSE,                                                                                                    
         Action.STOP,                                                                                                     
         Action.SKIP_FORWARD,                                                                                             
         Action.SKIP_BACKWARD,                                                                                           
         Action.FAST_FORWARD,                                                                                             
         Action.REWIND,                                                                                                   
         Action.START_OVER,                                                                                               
         Action.NEXT,                                                                                                     
         Action.PREVIOUS,                                                                                                 
     ],                                                                                                                   
     speeds: [1.0],                                                                                                       
     forwardSkipSteps: [toTimeValue(10)],                                                                                 
     backwardSkipSteps: [toTimeValue(10)],
     attribute_options: [],
     features: ["AdvancedSeek", "VariableSpeed"],                                                                                
}   

Our “handleFastForward/handleRewind” points to a different method than “handleSkipForward/handleSkipBackward”

We captured both the native KCP (Kepler Cluster Protocol) layer and JS handler output simultaneously.
We tested the following voice commands and had the following results.

Logs output example for “Fast Forward” voice command:
“Fast Forward” (20:27:36–20:27:40)"
Aug 21 20:27:36.257056 firestick-0a8545baa0414137 local0.info lcm_service[890]: 1423 ITimeoutMgr:StateMachine::handleEventExecutionTask - StateMachine ALEXA_SPEECH_START
Aug 21 20:27:39.611630 firestick-0a8545baa0414137 local0.info lcm_service[890]: 1423 ITimeoutMgr:StateMachine::handleEventExecutionTask - StateMachine ALEXA_SPEECH_START
Aug 21 20:27:39.802766 firestick-0a8545baa0414137 local0.info com.abclocal.kabc.tv.amazon:pkg[24951]: 2576324361 INFO com.amazon.kcp.provider: KCP flow complete - Provider-Side Invoke - tx: 43980 - Invoking provider invoke callback - (endpoint: 134 - cluster: 1286 - command: 0x8)
Aug 21 20:27:39.803219 firestick-0a8545baa0414137 local0.info com.abclocal.kabc.tv.amazon:pkg[24951]: 2576324361 INFO com.amazon.kepler.media.control: [MediaPlaybackCluster.cpp:540] command id: 8
Aug 21 20:27:39.803351 firestick-0a8545baa0414137 local0.warning com.abclocal.kabc.tv.amazon:pkg[24951]: 3449343573
WARNING com.amazon.keplerscript: [KeplerScript-JavaScript] '[VegaMediaControl] DEBUG Skip forward command received:',
30 Aug 21 20:27:40.020508 firestick-0a8545baa0414137 local0.info com.abclocal.kabc.tv.amazon:pkg[24951]: 2576324361 INFO com.amazon.kcp.provider: KCP flow begin - Provider-Side Respond - tx: 43980 - Received response from provider - (endpoint: 134 - cluster: 1286 - command: 0x8)
Aug 21 20:27:40.362946 firestick-0a8545baa0414137 local0.info lcm_service[890]: 1423 ITimeoutMgr:StateMachine::handleEventExecutionTask - StateMachine ALEXA_SPEECH_STOP

This is a sequence of commands we introduce and the output:
Time | Voice Command | KCP Command | Command ID | JS Handler Fired | Value

20:27:32 | “fast forward” | 0x8 | 8 | Skip forward | 10s
20:27:39 | “forward 30 seconds” | 0x8 | 8 | Skip forward | 30s
20:27:45 | “forward” | 0x5 | 5 | Next | —
20:27:59 | “fast forward” | 0x8 | 8 | Skip forward | 10s

Hi @Adrian_Lafontaine_Globant

Thanks for the detailed logs - the simultaneous KCP + JS capture makes the root cause clear.

On Fire TV there is currently no voice utterance that maps to handleFastForward/handleRewind. Alexa routes all spoken forward/back seeking as SkipForward/SkipBackward (KCP command 0x8/0x9), which is exactly what your logs show - so handleSkipForward fires with the offset and handleFastForward never does. Your handler registration is correct; this is the platform’s utterance-to-command mapping.

How the routing works:
Rewind - KCP/Matter cmd ID 0x6 → invokes handleRewind
FastForward - KCP/Matter cmd ID 0x7 → invokes handleFastForward
SkipForward - KCP/Matter cmd ID 0x8 → invokes handleSkipForward(delta)
SkipBackward - KCP/Matter cmd ID 0x9 → invokes handleSkipBackward(delta)

When do handleFastForward/handleRewind actually get called?
They fire only when the platform sends the FastForward (0x7) / Rewind (0x6) cluster commands - i.e., trick-play / variable-speed control, not time-offset seeking. In practice that’s the remote’s FF/RW (trick-play) controls routed through KCP, and cast/companion-app FF-RW controls. These carry variable-speed semantics (the reference implementation steps playback speed 1x → 2x → 3x…), which is why they require the “VariableSpeed” feature. They are not fixed-offset seeks.

By design, Alexa treats spoken “fast forward” / “rewind [N seconds]” as skip (offset seek), so with voice you’ll generally always land in the Skip handlers. That’s expected behavior.

If your goal is for spoken “fast forward” to do a speed-multiplier trick-play instead of a skip: that isn’t selectable from the utterance today - the utterance→command mapping is owned by Alexa, not the app, so it can’t be changed via handler registration. We’re checking that with the internal team to confirm intended behavior and track it, and I’ll follow up here.

Reference : handler list + VariableSpeed feature gate

Warm Regards,
Ivy