getActorType() !== Attendee::ACTOR_PHONES) { return null; } $response = $this->backendNotifier->dialOutToAttendee($room, $attendee, $callerNumber); if ($response === null) { $this->logger->error('Received no response from signaling server on dialout request'); return null; } try { return $this->validateDialOutResponse($response); } catch (\InvalidArgumentException $e) { $this->logger->error($e->getMessage(), ['exception' => $e]); return null; } } /** * @param string $response * @return Response * @throws \InvalidArgumentException */ protected function validateDialOutResponse(string $response): Response { try { $dialOutResponse = (new MapperBuilder()) ->mapper() ->map( Response::class, Source::json($response) ->map([ 'dialout' => 'dialOut', 'dialout.callid' => 'callId', ]) ); } catch (MappingError $e) { throw new \InvalidArgumentException('Not a valid dial-out response', 0, $e); } if ($dialOutResponse->dialOut === null) { throw new \InvalidArgumentException('Not a valid dial-out response', 1); } return $dialOutResponse; } }