11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SlackAdvent Calendar 2017

Day 10

Slack+GAS+Twilioで仕事中に仮眠取ってる同僚をbotに叩き起こしてもらう

Last updated at Posted at 2017-12-10

こんなやーつ

image.png

レシピ

(1) Outgoing WebhooksでSlackの投稿に反応させる

まずはOutgoing Webhooksを使って特定の投稿に反応するようにしましょう。

設定名 内容
Channel ここで指定したチャンネルでの投稿に反応します。お好みで。
Trigger Word ここで指定したワードで始まる投稿に反応します。何でもいいんですけど、bot君の名前にしときます。
URL Trigger Wordにマッチした場合にリクエストされるURLです。最終的にGASの公開URLを指定しますがとりあえず今は空で。
Token Webhookのトークンです。後で使うのでメモっときます。

slack3.png

(2) GASで受けてTwilioに流す

GASのscriptはこんな感じ。(エラー処理とか何もしてないけど)
Slackまわりのごにょごにょはこちらのライブラリを使わせてもらいました。感謝!

GoogleAppsScript
function doPost(e) {

  var webhook_token = '【Webhook Token】';
  var twilio_sid    = '【Twilio Application SID】';
  var twilio_token  = '【Twilio Token】';
  var slack_token   = '【Slack API Token】';

  //Webhookトークンの検証
  if (e.parameter.token != webhook_token) {
    throw new Error("invalid token.");
  }

  //e.parameter.textにSlackの投稿内容が入ってるのでマッチ条件は適当に変えてね
  if(e.parameter.text.match(/xxxxxさん起こして/)) {

    var payload = {
      'To'   : '【発信先の電話番号】', //+81xxxxxxxx
      'From' : '【発信元の電話番号】', //+81xxxxxxxx
      'Url'  : '【TwiMLのURL】'
    };

    UrlFetchApp.fetch('https://api.twilio.com/2010-04-01/Accounts/' + twilio_sid + '/Calls.json', {
      'method'  : 'POST',
      'headers' : {'Authorization' : ' Basic ' + Utilities.base64Encode(twilio_sid + ':' + twilio_token)},
      'payload' : payload,
      'muteHttpExceptions' : true
    });

    
    var app = SlackApp.create(slack_token);
    return app.postMessage(e.parameter.channel_id, 'よっしゃ、まかしとき!', {
      username: 'bot',
      icon_url: 'http://www.material-land.com/material/1769.gif'
    });
  }
}
  • Webhook Token
    • (1)でメモったやつ
  • Twilio Application SID / Twilio Token / 発信元の電話番号
    • あらかじめTwilioの管理ページで調べておく
  • 発信先の電話番号
    • 叩き起こしたい人の電話番号
    • 分からなければソーシャルエンジニアリングを駆使して盗み出し聞き出しておきましょう
  • TwiMLのURL
    • 電話出た時の応答メッセージを定義したTwiMLを適当な場所に置いておく
TwiML
<Response>
<Say language="ja-jp">起きろー!!</Say>
</Response>

固定のメッセージじゃなくてSlackで投稿した内容拾ってそのまま喋らしてみてもいいですね。

(3) 公開する

GASを公開しましょう。
[公開] ⇒ [ウェブアプリケーションとして導入]

gas.png

公開URLが表示されるのでメモります。
最後にOutgoing Webhooksの設定画面に戻って「URL」の項目にメモった公開URLを登録したら準備完了!

さぁ起こそう

slack2.png

11
9
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
11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?