public function fire(RequestInterface $request)
 {
     $request->attempts += 1;
     $request->last_attempt_at = $request->freshTimestamp();
     try {
         $httpRequest = new \GuzzleHttp\Psr7\Request($request->getMethod(), $request->getUrl(), ['Content-Type' => 'application/json'], json_encode($request->getBody()));
         $this->eventDispatcher->fire(new WebhookIsSending($request));
         $response = $this->send($httpRequest);
         $request->response_code = $response->getStatusCode();
         $this->requests->save($request);
         $this->eventDispatcher->fire(new WebhookWasSent($request, $response));
         return $response;
     } catch (\GuzzleHttp\Exception\RequestException $e) {
         $this->eventDispatcher->fire(new WebhookEncounteredGuzzleError($request, $e));
         if ($e->hasResponse()) {
             $response = $e->getResponse();
             $request->response_code = $response->getStatusCode();
         }
         $this->requests->save($request);
         throw $e;
     }
 }