Bulvak Bulvak - 7 months ago 55
PHP Question

Twilio REST api sequential calling possible?

After a while of writing REST api and TwiML apps I had been trying to write a sequential Dialing app in REST api but after much errors and issues I am stumped. I had written a sequential dialing app in TwiML but writing the same app in REST is hell....

What I have been trying to do in REST api is create this program where a person A has a list of people B C D E F G H I J K, person A wants to send an SMS to a twilio number, Twilio would then call using REST api to the list of people one by one until one of them pick up. The Process goes like this:

1) Person A text's Twilio number
2) Twilio gathers its array of phone numbers of persons B C D E F G H I J K
3) Twilio's REST api calls person B
4) Person B does **NOT** pick up (busy or doesn't pick up so answering machine) so then REST api calls person C next
5) Person C does **NOT** pick up (busy or doesn't pick up so answering machine) so then the REST api calls person D
6) Person D **DOES** pick up and twilio **reads the SMS sent by person A and then hangs up**
7) application ends, so person E F G H I J K are not called because one person picked up so **not everyone** had to be called


I am trying to make this in REST api but after hours of trying I have given up...My only question is: is this possible with REST api? if so how?

I have been able to make an app where I sms twilio, twilio calls back with REST api and reads me the SMS but sequential dialling is so different...

I have tried talking to Twilio staff but I have not been able to figure out a way to make the sequential calling work as I don't know what else to do....I have tried using StatusCallback and much more but now I am out of ideas.

Answer

Yes, it is possible.

Here's a rough outline of what needs to be done:

SMS Script

This is what you point the Twilio number's SMS to. It should take the Body parameter and store it to a database (because somehow you'll need to persist this over multiple requests). It will also need to grab the list of numbers that should be calls (presumably from a database or a common config file).

Once the body is stored, the SMS script should initiate a call to the first number on the list with the 'Redial Script' as the StatusCallback, and the 'Message' script as the Url.

Add an id parameter to the StatusCallback and the Url (using the query string should be fine), so those scripts can identify the message that should be played.

Redial Script

This handles working through the list, it should check the CallStatus to see if the call was answered. If it was, then simply exit. If not, it works through the list of numbers (again, pulled from a database or common config file) until it matches the To parameter to a nubmer in the list.

Once that match is made, the script should initiate a call to the next number on the list, again using the 'Redial Script' as the StatusCallback, and the 'Message' script as the Url passing the message id to both scripts as a parameter.

Message Script

This is the script Twilio requests when the call is answered, it simply checks the id parameter, pulls the message from the database, and reads it.

Note that using a database isn't necessary you could pass the full message instead of an id. You could also replace the message script with a Twimlet.