使用Twilio.TwimlResponse()

时间:2017-05-12 17:31:32

标签: twilio twiml

我正在使用带有webhook的节点服务器来处理接收我的某个号码的Twilio消息。我使用这个号码来转发用户之间的通信,基本上为他们匿名(他们与我们的号码通信,所以他们不必将他们的号码交给其他用户)。

在我的经纪人中,我目前基本上是这样做的:

var sendTo = /* other user's number */;
var sendFrom = /* sender number in received message */;
var body = /* body of message received */;

twimlResponse(body, {
    to: sendTo,
    from: sendFrom
});

response.send(twimlResponse.toString());

这适用于短信。但是,我的调试日志显示没有正文的媒体消息的错误(一般情况下也不转发媒体,因为我目前还没有告诉它)。

所以,我正在尝试更新以发送媒体消息。这不太好用。

我找到了这个文档:https://www.twilio.com/docs/guides/how-to-receive-and-reply-in-node-js#respond-with-media-mms-message

然而,它不起作用。我收到错误'this' has no method 'To'

我尝试了一点修改我的代码,

var sendTo = /* other user's number */;
var sendFrom = /* sender number in received message */;
var body = /* body of message received */;
var mediaUrl = /* mediaUrl0 of the received message */

if( body && mediaUrl ) {
    twimlResponse(body, {
        to: sendTo,
        from: sendFrom,
        mediaUrl: mediaUrl
    });
}
else if( body ) {
    twimlResponse(body, {
        to: sendTo,
        from: sendFrom
    });
}
else if( mediaUrl ) {
    twimlResponse(nil, {
        to: sendTo,
        from: sendFrom,
        mediaUrl: mediaUrl
    });
}

response.send(twimlResponse.toString());

我还没有确认最后一个是否正确发送没有正文的消息,但我的问题是我无法弄清楚如何告诉twiml响应包含媒体。我已尝试MediamediaMediaUrlMediaUrl0mediaUrl0mediaUrl。每次我在调试器中收到警告,说它是一个无效的名词。 Twiml文档说明名词应该区分大小写并且大写,但出于某种原因,tofrom被视为小写。这部分一切正常。我只是无法弄清楚如何附加媒体网址。

任何提示都表示赞赏!

编辑 -

这是基于链接文档的一次尝试,我认为它根本不起作用,但是重新安排我设置的属性的顺序,我看到我只是没有恰当地设置数字。我知道没有那些传入的twiml会自动响应发送消息的号码,从收到它的号码开始。我需要指定这两个值,因为我将一个用户的消息转发给另一个用户。

twimlResp.message(function() {
    this.body(body);
    this.media(media0);
    this.to(sendTo);
    this.from(sendFrom);
});

此代码段适用于正文和媒体,与文档类似,但在设置to

时崩溃

修改 - 我尝试将this.tothis.from更改为this.Tothis.From,但这些不起作用。

我也试过这个:

twimlResp.message(function() {
    this.body(body);
    this.media(media0);
});
twimlResp.to = sendTo;
twimlResp.from = sendFrom;

哪个也不起作用 - .to和.from被忽略,导致响应从收到原始邮件的号码返回给发送用户。

1 个答案:

答案 0 :(得分:2)

我认为你在2.0和3.0 SDK之间感到困惑。您可以通过单击示例屏幕的右上角来更改SDK版本。

提供您的示例,使用3.0 SDK,您可以通过以下方式实现此目的:

var MessagingResponse = require('twilio').twiml.MessagingResponse;
var twiml = new MessagingResponse();

// Place your constraints here

var message = twiml.message({ to: sendTo, from: sendFrom });

if( body && mediaUrl ) {
    message.body(body);
    message.media(mediaUrl);
}
else if( body ) {
    messsage.body(body);
}
else if( mediaUrl ) {
    messsage.media(mediaUrl);
}

response.send(twiml.toString());

如果您需要更深入地详细说明我如何制定此代码,请查看MessagingResposne.js source。我假设您对切换SDK版本没有任何限制,我给出3.0 SDK示例的原因是因为Twilio将在2017年8月31日结束对2.0 SDK的支持。

如何使用SDK 2.0

由于某些用户需要迁移大部分代码库,因此您可以使用SDK 2.0设置与数字不同的数字。

twimlResp.message(function() {
    this.body(body);
    this.media(media0);
}, { 
    to: sendTo, 
    from: sendFrom 
});