使用 Twilio.TwimlResponse() 发送彩信

Send MMS using Twilio.TwimlResponse()

我正在使用带有 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 被采用小写。那部分一切正常。我只是不知道如何附加媒体 url。

如有任何提示,我们将不胜感激!

编辑 -

这是一种基于链接文档的尝试,我认为它根本不起作用,但重新安排了我设置的属性的顺序,我发现我只是没有适当地设置到/从数字.我知道没有传入的 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 被忽略,导致响应从接收原始消息的号码返回到发送用户。

我认为您混淆了 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 
});