def METHOD_NAME(widget_id: Text, bot: Text, user: Text, filters=None, raise_err: bool = True):
    config = {}
    resp = None
    exception = None
    headers_eval_log = None
    request_body_eval_log = None
    try:
        config = CustomWidgets.objects(id=widget_id, bot=bot).get().to_mongo().to_dict()
        headers, headers_eval_log = CustomWidgetsProcessor.__prepare_request_parameters(bot, config.get("headers"))
        request_body, request_body_eval_log = CustomWidgetsProcessor.__prepare_request_body(config)
        request_body, request_body_eval_log = CustomWidgetsProcessor.__attach_filters(request_body, request_body_eval_log, filters)
        timeout = config.get("timeout", 1)
        resp = Utility.execute_http_request(config["request_method"], config["http_url"], request_body, headers, timeout)
        return resp, None
    except Exception as e:
        logger.exception(e)
        if isinstance(e, DoesNotExist):
            e = "Widget does not exists!"
        exception = str(e)
        if raise_err:
            raise AppException(e)
        return None, exception
    finally:
        log_attributes = {
            "request_method": config.get("request_method"), "http_url": config.get("http_url"), "response": resp,
            "headers": headers_eval_log, "exception": exception, "request_parameters": request_body_eval_log,
            "bot": bot, "requested_by": user, "name": config.get("name")
        }
        CustomWidgetsRequestLog(**log_attributes).save()