使用Twilio.TwimlResponse()发送彩信

使用Twilio.TwimlResponse()发送彩信,twilio,twilio-twiml,Twilio,Twilio Twiml,我正在使用一个带有webhook的节点服务器来处理接收到我的一个号码的Twilio消息。我使用这个号码在用户之间转发通信,本质上是为他们匿名(他们用我们的号码通信,所以他们不必把他们的号码给其他用户) 在我的处理程序中,我目前基本上是这样做的: var sendTo = /* other user's number */; var sendFrom = /* sender number in received message */; var body = /* body of message r

我正在使用一个带有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());
这非常适合发短信。但是,我的调试日志显示了没有正文的媒体消息的错误(通常也不会转发媒体,因为我目前没有告诉它)

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

我发现了以下文档:

但是,它不起作用。我收到一个错误,说“this”没有“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响应包含媒体。我试过
Media
Media
MediaUrl
MediaUrl0
MediaUrl0
,和
MediaUrl
。每次我在调试器中收到一条警告,说它是一个无效名词。Twiml文档说,这些名词应该区分大小写并大写,但出于某种原因,
to
from
采用小写。那部分很好用。我只是不知道如何附加媒体url

任何提示都将不胜感激

编辑-

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

twimlResp.message(function() {
    this.body(body);
    this.media(media0);
    this.to(sendTo);
    this.from(sendFrom);
});
此代码段适用于正文和媒体,与文档类似,但在将
设置为
时崩溃

编辑-我已尝试将
this.更改为
this.从
更改为
this.到
this.from
,但这些都不起作用

我也试过:

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

这也不起作用-.to和.from被忽略,导致响应从接收原始消息的号码返回给发送用户。

我认为您已经混淆了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());
如果您需要更深入地了解我是如何制定此代码的,请查看。我假设您对切换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 
});

完全没有注意到SDK开关。还不知道SDK对2.x的支持已经结束。假设我应该继续更新。。。不过,我目前在package.json中有2.11.1作为我的版本。那么,考虑到我使用的是2.x示例,为什么试图复制他们的示例对我不起作用呢?我有没有可能在2.x中做类似的事情?看来我必须更新一些代码才能准备好3.x,而且我有一些用户在不知不觉中现在没有发送彩信,所以我想尽快发布一个修补程序。@JakeT。您是否仍有抛出错误的代码:“this'has not method'To'?我刚刚重新编写了它,但这次重新安排了顺序,以便它首先设置body和media,而那些没有抛出错误的代码。以前,我尝试设置的第一个属性是
to
,但似乎设置得不正确。我将在问题的末尾添加一个关于当前设置的代码片段,只需要知道如何将“收件人/发件人”编号传递到其中。我现在正在查看遗留源代码。如果你想看看我在哪里找到答案,