Bilam is a fascinating character, reviled in the Midrash and yet described as a prophet of the nations of the world. On the face of it, he has a relationship with the Divine which seems to be a positive one. When Balak sends representatives to ask him to go and curse the Children of Israel, he makes it very clear that he must get permission first. God appears to him and has a conversation. Asks who the visitors are and tells Bilam not to go with them. It looks as though there is a pretty close relationship. And Bilam does as he is told.
Then more important messengers come back with a higher offer and again Bilam demurs and goes even further, “Even if Balak would give me his house full of silver and gold I could not go against the word YHVH, my God.” Seems pretty conclusive. Indeed, he uses the name YHVH unlike Melchizedek who used EL ELYON.
That night God appears again and this time tells Bilam to go with the messengers, but only to say what is put into his mouth. Bilam gets up to go, but on the way an angel blocks the road, and only Bilam’s donkey can see it. Bilam can’t see the angel, so he doesn’t know why the donkey has stopped. Finally, the donkey opens its mouth and explains why it can’t go on. This time it appears the donkey is closer to the forces of Heaven than is Bilam.
The angel finally appears to Bilam and tells again to go on but only to speak as he is told.
On he goes. He gets to Balak, he asks for seven altars to be built and sacrifices offered. God puts words into his mouth that praise Israel rather than curse. Later on God appears to Bilam directly (using a rare word VAYIKAR which could also imply ACCIDENT) and again tells him what to say.
Finally, “Bilam saw that it was good before God to praise Israel, so he no longer turned to the spells he had before…and the Spirit of God rested upon him.”
Here lies the clue to Bilam’s negative side. To begin with, God was just one of the “forces” he used, related to, or served. God played with him the way he played with Pharaoh, and finally Bilam was able to see the difference.