我正在尝试在我的应用程序中存储短信对话。现在,我可以通过 Twilio API 成功发送短信。基本上,我有一组预先构建的消息,这些消息显示在表格中,并且每条消息都可以通过单击“发短信”按钮来发送。这效果很好。
我在存储我的 Twilio 号码收到的 SMS 文本列表(即响应我从应用程序发送的文本)时遇到问题。我能够从 Twilio 获取文本列表。
这是我提取文本列表的 Meteor 方法代码:
Meteor.methods({
getTexts: function() {
// Twilio Credentials
var accountSid = 'someTwilioSid';
var authToken = 'someAuthToken';
var twilio = Twilio(accountSid, authToken);
twilio.messages.list({}, function (err, data) {
var texts = [];
data.messages.forEach(function (message) {
var text = {
to: message.to,
from: message.from,
body: message.body
};
texts.push(text);
//Texts.insert(text); // Uncommenting this causes a Meteor.bindEnvironment error
console.log(text);
});
});
});
返回例如这个 JSON:
I20150314-15:12:08.823(-5)? { to: '+11234567891',
I20150314-15:12:08.823(-5)? from: '+11234567890',
I20150314-15:12:08.823(-5)? body: 'Hello, welcome to Twilio from the command line!' }
I20150314-15:12:08.823(-5)? { to: '+11234567891',
I20150314-15:12:08.823(-5)? from: '+11234567890',
I20150314-15:12:08.823(-5)? body: 'Hello, welcome to Twilio!' }
看起来不错,除了我取消注释 Texts.insert(text)
后,我得到:
> 错误:Meteor 代码必须始终在 Fiber 内运行。尝试使用 Meteor.bindEnvironment 包装传递给非 Meteor 库的回调。
以下是我尝试过的 getTexts
的替代版本,当我取消注释 Texts.insert(text) 时,这两个版本都会出现
行:bindEnvironment
错误
使用Meteor.wrapAsync
Meteor.wrapAsync(twilio.messages.list({}, function (err, data) {
var texts = [];
data.messages.forEach(function (message) {
var text = {
to: message.to,
from: message.from,
body: message.body
};
texts.push(text);
//Texts.insert(text);
console.log(text);
});
}));
使用Meteor.bindEnvironemnt
Meteor.bindEnvironment(twilio.messages.list({}, function (err, data) {
var texts = [];
data.messages.forEach(function (message) {
var text = {
to: message.to,
from: message.from,
body: message.body
};
texts.push(text);
//Texts.insert(text);
console.log(text);
});
}));
我读过 Meteor: Proper use of Meteor.wrapAsync on server ,这绝对有助于为我指明正确的方向,但我仍然遇到麻烦。
最佳答案
好的,仔细查看 Meteor: Proper use of Meteor.wrapAsync on server 后,我想出了下面的解决方案,效果非常好。
Meteor.methods({
getTexts: function() {
// Twilio Credentials
var accountSid = 'someTwilioSid';
var authToken = 'someAuthToken';
var twilio = Twilio(accountSid, authToken);
var twilioMessagesListSync = Meteor.wrapAsync(twilio.messages.list, twilio.messages);
var result = twilioMessagesListSync(
function (err, data) {
var texts = [];
data.messages.forEach(function (message) {
var text = {
to: message.to,
from: message.from,
body: message.body,
dateSent: message.date_sent,
status: message.status,
direction: message.direction
};
texts.push(text);
Texts.insert(text);
})
}
);
}
});
关于javascript - Meteor:从 Twilio 获取 SMS 文本列表并将其插入 mongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29054679/