Twillio позволяет слушателю нажать *, чтобы попросить говорить во время конференции - PullRequest
0 голосов
/ 31 марта 2019

Я бы хотел, чтобы слушатель нажал кнопку *, чтобы попросить включить звук во время конференц-связи, чтобы модератор мог включить его / ее с консоли.

У меня есть контроллер со следующим:

def conference_connect
    @room_name = flash[:room_name]
    @room_id = flash[:event_id]
case params['Digits']
      when "1" # listener
        @muted = "true"
      when "3" # moderator
        @moderator = "true"
    end

    response = Twilio::TwiML::VoiceResponse.new
    response.say(voice: 'alice', language: 'en-US', message: 'You are in, press * at anytime to ask a question')
    dial = Twilio::TwiML::Dial.new(hangupOnStar: true)
    dial.conference(@room_name,
                    wait_url: "http://twimlets.com/holdmusic?xxxxxxx&",
                    muted: @muted || "false",
                    start_conference_on_enter: @moderator || "false",
                    end_conference_on_exit: @moderator || "false",
                    )

    gather = Twilio::TwiML::Gather.new(action: '/redirectIntoConference?name= ' + @room_name, digits: 1)


    response.append(dial)
  end

У меня следующая ошибка:

No template found for TwilioController#conference_connect, rendering head :no_content

Я хотел бы отправить сообщение модератору (илиобновить некоторые параметры), чтобы уведомить его о том, что у слушателя есть вопрос.

1 Ответ

1 голос
/ 01 апреля 2019

Разработчик Twilio здесь.

У вас есть пара вопросов здесь.Во-первых, ваша ошибка в том, что вы не возвращаете TwiML, который вы встроили в действие контроллера, а Rails ищет шаблон.

В конце действия вызова вызовите render, например:

  response.append(dial)
  render xml: response.to_xml
end

Что касается запроса на *, то вы на полпути.Во-первых, <Gather> не поможет вам, поэтому избавьтесь от строки:

gather = Twilio::TwiML::Gather.new(action: '/redirectIntoConference?name= ' + @room_name, digits: 1)

Вместо этого вы установили hangupOnStar в true в вашем <Dial>, это отключит пользователя отконференции (которая звучит плохо, но это то, что вы хотите для этого).Вам просто нужно настроить, что происходит с пользователем после зависания.

В этом случае вы хотите отправить запрос модератору, а затем снова присоединиться к конференции.Это делается с помощью action параметра на <Dial>, который указывает на URL-адрес, который будет запрошен, когда вызывающий абонент покинет конференцию.

В этом действии необходимо каким-то образом оповещатьваш модератор (я не уверен, как вы планируете это), а затем верните TwiML, чтобы ввести абонента обратно в конференцию.Не забудьте настроить конференцию таким же образом, с hangupOnStar и action.

В конечном итоге ваше действие должно выглядеть примерно так:

def conference_connect
  @room_name = flash[:room_name]
  @room_id = flash[:event_id]
  case params['Digits']
  when "1" # listener
    @muted = "true"
  when "3" # moderator
    @moderator = "true"
  end

  response = Twilio::TwiML::VoiceResponse.new
  response.say(voice: 'alice', language: 'en-US', message: 'You are in, press * at anytime to ask a question')
  dial = Twilio::TwiML::Dial.new(hangupOnStar: true, action: '/redirectIntoConference?name= ' + @room_name)
  dial.conference(@room_name,
                  wait_url: "http://twimlets.com/holdmusic?xxxxxxx&",
                  muted: @muted || "false",
                  start_conference_on_enter: @moderator || "false",
                  end_conference_on_exit: @moderator || "false",
                  )    
  response.append(dial)
  render xml: response.to_xml
end

Пустья знаю, помогает ли это вообще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...