def METHOD_NAME(
    self, request, handler_name, app_name=None, external_only=True, **kwargs
):
    """
    Calls handler if it is not internal and if it exists for the app.
    Args:
        request (HttpRequest): The request object passed by the http call.
        handler_name (str): The name of the HandoffHandler object to handle the handoff. Must not be internal.
        app_name (str, optional): The name of another app where the handler should exist. Defaults to None in which case the current app will attempt to handle the handoff.
        **kwargs: Key-value pairs to be passed on to the handler.
    Returns:
        HttpResponse object.
    """  # noqa: E501
    error = {
        "message": "",
        "code": 400,
        "status": "error",
        "app_name": app_name or self.app.name,
        "handler_name": handler_name,
    }
    manager = self._get_handoff_manager_for_app(app_name)
    if manager:
        handler = manager.get_handler(handler_name)
        if not handler.internal:
            try:
                urlish = handler(request, **kwargs)
                return redirect(urlish)
            except TypeError as e:
                error["message"] = "HTTP 400 Bad Request: {0}. ".format(str(e))
                return HttpResponseBadRequest(
                    json.dumps(error), content_type="application/javascript"
                )
    error[
        "message"
    ] = "HTTP 400 Bad Request: No handoff handler '{0}' for app '{1}' found.".format(
        manager.app.name, handler_name
    )
    return HttpResponseBadRequest(
        json.dumps(error), content_type="application/javascript"
    )