Estoy tratando de enviar un objeto JS formateado en Slack usando la API.
Lo mejor que pude hacer fue enviar a chat.postMessage
como:
const testObj = {a: "Hello", b: "World"}; ... data: { channel: "#my-channel" text: JSON.stringify(testObj, null, "\t") }
Pero todavía no está bien formateado y no se puede minimizar como un archivo JSON en Slack.
¿Cómo puedo enviarlo mejor formateado o como un archivo JSON?
Le recomendaría que use la función Fragmento de texto a través del método files.upload , para que pueda formatear el tipo de contenido correctamente, en este caso javascript.
Enviar fragmento de texto de Slack | Ejecutar en Fusebit |
---|
const testObj = {a: "Hello", b: "World"}; const result = await slackClient.files.upload({ channels: slackUserId, content: testObj, title: 'Sample', filetype: 'javascript' }); const {name, pretty_type} = result.file; ctx.body = { message: `Successfully sent a text snippet of type ${pretty_type} called ${name} to Slack user ${slackUserId}!` };
Encontré una buena solución de trabajo usando solo bibliotecas de nodos nativos para obtener un archivo JSON bien formateado.
Aquí está el código completo, reemplace contentObj con cualquier objeto que desee convertir a JSON. Ponga su canal diseñado y token de autenticación de bot
const https = require('https') const contentObj = {a: "hello", b: "world"} const formObject = { channels: "#myChannel", content: JSON.stringify(contentObj, null, 2), filename: "myFile.json", initial_comment: "Hello World from JSON HTTPS!", title: "myFile.json", }; const urlencodedForm = new URLSearchParams( Object.entries(formObject) ).toString(); const options = { hostname: "slack.com", port: 443, path: "/api/files.upload", method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded", "Content-Length": urlencodedForm.length, Authorization: "Bearer " + "Bot Token", }, }; const req = https.request(options, function (res) { let responseBody = ""; res.on("data", function (chunk) { responseBody += chunk; }); res.on("end", () => { const finalResponse = JSON.parse(responseBody); if (finalResponse.ok) { console.log("successfully sent msg to slack"); } else { console.log("Message Failed"); } }); }); req.on("error", (error) => { console.error(error); }); req.write(urlencodedForm); req.end();