async def _send_text(self,
                         request: Request,
                         stack: Stack,
                         parse_mode: Optional[Text] = None):
        parts = []
        chat_id = request.message.get_chat_id()
        for layer in stack.layers:
            if isinstance(layer, (lyr.Text, lyr.RawText, lyr.Markdown)):
                text = await render(layer.text, request)
                parts.append(text)
        for part in parts[:-1]:
            await self.call(
                'sendMessage',
                text=part,
                chat_id=chat_id,
            )
        msg = {
            'text': parts[-1],
            'chat_id': chat_id,
        }
        if parse_mode is not None:
            msg['parse_mode'] = parse_mode
        await set_reply_markup(msg, request, stack)
        if stack.has_layer(Reply):
            reply = stack.get_layer(Reply)
            if reply.message:
                msg['reply_to_message_id'] = reply.message['message_id']
        if stack.has_layer(Update):
            update = stack.get_layer(Update)
            if update.inline_message_id:
                msg['inline_message_id'] = update.inline_message_id
                del msg['chat_id']
            else:
                msg['message_id'] = update.message_id
            await self.call(
                'editMessageText',
                {'Bad Request: message is not modified'},
                **msg
            )
        else:
            await self.call('sendMessage', **msg)