How are observational equivalence, contextual equivalence, and extensional equality related?

First, some context: I'm reading this blog post by Andrej Bauer.

So, I stumbled in these terms: "observational equivalence" and "contextual equivalence".

I know almost nothing about operational semantics ... I know it gives meaning for terms by it's reduction to normal form, if I'm not wrong.

Extensional equality says that two functions are equal if they always give the same result for the same input, for some definition of same result.

From what Wikipedia says about observational equivalence I can't see how is not the same thing as extensional equality .

So my question is: how these things (all three things) are related and what distinguish them?