Estoy trabajando en una aplicación de holgura de Node.js que contiene un usuario bot. Pero no sé cómo responder a un usuario con un mensaje enriquecido como bot.
Ejemplo:
Puedo responder con mensajes simples sin problemas usando este código:
import * as SlackClient from '@slack/client'; slackBot = new SlackClient.RtmClient(bot_access_token) slackBot.on(SlackClient.RTM_EVENTS.MESSAGE, message => { slackBot.sendMessage('Hello', message.channel); }); slackBot.start();Pero la API RTM no admite mensajes enriquecidos:
La API RTM solo admite la publicación de mensajes simples formateados con nuestro modo de formato de mensaje predeterminado. No admite archivos adjuntos ni otros modos de formato de mensajes. Para publicar un mensaje más complejo como usuario, los clientes pueden llamar al método chat.postMessage Web API con as_user establecido en verdadero.
así que traté de usar el cliente web para responder con mensajes enriquecidos y me mudé a este código:
import * as SlackClient from '@slack/client'; slackWebClient = new SlackClient.WebClient(access_token); slackBot = new SlackClient.RtmClient(bot_access_token) slackBot.on(SlackClient.RTM_EVENTS.MESSAGE, message => { slackWebClient.chat.postMessage(message.channel, 'Hello', { attachments: myAttachments }); }); slackBot.start(); este enfoque funciona cuando pruebo el bot con mi cuenta. Pero si otro usuario del equipo escribe un DM al bot, slackWebClient.chat.postMessage falla con el error error: channel_not_found . (También traté de agregar un parámetro as_user: true , pero el comportamiento es el mismo, excepto que los mensajes se firman con mi nombre en lugar del nombre del bot).
Resuelto: creé una instancia de SlackClient.WebClient con el token de acceso de OAuth de usuario de bot en lugar del token de acceso de OAuth (también con as_user establecido en verdadero) y ahora funciona según lo previsto. No sabía que el token de acceso de OAuth del usuario de bot también se puede usar como un token para el cliente de API web.
Código de trabajo:
import * as SlackClient from '@slack/client'; slackWebClient = new SlackClient.WebClient(bot_access_token); slackBot = new SlackClient.RtmClient(bot_access_token) slackBot.on(SlackClient.RTM_EVENTS.MESSAGE, message => { slackWebClient.chat.postMessage(message.channel, 'Hello', { attachments: myAttachments, as_user: true }); }); slackBot.start();