有没有办法在使用 Twilio 进行调用时传递自定义参数?
Is there a way to pass a custom parameter when make a call with Twilio?
我正在使用 Twilio PHP 库,但问题实际上与语言无关。我尝试执行以下操作:
$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 来传递我的自定义参数。
另外,我可能必须使用已经通过 POST.
注册了请求 URL 的 AppSID
有没有办法使用POST方法传递自定义参数?
可能无法在 POST
中发送自定义参数。发送的唯一方法是在 GET
.
中构造 URL
最后一个参数数组只能包含特定的 keys
即 SendDigits、IfMachine、Timeout。
最后,我收到了 Twilio 支持的回复:
很遗憾,您无法添加如下自定义参数。你是对的,你能够做到这一点的唯一方法是将参数添加到查询字符串,我们只会将这些参数传递给你的应用程序。
然后我向他们发送了一个功能请求:
我认为应该在以后的发布中考虑到这一点。
他们回复我:
如果此功能请求尚不存在。我会补充的
敬请期待未来的发布。
Twilio 将一个唯一的调用 SID 与每个调用相关联,并且由于此参数在调用创建时和 Twilio 向处理程序发布请求时都可用,所以我可以使用我自己的数据库来传递参数。
使用数据库可能看起来开销很大,但如果我还想存储呼叫的 "outcome"(例如,客户接听了 phone 了吗?自动化机器?),我已经实现了所有必要的功能。
所以我的 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);
现在,我的处理程序 servlet 代码是这样开始的:
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);
...
我正在使用 Twilio PHP 库,但问题实际上与语言无关。我尝试执行以下操作:
$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 来传递我的自定义参数。 另外,我可能必须使用已经通过 POST.
注册了请求 URL 的 AppSID有没有办法使用POST方法传递自定义参数?
可能无法在 POST
中发送自定义参数。发送的唯一方法是在 GET
.
URL
最后一个参数数组只能包含特定的 keys
即 SendDigits、IfMachine、Timeout。
最后,我收到了 Twilio 支持的回复:
很遗憾,您无法添加如下自定义参数。你是对的,你能够做到这一点的唯一方法是将参数添加到查询字符串,我们只会将这些参数传递给你的应用程序。
然后我向他们发送了一个功能请求:
我认为应该在以后的发布中考虑到这一点。
他们回复我:
如果此功能请求尚不存在。我会补充的
敬请期待未来的发布。
Twilio 将一个唯一的调用 SID 与每个调用相关联,并且由于此参数在调用创建时和 Twilio 向处理程序发布请求时都可用,所以我可以使用我自己的数据库来传递参数。
使用数据库可能看起来开销很大,但如果我还想存储呼叫的 "outcome"(例如,客户接听了 phone 了吗?自动化机器?),我已经实现了所有必要的功能。
所以我的 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);
现在,我的处理程序 servlet 代码是这样开始的:
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);
...