def reply_chat_action(
        self,
        action: Union[ChatAction, str],
        progress: int = 0
    ) -> "Message":
        """Bound method *reply_chat_action* of :obj:`Message <pyrogram.Message>`.

        Use as a shortcut for:

        .. code-block:: python

            client.send_chat_action(
                chat_id=message.chat.id,
                action="typing"
            )

        Example:
            .. code-block:: python

                message.reply_chat_action("typing")

        Args:
            action (:obj:`ChatAction <pyrogram.ChatAction>` | ``str``):
                Type of action to broadcast.
                Choose one from the :class:`ChatAction <pyrogram.ChatAction>` enumeration,
                depending on what the user is about to receive.
                You can also provide a string (e.g. "typing", "upload_photo", "record_audio", ...).

            progress (``int``, *optional*):
                Progress of the upload process.
                Currently useless because official clients don't seem to be handling this.

        Returns:
            On success, True is returned.

        Raises:
            :class:`RPCError <pyrogram.RPCError>` in case of a Telegram RPC error.
            ``ValueError`` if the provided string is not a valid ChatAction.
        """
        return self._client.send_chat_action(
            chat_id=self.chat.id,
            action=action,
            progress=progress
        )