Ошибка получения HTTP при создании аудиочата с использованием Twilio
Я использую Twilio Programmable Voice API для создания аудиочата, когда пользователь заполняет форму регистрации.
Я использую ngrok для прослушивания как моего приложения React frontend, так и приложения Django backend, чтобы я мог выставить свой локальный сервер в интернет.
Однако, когда я заполняю форму, я получаю запрос на активацию микрофона, а затем слышу ошибку Sorry, an application error has occurred, goodbye, после чего мой звонок обрывается. Мой журнал ошибок Twilio показывает ошибку:
Error - 11200
An attempt to retrieve content from https://f5b7-104-182-176-156.ngrok.io/voice_chat/rooms/Emmanuel returned the HTTP status code 404
HTTP retrieval failure
Possible Causes
Web server returned a 4xx or 5xx HTTP response to Twilio
Misconfigured Web Server
Network disruptions between Twilio and your web server
No Content-Type header attached to response
Content-Type doesn't match actual content, e.g. an MP3 file that is being served with Content-Type: audio/x-wav, instead of Content-Type: audio/mpeg
Когда я делаю GET на конечной точке, которая должна показать мне все мои комнаты http://127.0.0.1:8000/voice_chat/rooms, я получаю пустой список, указывающий на то, что ни одна комната не была создана?
Вот мой код React:
...
const NewRoom = () => {
const [state, setState] = useGlobalState();
const history = useHistory();
const updateRoomName = (createdRoomTopic) => {
setState({...state, createdRoomTopic});
};
const createRoomHandler = () => {
const userData = {'roomName': state.nickname, 'participantLabel': state.createdRoomTopic}
console.log('Inside create room handler', userData.roomName, userData.participantLabel)
axios.post('http://127.0.0.1:8000/voice_chat/rooms/', userData )
.then(res => {
console.log('axios call has been hit', res.data)
})
}
const handleRoomCreate = () => {
const selectedRoom = {
room_name: state.createdRoomTopic, participants: []
};
const rooms = state.rooms;
const roomId = rooms.push(selectedRoom);
setState({...state, rooms });
setState({...state, selectedRoom});
createRoomHandler()
history.push(`/rooms/${roomId}`);
};
return (
<div>
<input
placeholder="Enter room topic..."
onChange={ e => updateRoomName(e.target.value)}
/>
<button onClick={handleRoomCreate}>
Start room</button>
</div>
);
};
my urls.py:
urlpatterns = [
path("rooms", RoomView.as_view(), name="room_list"),
path("token/<username>", TokenView.as_view(), name="rooms"),
]
и мой RoomView:
@method_decorator(csrf_exempt, name="dispatch")
class RoomView(View):
def get(self, request, *args, **kwargs):
rooms = client.conferences.stream(
status="in-progress"
)
rooms_reps = [
{
"room_name": conference.friendly_name,
"sid": conference.sid,
"participants": [
p.label for p in conference.participants.list()
],
"status": conference.status,
} for conference in rooms]
return JsonResponse({"rooms": rooms_reps})
def post(self, request, *args, **kwargs):
room_name = request.POST.get("roomName", "default")
participant_label = request.POST.get("participantLabel","default")
response = VoiceResponse()
dial = Dial()
dial.conference(
name=room_name,
participant_label=participant_label,
start_conference_on_enter=True,
)
print(dial)
response.append(dial)
return HttpResponse(response.to_xml(), content_type="text/xml")
Буду благодарен за любую помощь