Alexa запускает намерение AudioPlayer.PlaybackStopped через 4 секунды после намерения AudioPlayer.PlaybackStarted - PullRequest
1 голос
/ 13 марта 2019

Контекст:

Работая с ruby ​​sinatra, ralyxa gem и ngrok, чтобы установить локальную точку в качестве конечной точки, я не могу выяснить, почему Alexa запускает это событие «самостоятельно»

Намерениезаписывается следующим образом:

current_https_host = 'https://0eaf626d.ngrok.io'
default_token = '1234AAAABBBBCCCCCDDDDEEEEEFFFF'
short_mp3 = 'count_1_to_15.mp3'
start_offset = 0

intent 'son_du_jour' do
  token = request.user_access_token || default_token
  audio_player.play(
    "#{current_https_host}/#{short_mp3}",
    token,
    offset_in_milliseconds: start_offset
  ).to_json
end

Журналы сервера sinatra показывают некоторое прерывание с двухтональным сигналом от Алекса, строка 11 следующего

Журналы

54.240.197.2 - - [13/Mar/2019:15:47:07 +0100] "POST / HTTP/1.1" 200 232 0.4098
54.240.197.106 - - [13/Mar/2019:15:47:14 +0100] "POST / HTTP/1.1" 200 297 0.0027
78.193.235.11 - - [13/Mar/2019:15:47:14 +0100] "HEAD /1_a_15.mp3 HTTP/1.1" 200 326765 0.0013
78.193.235.11 - - [13/Mar/2019:15:47:15 +0100] "GET /1_a_15.mp3 HTTP/1.1" 200 326765 0.0035
D, [2019-03-13T15:47:16.574979 #19349] DEBUG -- : Playback starts here ...
D, [2019-03-13T15:47:16.575122 #19349] DEBUG -- : offsetInMilliseconds : 0
54.240.197.35 - - [13/Mar/2019:15:47:16 +0100] "POST / HTTP/1.1" 200 54 0.0039
D, [2019-03-13T15:47:16.994625 #19349] DEBUG -- : Time to add up another playback from the list
54.240.197.106 - - [13/Mar/2019:15:47:16 +0100] "POST / HTTP/1.1" 200 54 0.0034
54.240.197.35 - - [13/Mar/2019:15:47:20 +0100] "POST / HTTP/1.1" 200 107 0.0027
==> D, [2019-03-13T15:47:20.937185 #19349] DEBUG -- : PlaybackStopped: interruption with a bi-tone
D, [2019-03-13T15:47:20.937364 #19349] DEBUG -- : offsetInMilliseconds : 4096
54.240.197.73 - - [13/Mar/2019:15:47:20 +0100] "POST / HTTP/1.1" 200 54 0.0035
D, [2019-03-13T15:47:22.059574 #19349] DEBUG -- : Playback starts here ...
D, [2019-03-13T15:47:22.059684 #19349] DEBUG -- : offsetInMilliseconds : 4096
54.240.197.75 - - [13/Mar/2019:15:47:22 +0100] "POST / HTTP/1.1" 200 54 0.0038
D, [2019-03-13T15:47:22.698245 #19349] DEBUG -- : Time to add up another playback from the list
54.240.197.105 - - [13/Mar/2019:15:47:22 +0100] "POST / HTTP/1.1" 200 54 0.0031
D, [2019-03-13T15:47:29.513338 #19349] DEBUG -- : PlaybackFinished intent fired
54.240.197.75 - - [13/Mar/2019:15:47:29 +0100] "POST / HTTP/1.1" 200 97 0.0048

В то время как amazon намерения выглядят так:

require 'byebug'
require 'logger'

logger = Logger.new STDOUT
empty_response = {
  version: '1.0',
  response: {
    shouldEndSession: true
  }
}.to_json

intent 'LaunchRequest' do
  message = "<audio src='soundbank://soundlibrary/home/amzn_sfx_door_open_01'/>Bonjour! Que voulez-vous écouter ?"
  intonation_message = "<speak>#{message}</speak>"
  ask(intonation_message, ssml: true).to_json
end

intent 'AMAZON.StopIntent' do
  tell('Bye Bye !')
end

intent 'AudioPlayer.PlaybackStarted' do
  logger.debug('Playback starts here ...')
  logger.debug(
    'offsetInMilliseconds : ' \
    "#{request.request['request']['offsetInMilliseconds']}"
  )
  empty_response
end

intent 'AudioPlayer.PlaybackStopped' do
  logger.debug('PlaybackStopped: interruption with a bi-tone')
  logger.debug(
    'offsetInMilliseconds : ' \
    "#{request.request['request']['offsetInMilliseconds']}"
  )
  empty_response
end

intent 'AudioPlayer.PlaybackNearlyFinished' do
  logger.debug('Time to add up another playback from the list')
  empty_response
end

intent 'AudioPlayer.PlaybackFinished' do
  error_count = 0
  logger.debug('PlaybackFinished intent fired')
  (JSON.parse audio_player.stop).tap do |response|
    response['response']['shouldEndSession'] = true
  end.to_json
end

intent 'System.ExceptionEncountered' do
  failure_details = request.request['request']
  error_details = failure_details['error']
  logger.debug("Error timestamp : #{failure_details['timestamp']}")
  logger.error('Error details (message) : ' \
               "##{error_count} - #{error_details['message']}")
end

Прерывание не приводит к началу чтения файла mp3, оно просто подает звуковой сигнал (двухтональный), а затем приостанавливает и возобновляет чтение потока самостоятельно.,Интересно, является ли предыдущая реакция намерением фактической причиной этого прерывания воспроизведения.Любая идея будет полезна.

...