Use this method to specify a url and receive incoming updates via an outgoing webhook.
        Whenever there is an update for the bot, we will send an HTTPS POST request to the specified url,
        containing a JSON-serialized Update. In case of an unsuccessful request,
        we will give up after a reasonable amount of attempts.

        Source: https://core.telegram.org/bots/api#setwebhook

        :param url: HTTPS url to send updates to. Use an empty string to remove webhook integration
        :type url: :obj:`base.String`
        :param certificate: Upload your public key certificate so that the root certificate in use can be checked
        :type certificate: :obj:`typing.Union[base.InputFile, None]`
        :param max_connections: Maximum allowed number of simultaneous HTTPS connections to the webhook
            for update delivery, 1-100.
        :type max_connections: :obj:`typing.Union[base.Integer, None]`
        :param allowed_updates: List the types of updates you want your bot to receive
        :type allowed_updates: :obj:`typing.Union[typing.List[base.String], None]`
        :return: Returns true
        :rtype: :obj:`base.Boolean`

async def set_webhook(self, url: base.String,
                          certificate: typing.Union[base.InputFile, None] = None,
                          max_connections: typing.Union[base.Integer, None] = None,
                          allowed_updates: typing.Union[typing.List[base.String], None] = None) -> base.Boolean:
        """
        Use this method to specify a url and receive incoming updates via an outgoing webhook.
        Whenever there is an update for the bot, we will send an HTTPS POST request to the specified url,
        containing a JSON-serialized Update. In case of an unsuccessful request,
        we will give up after a reasonable amount of attempts.

        Source: https://core.telegram.org/bots/api#setwebhook

        :param url: HTTPS url to send updates to. Use an empty string to remove webhook integration
        :type url: :obj:`base.String`
        :param certificate: Upload your public key certificate so that the root certificate in use can be checked
        :type certificate: :obj:`typing.Union[base.InputFile, None]`
        :param max_connections: Maximum allowed number of simultaneous HTTPS connections to the webhook
            for update delivery, 1-100.
        :type max_connections: :obj:`typing.Union[base.Integer, None]`
        :param allowed_updates: List the types of updates you want your bot to receive
        :type allowed_updates: :obj:`typing.Union[typing.List[base.String], None]`
        :return: Returns true
        :rtype: :obj:`base.Boolean`
        """
        allowed_updates = prepare_arg(allowed_updates)
        payload = generate_payload(**locals(), exclude=['certificate'])

        files = {}
        prepare_file(payload, files, 'certificate', certificate)

        result = await self.request(api.Methods.SET_WEBHOOK, payload, files)
        return result