gpt4 book ai didi

node.js - Twilio 可编程 SMS 未在部署的 Lambda 函数中发送

转载 作者:行者123 更新时间:2023-12-02 02:54:07 25 4
gpt4 key购买 nike

我正在开发 Serverless使用 Twilio's programmable SMS 的 AWS 服务发送短信。

当我在本地运行堆栈时(例如sls离线启动),我的设置始终成功地传递消息,但在部署的环境中我似乎无法调用 Twilio client 上的方法.

消息传递的设置方式如下:

const twilio = require('twilio');

const twilioClient = twilio(
process.env.TWILIO_SID,
process.env.TWILIO_TOKEN,
{
lazyLoading: true,
}
);

export function sendMessage(user, message) {
twilioClient.messages.create({
from: process.env.TWILIO_NUMBER,
to: user.phone,
body: message,
}, function(err, message) {
console.log('error', err);
console.log('message', message);
});
}

// And then usage in a Serverless Function Handler

function example(event, context, callback) {
context.callbackWaitsForEmptyEventLoop = false;

// user is also determined here
sendMessage(user, 'This is a message');

return {
body: JSON.stringify({}),
statusCode: 200
};
}

在本地运行此程序可以正常工作,我可以看到 message 日志的输出,而 error 日志上没有任何内容。然而,部署后,运行它不会产生任何结果——该方法似乎甚至没有被调用(我可以在 Twilio 日志中验证没有进行 API 调用),因此没有 error message 日志是在回调中生成的。

在调试中我尝试了以下操作:

  • 我已经记录了所有环境变量(Twilio SSID、身份验证 token 、电话号码)以及函数参数,并且它们似乎都已就位。我还检查了 Lambda 函数本身,以确保环境变量存在。
  • 我已检查了我的 CloudWatch 日志;没有记录任何错误或异常。除了 Twilio 方法没有被调用之外,Lambda 函数的执行没有任何问题。
  • 我尝试记录 twiliotwilioClient.messages.create 等内容,以确保客户端和函数定义不会以某种方式被删除。
  • 我认为这可能与 context.callbackWaitsForEmptyEventLoop 有关,因此我将其从 false 更改为 true

我一无所获,我不明白为什么这可以在本地工作,但在部署时却不能。


编辑:根据 Twilio client example ,如果省略回调函数,该方法将返回一个 Promise。我继续尝试等待该方法的响应:

export function sendMessage(user, message) {
return twilioClient.messages.create({
from: process.env.TWILIO_NUMBER!,
to: user.phone,
body: message,
});
}

// Usage...

async function example(event, context, callback) {
context.callbackWaitsForEmptyEventLoop = false;

try {
const message = await sendMessage(user, 'This is a message');
console.log('message', message)
} catch (error) {
console.log('error', error);
}

return {
body: JSON.stringify({}),
statusCode: 200
};
}

在此示例中,Lambda 函数成功,但消息和错误均未记录。

最佳答案

我试过了,它有效。我尝试使我的代码与使用类似,但做了一些更改。

const twilio = require('twilio');

const twilioClient = twilio(
process.env.TWILIO_SID,
process.env.TWILIO_TOKEN
);

let user = '+14075551212';

function sendMessage(user, message) {
return twilioClient.messages.create({
from: process.env.TWILIO_NUMBER,
to: user,
body: message,
});
}

exports.handler = async function(event, context, callback) {
try {
const message = await sendMessage(user, 'This is a message');
console.log('message', message);
callback(null, {result: 'success'});
} catch (error) {
console.log('error', error);
callback("error");
}
};

关于node.js - Twilio 可编程 SMS 未在部署的 Lambda 函数中发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61448792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com