Есть ли способ передать специальный параметр при звонке с помощью 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, и я хочу передать свои настраиваемые параметры через запрос POST, а не GET . Также вероятно, что мне придется использовать AppSID, у которого уже есть URL-адрес запроса, зарегистрированный через POST.

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


person Delmo    schedule 25.05.2015    source источник


Ответы (3)


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

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

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

Думаю, это следует учесть в будущих выпусках.

Мне ответили:

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

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

person Delmo    schedule 26.05.2015
comment
Это еще не сделано: D - person yunas; 12.05.2016
comment
Все еще не рассмотрены до сих пор - person Finn; 11.03.2019
comment
все еще в ожидании :( - person Khubaib Raza; 11.02.2021

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);
...
person Scott Mayers    schedule 10.02.2016

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

Последний массив параметров может содержать только определенные keys, то есть SendDigits, IfMachine, Timeout.

Справочные документы

person Mansoor Jafar    schedule 25.05.2015
comment
Спасибо @mansoor. Я просмотрел всю документацию, и в них ничего не упоминалось о пользовательских параметрах, но я надеялся, что кто-то знает способ сделать это, но, наконец, служба поддержки Twilio подтвердила нашу догадку :( - person Delmo; 26.05.2015