Itcan, in theory, be perfective here but using imperfective is more natural. We can assume that one or several people might call you, at arbitrary moments of time (within the period labeled "yesterday"), which are probably not as important when you ask who these people were.
When actions in the past are referred to as facts of something either happening or not, while the exact moments at which the events occurred are irrelevant (as are the "results"), we normally use imperfective forms. Perfective forms in this context are associated with the action being specific and expected to have been performed.
Imperfective verbs being used for a number of purposes is one of the more difficult parts of Russian for a learner. The perfective aspect has a rather well-defined interpretation whereas the imperfective aspect is an amalgamation of a number or different meanings.
It's said on this page (http://www.russianlessons.net/grammar/verbs_aspect.php) that:
【Understanding “successfully” completed.
Using the perfective implies that the action was completed successfully, unless used in the negative (see note below). So for example saying that ‘He took an exam on Friday’, if ‘took’ is used in the perfective it implies that he passed the exam. Using the imperfective would imply that the result is unknown, or he didn’t pass. It’s important to remember that by using the perfective you are implying that the action was indeed completed successfully. You are also implying that the action was not reversed or undone.
Aspects in the negative
Using the negative with perfective verbs indicates the person failed to do that action. Using the imperfective will normally simply mean that it didn’t happen.
Я не позвонила - I failed to phone (perfective) (but I was expected to)
Я не звонила - I didn't phone. (imperfective)】
So can I think about it this way: the imperfect verb звонить is used here, because I didn't answer the phone, so the calling was not successfully completed?
Good question. Suppose I knew that on exactly one occasion yesterday my phone rang (I didn't answer). Perhaps even so I should not ask кто мне позвонил?, because the attempted call did not succeed. But if I received exactly one successful call yesterday I could ask, perhaps rhetorically, кто мне позвонил?
Presumably, one answer could be "nobody".
In American English, if there's a strong likelihood that at least one person called, we'd usually ask "Who called me yesterday?" The question presumes that calls were received, so that "nobody" would be a surprise answer.
If we were unsure about calls, we'd more likely ask, "Did anyone call yesterday", although there's certainly some overlap.