code: def parse(self, body, signature):
          
          if not self.signature_validator.validate(body, signature):
              raise InvalidSignatureError(
                  'Invalid signature. signature=' + signature)
  
          body_json = json.loads(body)
          events = []
          for event in body_json['events']:
              event_type = event['type']
              if event_type == 'message':
                  events.append(MessageEvent.new_from_json_dict(event))
              elif event_type == 'follow':
                  events.append(FollowEvent.new_from_json_dict(event))
              elif event_type == 'unfollow':
                  events.append(UnfollowEvent.new_from_json_dict(event))
              elif event_type == 'join':
                  events.append(JoinEvent.new_from_json_dict(event))
              elif event_type == 'leave':
                  events.append(LeaveEvent.new_from_json_dict(event))
              elif event_type == 'postback':
                  events.append(PostbackEvent.new_from_json_dict(event))
              elif event_type == 'beacon':
                  events.append(BeaconEvent.new_from_json_dict(event))
              elif event_type == 'accountLink':
                  events.append(AccountLinkEvent.new_from_json_dict(event))
              else:
                  LOGGER.warn('Unknown event type. type=' + event_type)
  
          return events
docs: Parse webhook request body as text.
  
          :param str body: Webhook request body (as text)
          :param str signature: X-Line-Signature value (as text)
          :rtype: list[T <= :py:class:`linebot.models.events.Event`]
          :return: