Slackで簡単に投票できるBot "Polly"のレシピ

この記事は[Slack Advent Calendar 2017](https://qiita.com/advent-calendar/2017/slack)の5日目の記事です。Slackと連携して気軽に投票を作成できるアプリ、[Polly](https://www.polly.ai)の使い方について解説します。

昨日の記事は、@tamanugiさんの「[ElixirでGithub Trendを投稿してくれるBotを作ってみた](https://qiita.com/tamanugi/items/4c0359ebb5a8b2d89803)」でした。明日の記事は@Np_Ur_さんの「[Google AnalyticsのデータをSlackにポストするBot](http://www.randpy.tokyo/entry/slack_google_analytics)」です。
なんとBotを自作する二人に挟まれて既存のBotの解説をすることとなり大変恐縮ですが、分かりやすい記事を心がけようと思います。

![polly-overview](https://qiita-image-store.s3.amazonaws.com/0/150557/c84772b7-ab30-0b4e-62c6-c5e9687ea97e.png)

## 概要
Pollyについては、既に先人の方々が記事を書いておられます。

- [Polly（青い鳥）ですっごく簡単にSlackでアンケートを取るよ](https://qiita.com/shitake/items/91cfffcc1d7d3ae2179c)
- [Slackの投票機能](https://qiita.com/mym/items/295878edfe5958158bf7)
- [Slackの投票アプリPolly](http://bibinbaleo.hatenablog.com/entry/2017/04/24/220333)

ただ過去記事の頃とは細かいUIが変わっていて、私の所属するチームで**操作ミスが頻繁に起きる**などしたため、2017年12月時点の使い方を見ていきたいと思います。

以下の説明より詳しい使い方を[公式のヘルプ](https://www.polly.ai/help/slack)で閲覧できます。英語ながら結構見やすいのでそちらもご確認ください。
また、Pollyは活発に機能更新を繰り返しており、最新の情報は公式ヘルプや[公式ブログ](https://www.polly.ai/blog)で入手するのが確実です。

## 使用サービス・ソフト
- Slack
    - 設定が英語のままだった為スクリーンショット等は英語版のもの
    - Slackの基本的な用語は特に説明なしで使うのでご了承ください
- Google Chrome
    - Pollyの導入やダッシュボードの操作をする際に使います

## なぜ投票Botが必要か
チームでSlackを使っていると、**投票やアンケート**をしたくなる場面がありますよね。すぐに思いつく方法は、[Slackのリアクション機能](https://get.slack.help/hc/ja/articles/206870317)でemojiをつけてもらうことです。
 
![emoji](https://qiita-image-store.s3.amazonaws.com/0/150557/4be1cea1-7643-0eb0-0932-d7d4a1790faa.png)

ただ、emojiを使った投票にはいくつか弱点があります。

1. **投票を始める人の負担**
    - 特に選択肢が多いと、その数だけemojiをポチポチ打って準備するのが大変です
1. **投票に気づいて貰えない**
    - リアクション機能は投票専用ではありません
    - 日常的にemojiが飛び交うチームでは、投票を呼びかける投稿が埋もれてしまうことも
1. **emojiでは自由度が高すぎる**
    - 全員が説明した通りのemojiをつけてくれるとは限りません(画像は流石に誇張ですが……)
    - もし投票実施側が想定してないemojiを打たれると、集計が大変です

![emoji-ng](https://qiita-image-store.s3.amazonaws.com/0/150557/a5fba996-c9ff-7118-f72d-e3d1cf15858d.png)

というわけで、**投票には投票専門のBotを使いましょう！**

## Pollyとは
[Polly for Slack](https://www.polly.ai/slack-poll)は、Slack上で簡単に投票(**Poll**と呼ばれます)を行えるSlack Appです。
有料プランもありますが企業向けの機能が増えるだけで、無料でも十分な機能を無制限に利用できます。

## 導入
導入は簡単で、[ここ](https://www.polly.ai/slack-poll)にアクセスして`Add Polly to Slack`を押すだけです。複数のワークスペースに所属している方は、認証画面で導入先を間違えずに選んでくださいね。

![polly-install](https://qiita-image-store.s3.amazonaws.com/0/150557/95b0e238-9754-9be4-4de3-3505d52c8aa3.gif)

すると、Pollyという名前のBotがDMを送ってくれて、導入完了となります。

![polly-dm](https://qiita-image-store.s3.amazonaws.com/0/150557/e16a1bf9-365b-85ee-d604-c331b9e9f3d7.png)

## Pollを作成する
### 基本的なPollを作ってみよう
Poll(投票)を作成する際は、Slackの**スラッシュコマンド**を使います。スラッシュ(`/`)に続けてコマンド文字列を入力すると、メッセージを送る代わりにSlack自体を操作できるというものです。
Pollyのコマンドは`/polly`ですが、短縮版の`/poll`も使えます。

実際にPollを作ってみましょう。PollyからのDMに例として書いてある

```/polly How would you rate this meeting?```

を、Pollを投下したいチャンネルにコピペして送信します。

![poll-command](https://qiita-image-store.s3.amazonaws.com/0/150557/b5c94ed0-392d-4f6d-3998-1545e12b2c01.gif)

すると、Pollの設定メニューが出てきます。`Only visible to you`と上に出ているうちは**作成が完了していない**ことに注意してください。
"Poll Type"を"Agree/DisAgree"に変更します。上段の青い帯がついた部分にプレビューが出るので確認しておきましょう。

`Submit to Channel`という緑色のボタンを押すと、実際に指定したPollがPollyによって投稿されます。質問への賛同度合いを5段階で選んで、ボタンを押せば結果が下に表示されます。

### Poll Typeを変更してみよう
以下が選べます。

Poll Type        | 回答形式
-----------------|------------------
 0-to-10         | 11段階の数字
 1-to-5          | 5段階の数字
 Agree/Disagree  | 賛同度合い5段階
 Multiple Choice | 作成者が選択肢を用意
 Open Ended      | 文章

この中で圧倒的に使う機会が多いのは**"Multiple Choice"**です。コマンドで作成する時のデフォルトもこれですし、特に日本語話者としては選択肢は日本語にしたいですよね。

重要な注意点として、**"Multiple Choice"は「複数回答」ではありません**。以前のデザインでは最初の設定画面で複数回答可にできましたが、**現在は複数回答にする場合"Advanced Options"**を呼び出す必要があります。
私の所属チームでは週に一度は誰かがミスっているので強調しておきました。

設定画面で`+ Add Options`ボタンを押すと、一度に4つまで選択肢を記入できます。最下部の"Audience can..."では、他のメンバーに選択肢の追加を許可できます。

![poll-multi-choice](https://qiita-image-store.s3.amazonaws.com/0/150557/747d45fe-6b19-d749-61d6-89324c737dee.png)

コマンドラインが大好き or GUIポチポチが面倒な方は、コマンド入力時に選択肢を`""`で挟んで渡してあげてください。

```/polly "ランチ何がいいですか？" "ラーメン" "うどん" "ハンバーガー"```

これで上の画像で行ったことと等価です。ちなみに、選択肢には**emojiを使用することもできます**。装飾に活用しましょう。

### Pollのスケジュールを設定しよう
Poll Typeの右横のメニューでは、**Pollの投下される時間帯を操作**できます。これはあれこれ説明するより実際に触ってみるのが一番わかりやすいでしょう。

![poll-schedule](https://qiita-image-store.s3.amazonaws.com/0/150557/5628f316-390c-7ad0-4d3d-0a9de221aba0.png)

指定した時刻にPollを開始/終了したり、一定頻度で同じPollを投稿したりと大変便利です。毎週開かれるイベントの出欠確認など、ついつい忘れてしまいそうなタスクもPollyが勝手にやってくれます。

### Advanced Optionsを触ってみよう
これまでの方法で作成したPollは、

- 複数回答不可
- 結果は全員に見える
- 誰が何に投票したか見える
- コメントが公開される

という仕様になっています。ここを変更したい場合は`Advanced Options`ボタンを押して高度な設定を弄りましょう。

設定は英語ですが、雰囲気で分かると思います。複数回答にする場合は`One Vote Max`のチェックを外せばよいです。画像は複数回答のできる匿名投票にした例です。

![poll-advanced](https://qiita-image-store.s3.amazonaws.com/0/150557/bfea06d3-9609-dd1b-4f2a-6dfab254f5bd.png)

**"Poll Audience"**というメニューもその下に出てきます。ここでは今いるのとは別のチャンネルやDM、グループDMにPollを送信できます。
また、Submitの右に出てくる`Send via DM`ボタンを押すと、チャンネルに投稿されずに**対象者のDMにPollが送られます**。これは間違って押してしまうミスが起きがちなので要注意です。

### WebサイトでPollを作成してみよう
[app.polly.ai/dashboard](https://app.polly.ai/dashboard)にアクセスすると、Pollyのダッシュボードが開きます。左の`Create Poll`なるボタンから作成画面に遷移できます。

![web-create](https://qiita-image-store.s3.amazonaws.com/0/150557/a48501b0-97a3-8ffe-db82-2057b91a5485.png)

Slack側の作成画面もかなり進化してきていますが、WebのUIも洗練されて使いやすくなりました。**凝った設定を駆使する場合**は、Webから操作した方が楽だと思います。

![web-create-setting](https://qiita-image-store.s3.amazonaws.com/0/150557/f05e2b5a-e8ee-5a8b-a597-c049e20a5f07.png)

## 作成したPollを操作する
### 結果を確認してみよう
Pollを投稿しても、数日後には流れて行ってしまいます。頑張ってログを遡ったり、ピン留めしてすぐ飛べるようにするのも手ですが、ここはPollyの機能でスマートに結果を閲覧しましょう。

#### コマンドで
どこでもいいので、`/polly results`と入力します。するとPollyが**自分だけに見える形で結果を表示**してくれます。
上部のドロップダウンメニューで結果を見たいPollを選択しましょう。

![poll-results](https://qiita-image-store.s3.amazonaws.com/0/150557/a413540f-8f31-4d9d-4a65-67a3ae7d6de9.png)

#### Webサイトで
[ダッシュボード](https://app.polly.ai/dashboard)にはPollの結果が見やすく一覧で出てきます。検索窓で絞り込んだり、自分のPollだけ表示させることもできます。

ここで注意したいのが、**PrivateなチャンネルやDMグループ**の扱いです。公開チャンネルのPollが一覧に出るのは当然ですが、非公開のチャットで作成されたPollの

- **チャンネル名**(グループDMなら参加者名)
- **作成者名**
- **選択肢**

が外部の人にも見えてしまいます。
以前は質問文まで丸見えだったのが、8月ごろから代わりに"poll question"と表示されるようになりました。とはいえ「どんな名前のグループで」「どんな選択肢で投票があったか」はバレる可能性があるので、**公開範囲外の人に見られて困る内容をPollyに渡すのはやめましょうね**。

![poll-result-private](https://qiita-image-store.s3.amazonaws.com/0/150557/ea764380-c4dd-954b-c20f-6e74a47c41b6.png)

### Recurring Pollを編集しよう
Pollyの仕様上、**一度作成したPollは編集できません**。ただし、一定期間おきに投稿されるRecurring Pollだけは、**今後作成されるPollの設定を変更できます**。

[ダッシュボード](https://app.polly.ai/dashboard)を開きます。Pollが多くて見つけにくければ右上Viewsから"Recurring Only"を選択してください。

![poll-edit](https://qiita-image-store.s3.amazonaws.com/0/150557/632ec3ad-b3bf-9981-4dba-82a7bb4a3c2e.png)

すると、基本的にはPollの作成画面と同じものが開き、各種設定を変更できます。最上部の`Active | Disabled`ボタンを使うと、設定を残して一時的にPoll作成を止めることが可能です。
もう使わないのであれば、一番下までスクロールして`Delete Poll`しましょう。

### Pollyコマンドを使いこなそう
`/polly`コマンドには他にも多彩な機能があります。Botと会話しながら使うことも、コマンドを覚えて素早く呼び出すこともできます。

#### ボタン編
どこでもいいので、`/polly`とだけ入力してEnterを打ってみましょう。Pollyの導入直後と同じメッセージをPollyが表示してくれます。

![polly-dm](https://qiita-image-store.s3.amazonaws.com/0/150557/e16a1bf9-365b-85ee-d604-c331b9e9f3d7.png)

中段に並ぶボタンから、Pollの「**削除**」「**結果閲覧**」「**終了**」「**リマインド**」「**共有**」ができます。どのメニューも、基本的には操作したいPollを選択してから内容を指定する流れになります。

「リマインド」と「共有」の使い分けがわかりにくいかもしれません。リマインドは投票を促すため**対象者に投票メッセージのリンクを送ります**。共有は**結果だけを含んだ新たな投稿を作成**します。
面倒なら手動でリンクをコピペしてもいいと思います(Botに催促された方が気分を害しない……かも)。

#### コマンド編
`/polly commands`でコマンド一覧が出てきます。例えば、`/polly share`で共有、`/polly delete`で削除をそれぞれ開始できます。
種類も多くありませんから、使っているうちに覚えていくでしょう。

## 新しい機能を利用する
Pollyは最近デザインや機能が刷新され、新機能も増えました。まだ日本語の使ってみた記事が見当たらないうえ、筆者も使ったことがないのでざっと紹介するだけになります。

### サーベイ
`/polly survey`コマンドを使ったり、WebサイトのPoll作成画面で`Survey`を選択することで作成できます。

Surveyは複数の質問をまとめて**より本格的なアンケート**を実施できるものです。Google Formsのようなイメージですね。

![survey-test](https://qiita-image-store.s3.amazonaws.com/0/150557/b0c9a5d8-209a-0d8c-5dd1-f04d80278abd.png)

作成すると、通常のPollと同様にメッセージが投稿されます。質問数や想定回答時間も出てきて親切な感じです。`Start Survey`を押したら質問がPollyとのDMに出てくるので順番に回答します。

### テンプレート
PollやSurveyをテンプレートとして使い回せます。さらには、[app.polly.ai/templates](https://app.polly.ai/templates)で公式が用意したテンプレートを利用することもできます(そのままだと当然英語ですが……)

テンプレートを保存したい場合は、Webの作成画面でPoll(Survey)を設定した上でページ下部の`Save as template`を押しましょう。ダッシュボードで`Library`を選ぶと保存したテンプレートが表示され、クリックで作成画面に入ります。

![template-lib](https://qiita-image-store.s3.amazonaws.com/0/150557/4d6f6d92-1e17-fdd8-6956-fc046267a34b.png)

Slackからも`/polly template`でテンプレートを使えます。ただし、編集せずそのまま投稿することしかできません(編集する場合はWebサイトに誘導されます)。

テンプレートは開発中の機能で、まだ編集や削除ができません。
今後さらに使いやすくなると思うので、期待しましょう！