twilio node.js 不发送短信
twilio node.js not sending sms
我有以下代码作为 amazon sqs 事件的 lambda 触发器执行。
require('dotenv').config()
const client = require('twilio')(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);
exports.handler = async function (event, context) {
console.info('phoneNumber', event.Records[0].messageAttributes.Phone.stringValue);
console.info('smsContent', event.Records[0].body);
console.info('from phone number', process.env.TWILIO_PHONE_NUMBER);
console.info('TWILIO_ACCOUNT_SID', process.env.TWILIO_ACCOUNT_SID);
console.info('TWILIO_AUTH_TOKEN', process.env.TWILIO_AUTH_TOKEN);
sendMessage(event);
return context.logStreamName;
}
function sendMessage(event) {
client.messages
.create({
body: event.Records[0].body,
from: process.env.TWILIO_PHONE_NUMBER,
to: event.Records[0].messageAttributes.Phone.stringValue
})
.then(message => {
console.info('messageId', message.sid)
}
,
err => {
console.error('delivery error', err);
});
}
我在日志中检查了所有相关 process.env 参数及其值是否正确。
当 sendMessage 函数执行时,没有输出。就好像它从未被执行过一样。
我遵循了他们的文档:
https://www.twilio.com/docs/sms/quickstart/node
它们很简单,但是代码无法执行。
您正在 return 执行您的函数,而无需等待 promise。
等待处理程序中的 sendMessage:sendMessage(event)
应该变成 await sendMessage(event)
将您的 sendMessage 方法更改为 return 承诺:client.messages.create({...
应该变为 return client.messages.create({...
工作版本:
exports.handler = async function (event, context) {
await sendMessage(event);
return context.logStreamName;
}
function sendMessage(event) {
return client.messages
.create({
body: event.Records[0].body,
from: process.env.TWILIO_PHONE_NUMBER,
to: event.Records[0].messageAttributes.Phone.stringValue
})
.then(message => {
console.info('messageId', message.sid)
})
.catch(err => {
console.error('delivery error', err);
})
}
这是一个对我有用的解决方案。它是 return 回调。
exports.handler = async function (event, context,callback) {
try {
const message = await sendMessage(event);
console.log('message', message);
callback(null, {result: 'success'});
} catch (error) {
console.log('error', error);
callback("error");
}
// return context.logStreamName;
}
function sendMessage(event) {
return client.messages
.create({
body: event.Records[0].body,
from: process.env.TWILIO_PHONE_NUMBER,
to: event.Records[0].messageAttributes.Phone.stringValue
});
}
我有以下代码作为 amazon sqs 事件的 lambda 触发器执行。
require('dotenv').config()
const client = require('twilio')(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);
exports.handler = async function (event, context) {
console.info('phoneNumber', event.Records[0].messageAttributes.Phone.stringValue);
console.info('smsContent', event.Records[0].body);
console.info('from phone number', process.env.TWILIO_PHONE_NUMBER);
console.info('TWILIO_ACCOUNT_SID', process.env.TWILIO_ACCOUNT_SID);
console.info('TWILIO_AUTH_TOKEN', process.env.TWILIO_AUTH_TOKEN);
sendMessage(event);
return context.logStreamName;
}
function sendMessage(event) {
client.messages
.create({
body: event.Records[0].body,
from: process.env.TWILIO_PHONE_NUMBER,
to: event.Records[0].messageAttributes.Phone.stringValue
})
.then(message => {
console.info('messageId', message.sid)
}
,
err => {
console.error('delivery error', err);
});
}
我在日志中检查了所有相关 process.env 参数及其值是否正确。 当 sendMessage 函数执行时,没有输出。就好像它从未被执行过一样。
我遵循了他们的文档:
https://www.twilio.com/docs/sms/quickstart/node
它们很简单,但是代码无法执行。
您正在 return 执行您的函数,而无需等待 promise。
等待处理程序中的 sendMessage:
sendMessage(event)
应该变成await sendMessage(event)
将您的 sendMessage 方法更改为 return 承诺:
client.messages.create({...
应该变为return client.messages.create({...
工作版本:
exports.handler = async function (event, context) {
await sendMessage(event);
return context.logStreamName;
}
function sendMessage(event) {
return client.messages
.create({
body: event.Records[0].body,
from: process.env.TWILIO_PHONE_NUMBER,
to: event.Records[0].messageAttributes.Phone.stringValue
})
.then(message => {
console.info('messageId', message.sid)
})
.catch(err => {
console.error('delivery error', err);
})
}
这是一个对我有用的解决方案。它是 return 回调。
exports.handler = async function (event, context,callback) {
try {
const message = await sendMessage(event);
console.log('message', message);
callback(null, {result: 'success'});
} catch (error) {
console.log('error', error);
callback("error");
}
// return context.logStreamName;
}
function sendMessage(event) {
return client.messages
.create({
body: event.Records[0].body,
from: process.env.TWILIO_PHONE_NUMBER,
to: event.Records[0].messageAttributes.Phone.stringValue
});
}