Node-RED의 Slack bot에서 게시물 게시

소개



이 기사에서는 Slack의 채팅 봇에서 Slack 포스트 기능을 사용하여 메시지를 게시하는 방법과 Node-RED를 사용하여 구현하는 방법을 설명합니다.

Node-RED에서 Slack bot 2019년 8월 현재 하지만 소개되고 있습니다만, Node-RED를 사용한 Slack 챗봇에 관한 입문 기사는 항시 많이 존재합니다.
한편, 다음 단계로서 「포스트의 투고」나 「버튼 첨부 메시지의 투고」가 되면 Node-RED에서의 사례는 극단적으로 줄어드는 인상이 있습니다.
그래서, 이 기사에서는 굳이 Node-RED로 「포스트의 투고」를 구현해, 보다 다기능인 챗봇을 간단하게 만드는 것을 목표로 합니다.

채팅봇 준비



첫째, 단순히 메시지를 교환하는 슬랙 채팅봇을 준비합니다.
위에서 소개한 「 Node-RED에서 Slack bot 2019년 8월 현재 」를 참고로 하는 것으로 간단하게 작성 가능합니다.

흐름 생성



이제 게시물을 게시하는 흐름을 만듭니다. 관련 부분의 흐름은 다음과 같습니다.



아래에 해당 플로우의 샘플 코드를 첨부합니다. 필요한 경우 가져오고 확인합니다.
[{"id":"a75b8360.fef26","type":"slack-web-out","z":"ae1b93ae.d3a45","client":"55c48043.4e368","name":"","x":460,"y":100,"wires":[["38371037.f228e"]]},{"id":"84f9ad5b.ada2e","type":"function","z":"ae1b93ae.d3a45","name":"返信文","func":"msg.topic = \"files.upload\";\nmsg.payload = {\n    \"channels\": msg.payload.user,\n    \"title\": msg.payload.title,\n    \"content\": msg.payload.contentmd,\n    \"initial_comment\": msg.payload.comment,\n    \"filetype\": \"post\"\n}\nreturn msg;","outputs":1,"noerr":0,"x":290,"y":100,"wires":[["a75b8360.fef26"]],"info":"**使い方**\n\n- `msg.payload.contentmd` : ポストにて送りたい内容を記述します。\n- `msg.payload.comment` (optional): ポストと一緒に送りたいメッセージがある場合、ここに記述します。\n- `msg.payload.title` (optional): ポストのタイトルを記述します。\n- `msg.payload.user` : メッセージのSlack宛先を記述します。\n"},{"id":"38371037.f228e","type":"debug","z":"ae1b93ae.d3a45","name":"debug slack post","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":670,"y":100,"wires":[]},{"id":"4a3d61ee.9cc87","type":"slack-rtm-in","z":"ae1b93ae.d3a45","client":"55c48043.4e368","name":"","events":"message","x":100,"y":100,"wires":[["84f9ad5b.ada2e"]]},{"id":"55c48043.4e368","type":"slack-config","z":"","name":""}]

slack-rtm-in 노드



입구가 되는 노드는 메시지만을 교환하는 기존의 채팅 봇과 동일한 "slack-rtm-in"노드를 사용합니다.

slack-web-out 노드



게시물 게시를 위해 'slack-rtm-out' 노드가 아닌 'slack-web-out' 노드를 사용합니다.
이 노드 자체의 설정은 「slack-rtm-out」노드와 같고, Token만을 설정하면 OK입니다.

"function"노드 (답장이 표시된 노드)



게시물을 게시하려면이 기능 노드가 중요합니다.
결론부터 말하면, 포스트 투고할 때, msg.topicmsg.payload 는 이하와 같이 기술합니다.
msg.topic = "files.upload";
msg.payload = {
    "channels": "メッセージ宛先",
    "title": "ポスト記事タイトル",
    "content": "ポスト記事内容",
    "initial_comment": "ポストと一緒に送るテキスト",
    "filetype": "post"
}
return msg;
msg.topic 에 지정하고 있는 files.upload 는, 포스트를 투고할 때에 사용하는 Slack API 의 메소드입니다.files.upload API의 사양은 여기 에 공개되고 있습니다.

지금까지의 설명으로 이미 알고 있을까 생각합니다만, 상기의 설명은 이하의 룰에 따르는 것으로 Slack API의 각종 메소드를 사용할 수 있는 것을 의미하고 있습니다.
  • msg.topic : Slack API가 제공하고 있는 메소드명을 지정한다. Slack API의 메소드는 여기 (API Methods) 로 공개되고 있습니다.
  • msg.payload : 각 메소드의 Arguments를 참조해, 필요한 키워드를 지정한다.
  • contentinitial_comment 에 「안녕하세요」라고 지정해, 「slack-web-out」 노드로 송신한 메세지는 이하입니다. 확실히 포스트 투고 할 수 있습니다.


    끝에



    이번은 「포스트의 투고」방법에 초점을 맞추어 설명했습니다. 다만, Slack API 메소드의 사용법을 하나 기억한 것으로, 다른 메소드 모든 사용법을 기억했다고도 말할 수 있습니다. 이렇게 하면 여러분의 채팅봇이 더욱 기능을 향상시킬 수 있을 것입니다.

    다음 번이라면 "버튼이있는 메시지를 게시하는 방법"을 작성하고 싶습니다.

    좋은 웹페이지 즐겨찾기