Tengo este código ejecutándose en el navegador.
<html> <script type="module"> console.log("working"); var url = "https://slack.com/api/chat.postMessage"; var auth_token = "xoxb-2B"; //Your Bot's auth token var body = {channel: "ses", text: "testing app"} async function postData(url = '', data = {}) { // Default options are marked with * const response = await fetch(url, { method: 'POST', // *GET, POST, PUT, DELETE, etc. headers: { "Authorization": "Bearer " + auth_token, "Content-Type" : "application/json" }, body: JSON.stringify(data) // body data type must match "Content-Type" header }); return response.json(); // parses JSON response into native JavaScript objects } postData('https://slack.com/api/chat.postMessage', body) .then(data => { console.log(data); // JSON data parsed by `data.json()` call }); </script> </html>Me estoy poniendo
El acceso para buscar en 'https://slack.com/api/chat.postMessage' desde el origen 'http://127.0.0.1:5500' ha sido bloqueado por la política de CORS: el control de acceso no permite la autorización del campo de encabezado de solicitud -Permitir encabezados en la respuesta de verificación previa.
No entiendo, necesito especificar el token del portador de alguna manera, incluso en los documentos dice que lo coloque en el encabezado de Autorización, ¿por qué no lo permiten?
No entiendo, necesito especificar el token del portador de alguna manera, incluso en los documentos dice que lo coloque en el encabezado de Autorización, ¿por qué no lo permiten?
Este es un problema diferente, no está relacionado en absoluto con el token Bearer. Por el error que está recibiendo, significa que el origen que está utilizando para obtener la API de Slack no es de confianza ( http://127.0.0.1:5500 ), no hay nada que pueda hacer desde el navegador ya que esto es una política que proviene del servidor que define los orígenes autorizados. ( Obtenga más información sobre CORS aquí ) Dado que no creo que esto sea compatible con Slack, deberá obtener la API de Slack del servidor.
Una forma de resolver esto es exponer una API de back-end, por ejemplo:
| Publicar un mensaje en Slack | Ejecutar en Fusebit |
|---|
router.post('/api/tenant/:tenantId/test', async (ctx) => { // Create a Slack client pre-configured with credentials necessary to communicate with your tenant's Slack workspace. // For the Slack SDK documentation, see https://slack.dev/node-slack-sdk/web-api. const slackClient = await integration.tenant.getSdkByTenant(ctx, connectorName, ctx.params.tenantId); // Get the Slack user ID associated with your tenant const slackUserId = slackClient.fusebit.credentials.authed_user.id; // Send a Direct Message to the Slack user const result = await slackClient.chat.postMessage({ text: 'Hello world!', channel: slackUserId, }); console.log('message response', result.message); ctx.body = { message: `Successfully sent a message to Slack user ${slackUserId}!` }; });