Разработчик 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
Пустья знаю, помогает ли это вообще.