使用 Twilio 解码传入 WhatsApp 消息的问题

Problem With decoding an Incoming WhatsApp message using Twilio

我将此 lambda 用作 Twilio WhatsApp 的 WebHook。但是当我收到消息时。它是 base64 编码的。使用 utf-8 解码为字符串后,它仍然不是正确的字符串形式。 这是代码:

exports.handler = async (event) => {
    // TODO implement

   // event = JSON.stringify(event);
    console.log("Event: ", event);
    console.log("BODY", event.body);
    
    let buff = Buffer.from(event.body, 'base64');
    let text = buff.toString('utf-8');

    console.log("Text Before ", text);

    // 

    let array = text.split('&');
    
    console.log({array});
    
    let text2 = unescape(array[6]);
    let replaced = text2.split('+').join(' ');

    console.log("New Text ", replaced);
    console.log("New Text2 ", text2);
    //console.log(JSON.stringify(text) );
    // console.log({array});

    //console.log("Message Body", );
    const response = {
        statusCode: 200,
        body: JSON.stringify(),
    };
    return response;
};

原始消息

Hello, From the Other Side

我在lambda事件中得到的文本base64编码 U21zTWVzc2FnZVNpZD1TTWM2MGU4YWYxMzJiN2IzMTU3OTAwMTdjYTMyM2M5Zjg3Jk51bU1lZGlhPTAmUHJvZmlsZU5hbWU9QW1qYWQrU2F5eWFtJlNtc1NpZD1TTWM2MGU4YWYxMzJiN2IzMTU3OTAwMTdjYTMyM2M5Zjg3JldhSWQ9OTIzMDg1NjUxNDE0JlNtc1N0YXR1cz1yZWNlaXZlZCZCb2R5PUhlbGxvJTJDK0Zvcm0rdGhlK090aGVyK3NpZGUuJlRvPXdoYXRzYXBwJTNBJTJCMTQxNTUyMzg4ODYmTnVtU2VnbWVudHM9MSZSZWZlcnJhbE51bU1lZGlhPTAmTWVzc2FnZVNpZD1TTWM2MGU4YWYxMzJiN2IzMTU3OTAwMTdjYTMyM2M5Zjg3JkFjY291bnRTaWQ9QUNhYjk5NWJlMTgxYzIwODc0OGFiYTkzZmQxMGJhYjIxMCZGcm9tPXdoYXRzYXBwJTNBJTJCOTIzMDg1NjUxNDE0JkFwaVZlcnNpb249MjAxMC0wNC0wMQ==

解码为字符串后,我得到了这个。

Hello%2C+Form+the+Other+side.

提前致谢。

问题是正文是作为表单编码参数传递的,而您使用的是简单的解码方法。 Node.js(和浏览器)有一个内置的方法来做到这一点,即 URLSearchParams 对象。

您可以使用它将字符串解码为 key/value 对,然后 get 您需要的密钥,如下所示:

const buff = Buffer.from(event.body, "base64");
const formEncodedParams = buff.toString("utf-8");
const urlSearchParams = new URLSearchParams(formEncodedParams);

const body = urlSearchParams.get("Body");

console.log(body);
// => "Hello, Form the Other side."