Slash CommandsとGASで緊急連絡メールを送る

#はじめに
* グループの緊急連絡網の手段をメール→slackに移行を試みようと思ったのですが一部slackの導入ができない人もいたため、メール対応も残しておく必要がありました。
* ただ、slackに投降する作業とメール送信作業を別々に行うのがめんどくさかったたため、slack上から同時に行えるようしました。

#スラッシュコマンド作成の流れ
* [Slash CommandsとGASでSlackのオリジナルコマンドをつくる](https://qiita.com/chikuwa111/items/7a1a349b82318a5861cc)を参考にさせていただいきました、大変わかりやすくかったです。
* 本ページでは重複する部分を一部省かせていただいております。

#今回作るもの
* `/emergency-mail [メール内容]`を入力すると[メール内容]をタイムラインに投降しつつ、登録メールアドレスに送信する仕組みです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319430/6dc4e844-ffa5-2846-3799-4c78c30c5e56.png)

* 送信するとslack／メールにはそれぞれ下記のように配信されます。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319430/34c3e5c3-dc59-d720-e3fb-8393f29cc31b.png)|
|:-:|

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319430/3d23b67c-5ab3-9d8b-a762-a24fcc30aa4d.png)|
|:-:|

#コマンドの作成

##GASのプロジェクトを作成する
* https://script.google.com を開いてみましょう。
* Googleアカウントにログインしている状態であれば、新規のプロジェクトがつくられるはずです。
* 画面上にエディターが表示されます。ソースは下記のようにしました。

```javascript:コード.gs
function send_A_mail(user, memo) {
  var to="*******@yahoo.co.jp,*******@gmail.com"; // 送信先メールアドレスはカンマでつなぐ
  var from="*******@gmail.com"; // 送信者メールアドレス（作成者のgmailアドレスを入力）
  var sender=user; // 送信者名
  var subject="テスト配信_緊急連絡網（slackから転送）"; // 件名
  var body="テスト配信_緊急連絡網（slackから転送）になります。\n"
  + "---------------\n"
  + memo + "\n"
  + "---------------\n"
  + "詳細はslackにてご確認ください。https://********.slack.com/ \n"
  + "メールで回答する場合は右記に返信ください。 ************@gmail.com"
  GmailApp.sendEmail(to, subject, body, {from: from, name: sender});
}

function doPost(e) {
  var user = e.parameter.user_name;
  var memo = e.parameter.text;
  var response = { "text" :  "---以下転送内容でメール送信を行いました---\n","response_type" : "in_channel" };//
  var verificationToken = e.parameter.token;
  if (verificationToken != '***********') { 
    throw new Error('Invalid token');
  }
  send_A_mail(user, memo);
  response.text = "テスト配信_緊急連絡網です。\n" + memo
  return ContentService.createTextOutput(JSON.stringify(response)).setMimeType(ContentService.MimeType.JSON);
}
```
* GmailApp.sendEmailの使い方は次を参照ください。https://developers.google.com/apps-script/reference/mail/mail-app
* スラッシュコマンドのパラメータは次を参照ください。https://api.slack.com/interactivity/slash-commands#app_command_handling
* `"response_type" : "in_channel"`を指定することでslackのタイムラインにも表示されます。指定しないと送信者にのみ表示になってしまいます。
* 入力が終わったら、メニューの「公開」=>「ウェブ アプリケーションとして導入...」のように進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319430/a91b3574-4a8c-ecbe-3214-0b5a18c02f44.png)

* 3つ目のアプリケーションにアクセスできるユーザーを**全員（匿名ユーザーも含む）**または**Anyone,even anonymous**に忘れずに変更しましょう。
 * スラッシュコマンドを実行して“http_client_error”が返ってきたときはここを疑いましょう。
* また、ソース内容を更新した時には2つ目のProject version　は必ず**New**を選びましょう。
* 「導入」or「更新」を押せば終了を押す。
* 外部サービスへの接続の許可を聞かれるので　「詳細」　→　「プロジェクト名（安全ではないページ）に移動」とクリックして「許可」する。もう一度「許可」をクリックしてOK。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319430/12a6799f-36a6-d207-f1f5-5a1e95c13453.png)

* 下記画面が表示されるので　**Current as web app URL**　をメモしておく。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319430/fb659f6e-a0ec-4f06-b284-15c78c4c0bf7.png)



##Slack Appをつくる
* まずは https://api.slack.com/apps にアクセスしましょう。
* その後の流れは[Slash CommandsとGASでSlackのオリジナルコマンドをつくる](https://qiita.com/chikuwa111/items/7a1a349b82318a5861cc#d-slack-app%E3%82%92%E3%81%A4%E3%81%8F%E3%82%8B)と同じ流れで作成できます。
* スラッシュコマンドができたらbotも作ってあげましょう。下図Bots　→　edit　と進めば作成できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319430/02eb0e04-75b9-e883-74e6-f66088196ea4.png)

* せっかくなので下記リンク先からアイコンを作成し、アプリにもアイコンをつけてあげました。
 * http://generator.tubudeco.com/g1606/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319430/e85312c7-5d5f-7cfa-041e-d22bfaa7afa3.png)
* これで完成となります。

#終わりに
* 意外とサクッとつくれたので、slackとメールの併用が必要になったときの参考にどうぞ。