こんなやーつ
レシピ
(1) Outgoing WebhooksでSlackの投稿に反応させる
まずはOutgoing Webhooksを使って特定の投稿に反応するようにしましょう。
設定名 | 内容 |
---|---|
Channel | ここで指定したチャンネルでの投稿に反応します。お好みで。 |
Trigger Word | ここで指定したワードで始まる投稿に反応します。何でもいいんですけど、bot君の名前にしときます。 |
URL | Trigger Wordにマッチした場合にリクエストされるURLです。最終的にGASの公開URLを指定しますがとりあえず今は空で。 |
Token | Webhookのトークンです。後で使うのでメモっときます。 |
(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を公開しましょう。
[公開] ⇒ [ウェブアプリケーションとして導入]
公開URLが表示されるのでメモります。
最後にOutgoing Webhooksの設定画面に戻って「URL」の項目にメモった公開URLを登録したら準備完了!