我目前正在使用 Spring Boot 开发服务器端应用程序,我创建了一个端点作为 Twilio 状态回调 URL,如下所示
@PostMapping
public ResponseEntity<Response> callback(@RequestParam("RoomName") String RoomName,
@RequestParam("ParticipantIdentity") String ParticipantIdentity,
@RequestParam("StatusCallbackEvent") String StatusCallbackEvent,
@RequestParam("AccountSid") String AccountSid,
@RequestParam("RoomSid") String RoomSid,
@RequestParam("RoomStatus") String RoomStatus,
@RequestParam("RoomType") String RoomType,
@RequestParam("Timestamp") String Timestamp,
@RequestParam("ParticipantStatus") String ParticipantStatus,
@RequestParam("ParticipantSid") String ParticipantSid,
@RequestParam("ParticipantDuration") int ParticipantDuration,
@RequestParam("RoomDuration") int RoomDuration,
@RequestParam("SequenceNumber") String SequenceNumber,
@RequestParam("ParticipantTrackSidStatus") String ParticipantTrackSidStatus,
@RequestParam("TrackKind") String TrackKind) {
log.info("Handling twilio callback ...");
String roomName = RoomName;
int userId = Integer.parseInt(ParticipantIdentity);
User user = userService.getUserById(userId);
int familyId = Integer.parseInt(roomName.split("_")[1]);
Family family = familyService.findById(familyId);
Helper helper = Helper.getInstance();
String langCode = helper.getLangCode(family);
if (StatusCallbackEvent.equals("participant-connected")) {
UserInCallRoom userInCallRoom = new UserInCallRoom(roomName, user);
userInCallRoomService.saveUserInCallRoom(userInCallRoom);
} else if (StatusCallbackEvent.equals("participant-disconnected")) {
userInCallRoomService.deleteUserFromRoom(roomName, userId);
} else if (StatusCallbackEvent.equals("room-ended")) {
ArrayList<Integer> userIds = userInCallRoomService.findAllUserIdInRoomCall(roomName);
List<User> users = userIds.stream().map(id -> userService.getUserById(id)).collect(Collectors.toList());
firebaseMessageHelper.notifyUsers(
users,
helper.getMessageInLanguage("videoCallHasEndedTitle", langCode),
String.format(helper.getMessageInLanguage("videoCallHasEndedBody", langCode)),
new HashMap<>() {{
put("navigate", "END_VIDEO_CALL");
put("id", roomName);
}}
);
}
return ResponseEntity.ok(new Response(null, new ArrayList<>()));
}
但我无法收到对此 URL 的任何请求。我已经检查了 Twilio 房间设置中的 HTTP 方法设置。我缺少什么?我这里有什么误解吗?
还有一件事是,呼叫室是使用 ad-hoc 而不是 Rest api 在客户端应用程序上创建的
请告诉我。感谢您宝贵的时间。
我发现我可以检查 Twilio 上的错误日志,以获取有关 Twilio 无法向我的端点请求的原因的更多信息,并发现 Twilio 没有传入某些参数。
对于那些遇到类似问题的人。查看 Twilio 控制台上的监视器部分中的错误日志,您可能会找到所需的答案。