Есть ли способ передать пользовательский параметр при вызове с помощью 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?
3 answers
Наконец, я получил ответ от службы поддержки Twilio:
К сожалению, вы не можете добавить пользовательские параметры, такие как показано ниже. Вы правы в том, что единственный способ, которым вы могли бы это сделать, - это добавить параметры в строку запроса, и мы просто передадим эти параметры вашему приложению.
Затем я отправил им запрос на функцию:
Я думаю, что это должно быть учтено в будущем выпуске.
Они ответили мне:
Если этот запрос на функцию еще не существует. Я добавлю это.
Что ж, следите за обновлениями для будущего релиза.
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);
...
Вероятно, нет способа отправить пользовательские параметры в POST
. Единственный способ отправить - это построить URL
в GET
.
Массив последних параметров может содержать только определенные keys
, т.е. sendDigits, IfMachine, время ожидания.