有没有办法在使用 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。

Docs for reference

最后,我收到了 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);
...