It might seem trivial - I assure you it is not.
The Message oriented languages (of which I know Smalltalk and Objective C) make objects act essentially like servers - when messaged they can simply handle the message, ignore the message, forward the message, or signal a fault. The messages themselves are available as a chunk of data to examine, or modify as necessary.
Messages are sent to an object's handler ("method" if you like), or to #doesNotUnderstand: if no handler exists. What you want to do in there is your business but the default is to halt the process and slap a debugger around it.
In function calling languages - the only available option is to handle the message or catastrophically fail.
This mechanism makes possible a number of very powerful techniques that are simply beyond the ken of the average function calling language user.
There's more wrt to the entire system being manipulatable by the programmer but I think the message vs function thing is a key piece.