LoginSignup
5
3

More than 3 years have passed since last update.

Slack から LINEWORKS にメッセージ転送する Bot 作ってハマったこと

Last updated at Posted at 2020-02-11

概要

Slack の Events API をつかった Bot 開発に挑戦しました。ハマった内容をまとめます。

Bot 仕様

Slack から LINE WORKS へメッセージを転送します。
Slack Bot が登録されているプライベートチャンネルに投稿されたメッセージを
LINE WORKS 側の Bot が受取り、特定のユーザに通知するというものです。

システム構成は以下のような感じです。Bot プログラムは AWS Lambda で実装しました。

Untitled Diagram.png

(なぜこんなことをしているか)
社内標準のチャットツールは LINE WORKS なのですが、私の所属する情シスグループでは slack を常用しており、特に社内システムからのアラートの通知先として活用しています。今回、とある社内組織にシステムのアラートを共有する必要があり、かつ標準ツールである LINE WORKS をつかってもらいたいという意図から、勉強を兼ねて Botを作ることにしました。

Slack Event API とは

Slack にメッセージが投稿された、ユーザーがワークスペースに登録されたといったイベントをフックする API です。API のスコープやメソッドを使い分けることで、特定のチャンネルのイベントに限定したり、ワークスペース全体を監視したりすることができます。

ハマったこと

Slack Bot が所属していないチャンネルのメッセージも転送されてしまいました。
設定によってプライベートチャンネル限定だったり、パブリックチャンネル限定だったり。

原因

Slack API の「Event Subscriptions」の各種設定が誤っていました。

  1. 設定「Subscribe to bot events」と「Subscribe to events on behalf of users」の違い
  2. イベント「message.groups」と「message.channels」の違い

をよくわからないまま、なんとなく設定していたことにより、不安定な振る舞いをしていました。

1. 設定「Subscribe to bot events」と「Subscribe to events on behalf of users」の違い

前者の「Subscribe to bot events」はワークスペース上の様々なイベントを対象とします。例えばワークスペース名の変更を検知する「team_rename」イベントや"誰かに"DMが投げられたことを検知する「message.im」などです。これらのイベントは、特定のユーザーやチャンネルに限定されず、すべからく拾われます。

一方、後者の「Subscribe to events on behalf of users」は招待されたチャンネルに関するイベントのみを対象とします。

2. イベント「message.groups」と「message.channels」の違い

groups と channels、一見同じものを指しているように見えますが

  • groups = プライベートチャンネル
  • channels = ワークスペース上のすべてのチャンネル(パブリック、プライベート関係なし)

となります。

Bot 仕様である「Slack Bot が登録されているプライベートチャンネル」に限定する場合は
"Subscribe to bot events" でイベント"message.groups" を選択しなければなりません。

キャプチャ.PNG

一方、私は "message.channels" を選択していました。一見似ていますが、groups はプライベートチャンネルのみ、channnels はパブリックチャンネルを含むすべてとなります。このため、Bot を登録しているチャンネル以外のメッセージもみだりに転送されてしまう事態に。

まとめ

  • groups = プライベートチャンネル
  • channels = ワークスペース上のすべてのチャンネル(パブリック、プライベート関係なし)
  • ドキュメント読め

参考

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3