柔軟なトークの取り扱い #
はじめに #
direct にはトーク種別としてペアトーク (roomType = 1
) とグループトーク (roomType = 2
) の 2 種類があります。
ペアトークは 1 対 1 の 2 名しかいないトークであり、グループトークは基本的に 3 名以上のトークとなりますが、いくつかの手順を踏むことで「2 名のグループトーク」といったものが出来上がってしまう場合があります。この「2 名のグループトーク」は現行の direct において仕様上問題なく、正常に動作します。
ボットの予期しない動作を防ぐためにはあらかじめ「2 名のグループトーク」を想定した実装が必要となります。 この文書ではトークの状態を判定して適切な処理を行うための実装例を示します。
対応方法 #
パターン 1: ボットをペアトークへのみ参加させ、グループトークへの参加を禁止したい場合 #
ボットがトークへ参加すると join
イベントが発生します。このときトークの種別を取得できるため、この情報を使ってユーザーにペアトーク作成を促します。
例えば以下のようにすると、ボットがグループトークに参加するとメッセージを投稿し、3 秒後に自動的にトークから退出します。
robot.join((res) => {
if (res.message.roomType !== 1) {
res.send("このボットはペアトークでのみ機能します。ペアトークを作成してください。3 秒後に自動的に退出します。");
setTimeout(() => res.leave(), 3000);
return;
}
// ペアトークの場合は挨拶する
res.send("こんにちは");
});
パターン 2: 参加者が 2 名のトークであれば (ペア/グループ関係なく) 動作させ、参加者が 3 名以上のグループトークであれば警告を出したい場合 #
トーク種別に関係なく res.message.roomUsers
により現在の参加メンバーを知ることができます。この情報を使うことで「参加者が 2 名の場合にのみ動作する」といったことが実現出来ます。
robot.hear(/ECHO (.*)$/i, (res) => {
if (res.message.roomUsers.length !== 2) {
res.send("このボットは 2 名が参加するトークでのみ機能します。このトークの参加者を減らすか、ボットをペアトークに参加させてください。");
return;
}
// このトークは参加者 2 名 なので反応する
res.send(res.match[1]);
});
このとき、respond
ではなく hear
を使うことに注意してください。hear
はペアトークやグループトークに関係なく反応します。
動作確認 #
「2 名のグループトーク」が発生するケースについて、ボットを動作確認する方法を説明します。
ケース 1: ボットが 1 名のグループトークに参加することで 2 名のグループトークが作成される状況 #
- ボットではないユーザー 2 名 (User1, User2) と、自身 (動作確認を実施する人) のユーザー (User3) とで、3 名が参加する通常のグループトークを作成します。
- グループトーク作成後、User1 と User2 にトークから退出してもらいます。
- User3 のみが参加した「(トークメンバーなし)(1)」というグループトークになります。
- 上記グループトークに動作確認したいボットを追加します。
- 追加したタイミングでボットに
join
イベントが発生しますので、このイベントに対するボットの動作を確認します。
ケース 2: 参加者がグループトークから退出することで 2 名のグループトークが作成される状況 #
- 以下の 3 つのユーザーで通常のグループトークを作成します。
- User1: 動作確認したいボット
- User2: 自身 (※ 動作確認を実施する人) のユーザー
- User3: 上記以外のユーザー 1 名
- グループトーク作成後、User3 にトークから退出してもらいます。
- 動作確認したいボットと自身のみが参加するグループトークになります。
- direct からメッセージを送信してボットの動作確認をします。