Botをより人間っぽくする


概要

せっかくBotを作ってもユーザーに無視されたら意味がありません。
そこでBotをより人間っぽくすれば、ユーザーが感情移入してくれてBotの発言を無視しづらくなるのでは?と考えました。

やったこと

  • アイコン画像を設定する
  • 文章で発言する
  • お礼を言う(返事をする)
  • 絵文字を使う

4点ほどBotを人間っぽくするために工夫してみました。
具体的な設定方法などはSlack + Botkit (https://github.com/howdyai/botkit) が前提です。

アイコン画像を設定する

風景や模様よりも人が「顔」と認識できるものが良いです。それもちょっと馬鹿っぽいのが良いと思います。
馬鹿っぽければ不具合で変な動きをしても何となく許せるからです。

SlackのBotのアイコン画像はアプリ上で
1. ユーザークリック
2. 「View Profile」クリック
3. 「Configure」クリック
4. 設定用のWebページのCustomize Iconで画像またはemojiを選択
で可能です。

仕事で運用しているBotのアイコンはemojiの「:robot_face:」を使ってます。

文章で発言する

例えば障害発生時の通知として

障害発生
Server:A
LA:10

よりも

Server Aで障害が発生しました!!LAは10です。

とかの方が何となく注目しちゃうと思います。(たぶん・・・)

お礼を言う(返事をする)

ちょっとした会話が成り立つだけで人間っぽさがぐっと増します。
例えばBotに対して「対応しました」と言った時に、Botに「ありがとうございます」というようなお礼を言わせるためには次のようにします。

controller.hears(['(.*)対応しました(.*)'],'direct_message,direct_mention,mention',function(bot, message) {
    bot.reply(message, 'ありがとうございます');
});

ただし上記の方法だと一瞬でお礼が返ってきてしまい、ちょっと人間っぽさが足りません。
そこでreplyWithTypingを使うと、返事を少し遅延させ、さらにタイピング中を表す「xxx is typing」も表示させることができます。

controller.hears(['(.*)対応しました(.*)'],'direct_message,direct_mention,mention',function(bot, message) {
    bot.replyWithTyping(message, 'ありがとうございます');
});

絵文字を使う

雰囲気を和ませるために絵文字を使います。
文章の最後に「:smiley:」等を挿入すればいいだけですが、毎回同じ絵文字だとつまらないので使う絵文字をランダムに変えてみます。

controller.hears(['(.*)対応しました(.*)'],'direct_message,direct_mention,mention',function(bot, message) {
    bot.replyWithTyping(message, 'ありがとうございます' + getRandomSmileEmoji());
});

function getRandomSmileEmoji(){
    var emojiArray = [
        ':grinning:',
        ':grimacing:',
        ':grin:',
        ':smiley:',
        ':smile:',
        ':laughing:',
        ':innocent:',
        ':wink:'
    ];
    var random = Math.floor(Math.random() * emojiArray.length);
    return emojiArray[random];
}