SlackのbotをAmazon API Gatewayで動かす

前回の記事ヴィヴィオを実装したので、今度はアインを動かしてみました。

詳細を書くのは面倒なので、ハマりそうなポイントだけ書いた。

Amazon API Gateway

普通にPOSTのAPIを作れば良い。

ただし、SlackのOutgoing WebHooksは application/x-www-form-urlencoded で送られるため、その対応が必要。

Mapping Templatesの設定

Integration Request でMapping Templatesを設定する必要がある。

Templateを $input.json('$') にすればおk。

f:id:sinsoku:20150803021909p:plain

Amazon Lambda に登録するコード

普通に日本語を書くと文字化けたので、エンティティ参照で書いて回避してます。

console.log('Loading function');

exports.handler = function(event, context) {
  var payload = {};
  event.split('&').forEach(function(param) {
    var kv = param.split('=');
    payload[kv[0]] = kv[1];
  });

  if (payload.token !== '<Token>') {
    context.fail('Invalid token');
  } else if (payload.user_name === 'slackbot') {
    context.context.succeed('This event skipped because user is slack_bot');
  } else {
    context.done(null, {text: "\u30a2\u30a4\u30f3\u30cf\u30eb\u30c8\u30fb\u30b9\u30c8\u30e9\u30c8\u30b9\u3001\u53c2\u308a\u307e\u3057\u305f"}); 
  }
};

Slackの設定

Outgoing WebHooks の設定をする。

動作イメージ

f:id:sinsoku:20150803022557p:plain