code: func (rtm *RTM) handleRawEvent(rawEvent json.RawMessage) string {
  	event := &Event{}
  	err := json.Unmarshal(rawEvent, event)
  	if err != nil {
  		rtm.IncomingEvents <- RTMEvent{"unmarshalling_error", &UnmarshallingErrorEvent{err}}
  		return ""
  	}
  
  	switch event.Type {
  	case rtmEventTypeAck:
  		rtm.handleAck(rawEvent)
  	case rtmEventTypeHello:
  		rtm.IncomingEvents <- RTMEvent{"hello", &HelloEvent{}}
  	case rtmEventTypePong:
  		rtm.handlePong(rawEvent)
  	case rtmEventTypeGoodbye:
  		// just return the event type up for goodbye, will be handled by caller.
  	case rtmEventTypeDesktopNotification:
  		rtm.Debugln("Received desktop notification, ignoring")
  	default:
  		rtm.handleEvent(event.Type, rawEvent)
  	}
  
  	return event.Type
  }
docs: // handleRawEvent takes a raw JSON message received from the slack websocket
  // and handles the encoded event.
  // returns the event type of the message.