Есть ли способ передать пользовательский параметр при вызове с помощью Twilio?


Я использую PHP-библиотеку Twilio, но на самом деле вопрос не зависит от языка. Я попытался сделать что-то вроде следующего:

$client = new Services_Twilio('MyAccountSID', 'My auth token');
$client->account->calls->create($from_number, $to_number, $url_or_AppSID, array(
    'TwilioParam1' => 'value1',
    'TwilioParam2' => 'value2',
    'MyCustomParameter1' => 'CustomValue1',
    'MyCustomParamete2' => 'CustomValue2'
));

Затем я ожидал получить эти параметры, когда Twilio запросил мой $url_or_appsid (мое приложение TwiML), но этого не произошло. Я знаю, что возможный способ сделать это - создать URL-адрес, добавив эти параметры в строку запроса и передав свой пользовательский URL-адрес в параметре $url_or_appsid, но это заставляет меня установить метод GET, и я хочу передать свои пользовательские параметры через почтовый запрос, а не ПОЛУЧИТЬ. Также, вероятно, мне придется использовать идентификатор приложения, у которого уже есть URL-адрес запроса, зарегистрированный по ПОЧТЕ.

Есть ли способ передать пользовательские параметры с помощью метода POST?

Author: Delmo, 2015-05-25

3 answers

Наконец, я получил ответ от службы поддержки Twilio:

К сожалению, вы не можете добавить пользовательские параметры, такие как показано ниже. Вы правы в том, что единственный способ, которым вы могли бы это сделать, - это добавить параметры в строку запроса, и мы просто передадим эти параметры вашему приложению.

Затем я отправил им запрос на функцию:

Я думаю, что это должно быть учтено в будущем выпуске.

Они ответили мне:

Если этот запрос на функцию еще не существует. Я добавлю это.

Что ж, следите за обновлениями для будущего релиза.

 5
Author: Delmo, 2015-05-26 05:31:38

Twilio связывает уникальный идентификатор SID вызова с каждым вызовом, и поскольку этот параметр доступен как при создании вызова, так и при отправке Twilio запроса обработчику, я могу использовать свою собственную базу данных для передачи параметров.

Использование базы данных может показаться довольно накладными расходами, но если я также хочу сохранить "результат" звонка (например, взял ли клиент трубку? мы добрались до автоматизированной машины?), я уже внедряю всю необходимую функциональность в любом случае.

Итак, мой Java-код для выполнения вызова выглядит следующим образом:

Map<String, String> params = new HashMap<String, String>();
params.put("From", myTwilioPhoneNumber);
params.put("To", customerPhone);
params.put("Url", myHandlerUrl));
Call call = client.getAccount().getCallFactory().create(params);
// THE LINE BELOW IS THE KEY TO PARAMETER PASSING
db.store(call.getSid(), myCustomParametersJSON);

Теперь мой код сервлета обработчика начинается так:

Sting callSid = request.getParameter("CallSid");
// Optionally sleep 20 ms to make sure that data written by
// db.store(call.getSid(), myCustomParametersJSON);
// can now be read.
CustomData customData = parseJSON(db.fetchKey(callSid));
TwiMLResponse twimlResponse = new TwiMLResponse();
Say sayMessage = new Say(makeCustomMessage(customData));
twimlResponse.append(sayMessage);
...
 3
Author: Scott Mayers, 2016-02-10 15:13:13

Вероятно, нет способа отправить пользовательские параметры в POST. Единственный способ отправить - это построить URL в GET.

Массив последних параметров может содержать только определенные keys, т.е. sendDigits, IfMachine, время ожидания.

Документы для справки

 0
Author: mansoor, 2015-05-25 06:44:42