twilio - 使用 Twilio.TwimlResponse() 发送彩信

标签 twilio 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' 没有方法 '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);
});

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

编辑 - 我尝试将 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 
});

关于twilio - 使用 Twilio.TwimlResponse() 发送彩信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43943435/

相关文章:

python - 使用 Twilio 可编程语音 SDK 的通话质量差

twilio - 如何将Twilio号码转发到VoIP电话?

curl - Twilio TWIML POST 请求 : Document Parse Error

Android Twilio 视频通话,唤醒应用程序并将其置于前台

javascript - 如何使用 node.js 修复 Twilio 中无效的内容类型 header ?

node.js - Twiml POST 请求上的参数为空

twilio - 在 Twiml 上使用答录机检测

twilio - 检查收件人是否接受/拒绝调用?

ruby - 如何重用选项散列

java - 用mockito模拟twilio