code: public void fetchReceiptTimestamps(final AVIMConversationCallback callback) {
      final AVIMCommonJsonCallback tmpCallback = new AVIMCommonJsonCallback() {
        @Override
        public void done(Map<String, Object> result, AVIMException e) {
          if (null == callback) {
            return;
          }
          if (null != e || null == result) {
            callback.internalDone(e);
          } else {
            long readAt = 0;
            if (result.containsKey(Conversation.callbackReadAt)) {
              readAt = (Long) result.get(Conversation.callbackReadAt);
            }
  
            long deliveredAt = 0;
            if (result.containsKey(Conversation.callbackDeliveredAt)) {
              readAt = (Long) result.get(Conversation.callbackDeliveredAt);
            }
            AVIMConversation.this.setLastReadAt(readAt, false);
            AVIMConversation.this.setLastDeliveredAt(deliveredAt, false);
            storage.updateConversationTimes(AVIMConversation.this);
            callback.internalDone(null, null);
          }
        }
      };
      boolean ret = InternalConfiguration.getOperationTube().fetchReceiptTimestamps(client.getClientId(), getConversationId(),
              getType(),
              Conversation.AVIMOperation.CONVERSATION_FETCH_RECEIPT_TIME, tmpCallback);
      if (!ret && null != callback) {
        callback.internalDone(new AVException(AVException.OPERATION_FORBIDDEN, "couldn't send request in background."));
      }
    }
docs: fetchReceiptTimestamps
  
  @param callback