Slack의 WebAPI를 직접 호출 할 때 어려움

소개




회사에서 Unibo 이라는 AI 로봇을 다루고 있는데, 여기 의 기사에 있는 대로 Slack과 연결해 보자는 것이 되었습니다.
하지만, 항에 있는 Slack과 연결해 본 계의 기사는 처마 같은 런타임 환경용의 라이브러리를 사용하고 있는 것뿐. .
Unibo는 직접 소스에서 프로그램을 실행할 수 없으며 SkillCreator(Node-RED 기반)로 액션을 정의할 수 있지만, 원래의 Node-RED처럼 자유롭게 노드를 추가할 수 있습니다. 할 수 없는 제약이 있습니다.
그래서 Slack 공식 API 문서를 보면서 직접 API를 HTTP Request하도록 구현하는 방법? 에서 약간 빠져서 기사를 일으켰습니다.

어려움



Unibo는 로봇이므로 BotToken을 획득하고 Bot으로 메시지를 Slack에 던지지만 API는 chat.postMessage를 사용합니다.
그래서 공식 API 문서에서는 이렇게 썼습니다.
chat.postMessage


그래서 token은 channel과 같이 요청 파라미터로 송신해 버릴 것 같네요.
msg.payload = {
    "token": "xoxb-...",
    "channel": "CDVSKQUAZ",
    "text": "hello!"
};
return msg;

그래서, 이것을 하면, Slack 서버로부터는, 이런 느낌에 톤으로 됩니다.
{
    "ok": false,
    "error": "not_authed",
    "warning": "missing_charset",
    "response_metadata": {
        "warnings": [
            "missing_charset"
        ]
    }
}

인증되지 않았습니다!

해결 방법



결국, token은 OAuth (인증의 구조)의 것이므로, 이것에 따라 HTTP Request 해 줄 필요가 있습니다.
즉, 헤더에 "Authorization"을 지정해 줍니다.
SkillCreator(Node-RED)라고 이런 느낌.
msg.headers = {
    "content-type": "application/json",
    "Authorization": "Bearer xoxb-..."
};
msg.payload = {
    "channel": "CDVSKQUAZ",
    "text": "hello!"
};
return msg;

"Bearer"에 대해서는 이 근처에 기사가있었습니다.

요약



라이브러리는 편리합니다.
하지만 라이브러리를 사용하지 않고 공식 WebAPI를 그대로 사용할 수 있습니다.
그럴 때는 초심을 잊지 말고.
문서는 제대로 읽을 수 있습니다.



htps : // 아피. scck. 코 m / ぇ b # 포스 친 g_j


이상입니다.

좋은 웹페이지 즐겨찾기