I had the following issue: Took out a new contract and changed my prepaid number to the contract number.
Activation did not want to occur for nearly two weeks despite trying every single piece of advice available on the web. It would also use my iCloud or Apple ID for iMessage. Telkom and Apple could not assist and said that the problem was not either of their ends. Your phone has to send a message (SMS) to the server to verify and activate this function on your device. This got me thinking. If the problem is with neither of the parties, the problem should surely be with the phone or some settings on the phone.
I had Truecaller installed and activated (with my number), which I think was preventing the SMS from being received back from the server, hence not activating iMessage and FaceTime using my number. I followed the below steps and this sorted the problem out immediately. May work, may not work, but worth a try? Comment if you also tried this and it worked. This may help others to find a solution faster as well.

N.B. Make sure you have airtime or SMS bundles available for the SMS to be sent. Also confirm with Telkom that all your services are working fine and that international SMS, specifically, is activated and working on your line (number). Apparently on prepaid numbers it is activated as default, according to Telkom).

N.B. Also important to note is that you should first wait for at least that 24 hours to see if it activates on your phone automatically, before trying the below.

N.B. Make sure that your number (Emergency Number) is also linked to your Apple ID.
Settings>Apple ID (click on your name at the top)>Name, Phone Numbers, Email
If your number is not listed under Contactable At, click on Edit and add it there with the the appropriate country code. In S.A. don’t add your number with the 0** *** **** format. Add it in the +27** *** **** format (don’t forget to add the + before the 27). You should probably start here.
1. Deleted Truecaller from my device.
2. Closed all tabs in the browser and closed the browser.
3. Closed all other apps.
4. Turned off iMessage, FaceTime and Find My in Settings.
5. Turned off WiFi.
6. Turned off Bluetooth.
7. Turn off Mobile data.
8. Close Settings app.
9. Switch phone off and leave off for about 10 min or so (not sure how long exactly, but this worked for me ).
10. Power on phone.
11. Switch Airplane mode on and leave for about 10-15 seconds (again - the duration is not known, but this worked for me.
12. Switched Airplane mode off.
13. Switched Mobile Data on. NOT WiFi (I left WiFi off for the phone to communicate with Telkom using my cellular data and number, or at least so I think - I am not an IT specialist, nor am I an Apple Technician ).
14. Turned on iMessage and waited for the app to boot up properly.
15. Clicked on Addresses (Showed my number, Apple ID and iCloud email address there under the “You can send and receive iMessages to and from” section.
16. Selected my number by clicking on it (for some reason it only sent the SMS once I had clicked on my number twice).
17. Something refreshed and my number was selected with a blue tick all on it’s own.
18. I went to FaceTime and switched it back on. It activated on my number as well.
19. Closed Settings App. Turned on WiFi, turned off mobile data (as I mostly use WiFI ).
20. Also remember to turn on Find My again ).
Voila, iMessage and FaceTime were now working with my number. (You choose to only send and receive iMessages from your number as well).
Hope it helps and take care .