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

#ruby-on-rails #twilio

#ruby-on-rails #twilio

Вопрос:

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

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

 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?xxxxxxxamp;",
                    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:

Евангелист-разработчик 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?xxxxxxxamp;",
                  muted: @muted || "false",
                  start_conference_on_enter: @moderator || "false",
                  end_conference_on_exit: @moderator || "false",
                  )    
  response.append(dial)
  render xml: response.to_xml
end
  

Дайте мне знать, если это вообще поможет.

Комментарии:

1. Привет, Филнаш, я только что попробовал, и я получаю ошибку приложения без какого-либо обновления в моей консоли. Я не знаю, какие параметры / строка завершились ошибкой.

2. Если вы получаете сообщение об ошибке приложения, то вы должны увидеть сообщение в отладчике Twilio: twilio.com/console/runtime/debugger

3. Ок, я вижу неверный формат URL (ошибка 11100). Я сохранил URL-адрес как «dial = Twilio:: TwiML::Dial.new(hangupOnStar: true, action: ‘/ redirectIntoConference?name = ‘ @room_name)», который, похоже, является неправильным URL. строка @room_name правильно отображается в инспекторе запросов, хотя

4. Могу я спросить, как должен выглядеть правильный URL (как пример), пожалуйста

5. Возможно, вам потребуется указать URL, исключающий название комнаты ( action: "/redirectIntoConference?name=#{CGI.escape(@room_name)}" ). Кроме того, я подумал, что TwiML подходит для относительного URL, но вы могли бы попробовать отправить и полный абсолютный URL.