了解 Node.js 环境:在 WhatsApp ChatGPT 集成中处理多个客户

问题描述 投票:0回答:1

我正在处理一个与 chatGPT 集成到 Whatsapp 中的自动化程序。

每当我错过客户的电话,或者在其他情况下,我收到客户提供的电话号码的电子邮件,并且我引导他在 WhatsApp 上使用 chatGPT 协助发送至相应的号码时,就会触发该程序。或者在通常情况下,只要有人简单地通过向我的 WhatsApp 发送文本来开始聊天。

任何已发送到我的 Whatsapp 的消息都会触发监听器事件 client.on(message) (在代码中)。 现在的问题是,我不太明白nodeJS环境是如何工作的,我有一个想法,它是1个核心,但它可以以异步方式处理多个I/O。

如果我有多个客户同时连接到我的程序,则所有客户的全局变量在同一运行时是否相同,或者每个连接的客户在程序中都有自己的“环境”?

在这种情况下我必须使用线程吗?但我仍然对线程有一个想法,它们也共享内存

这是我的index.js:

//global variable
let protocol_number 
let source

client.on("message", async (message) => {
  // Check if the message is from the customer you want to converse with
  console.log('protcol num on message: ',protocol_number,' message from: ',message.from)
  const isCustomer = message.from === protocol_number; //check if same number whose initiated first chat  
  const customerMessage = message.body.trim().toLowerCase();
 
  if (isCustomer && source ==='GMAIL') {
   
    logger.info(`Incoming Message from Customer: ${message.from}: ${customerMessage}`);

    // Use ChatGPT to generate a response based on the customer's message
    const chatGptResponse = await AutoReplyAfterMissedCall(customerMessage);

    // Send the response back to the customer
    if (chatGptResponse) {
      message.reply(chatGptResponse.trim());
    }
  } else if(isCustomer && source ==='GMAIL') {
    logger.info(`Incoming Message from Customer: ${message.from}: ${customerMessage}`);

    // Use ChatGPT to generate a response based on the customer's message
    const chatGptResponse = await AutoReplyForGmail(customerMessage);
    // Send the response back to the customer
    if (chatGptResponse) {
      message.reply(chatGptResponse.trim());
    } else { //normal chat
      const chatGptResponse = await normalGPTchat(customerMessage);
      if (chatGptResponse) {
        message.reply(chatGptResponse.trim());
      }
    }
  }
});

注意:我没有使用数据库,也没有考虑使用数据库

node.js multithreading asynchronous openai-api
1个回答
0
投票

在 Node.js 环境中,每个传入消息均由事件驱动的单线程模型处理。您提供的代码是“消息”事件的事件处理程序,并且它针对每个传入消息异步运行。
关于您对全局变量的担忧,在您提供的代码中,protocol_number和source被声明为全局变量。在 Node.js 环境中,这些变量将在所有客户端之间共享,因为 Node.js 是单线程的。如果您有多个客户同时连接,则不同的事件(消息)将同时访问和修改相同的变量。这可能会导致意外行为和数据损坏。
为了同时处理多个客户而不发生冲突,您应该避免对特定于客户的数据使用全局变量。相反,您应该在每个事件的上下文中维护与客户相关的信息,或者使用闭包为每个客户创建隔离的范围。考虑这样的事情,

// Event handler function
const handleMessage = (message, protocol_number, source) => {
 //...enter the logic here
}

// Client event listener
client.on("message", async (message) => {
  // Pass customer-specific data to the event handler
  handleMessage(message, protocol_number, source)
})
© www.soinside.com 2019 - 2024. All rights reserved.