使用 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."
我将此 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."