伝説のどいつまの伝説~失敗編~

岩美に永住したい新米エンジニアのあれやこれやな話。

【C#】【Bot】Slack Bot で推したちと会話したい!Part.3

前回までのあらすじ

前回、果て無き荒野への一歩を踏み出したオタク。
Free! の主人公、七瀬遙に "俺はフリーしか泳がない" と発言させることに成功した。
しかし、次の段階である「会話を成立させる」というミッションに難航していて――?!
(※前回からかなり日が経ってしまっていることはこの際しれっと流しますw)

▼前回の内容はこちらから。
d01tsumath.hatenablog.com


ちなみに、 Free! とはなんぞや?という方は、Netflix、d アニメストアをはじめとした動画配信サービスにて配信中なので是非ご視聴ください!
いわゆる "異次元系スポーツ" ではないので、安心して視聴できると思います。
iwatobi-sc.com




【Slack Bot シリーズの目標】
  1. Bot を5つ作る
2. 各キャラと、ある程度の会話をできるようにする
  3. Channel の中で会話できるようにする


会話を可能にするには、Channel 内(または DM 内)のコメントを拾わなければならないわけですね。
そこで、色々調べた結果、Event API を使うのが良さげ...という知見を得たので、早速実装。
まず、前回迄に使用していたコード...あれは捨てて、別のコードを生成しました。


コードの書き換え

今回は Github に載せたので、そちらをご覧くださいませ。
(誰のレビューも受けてない状態で恥を忍んで晒すのでレビューあれば別途オネシャス)
▼該当の Github レポジトリ
github.com

前回と異なる点

前回 HttpTrigger を使って実装したんですけど、Bot に会話させるだけなら、Slack 側の API を叩いてあげるだけで良いので、別に HttpTrigger にしなくてもよかったんじゃないか説。
というわけで、普通の関数にしました。
あと、セリフも変えてみました。(ちなみに Free! 3期第1話での名セリフとなっておりますw)


Event API に合わせた実装

こちらは、Slack 側が Event 発火したときに post でプロパティを送信してくるので、受け取る用エンドポイントを用意します。
登録時に verfication を通過しなければいけないようなので、その対策をしました。
ドキュメントを見るに、
登録時:"type": "url_verification"
通常 :"type": "event_callback"
と判別できるので、通常時は一旦 Queue に json 投げてから処理する...という方針で行こうと思います。
別に何秒以内に返さないといけない、みたいな制約は見当たらなかったんだけども。
先日業務で近しい実装を見かけたので(というか自分のコードがレビュー後そのように変わっていたので)、今度は自分の手で実装しちゃる...!的な感じでいこうと思いますw
登録時の実装迄はできているので、土日に通常時の実装を進めていこうかな。
▼通常時のプロパティはこんな感じの json が投げられるらしい。json ありがたいw
api.slack.com


Azure 側の構成

まずはちゃんと会話ができるかを試している段階なので、今回使ったのは Function App オンリーです。
あとついでに Application Insights を自動で作成しているだけ。
後々、API Management を駆使してみようかと思います。


参考になりました。

blog.engineer.adways.net