SpringBootを使ってTeamsにメッセージを投稿してみた。

はじめに

この記事は富士通システムズウェブテクノロジー Advent Calendarの17日目の記事です。

(お約束)本記事の掲載内容は私自身の見解であり、
所属する組織を代表するものではありません。

入社2年目がSpringBootを使ってTeamsにメッセージを投稿して遊んでみた記事です。

技術力はまだまだだけど、お祭りに参加したぞってのを感じて。
まぁ、少しくらいは知識を身に着けて。
楽しかったと言えればそれでいいのだ!くらいの気持ちで書きました。ええ。

ということで、遊んでいくゾ

Teamsとは

Microsoft社が開発したチーム間のコミュニケーションを促進するためのツール。

【コンセプト】
 チャット機能、音声機能、会議等により、
 チームのメンバーがどこにいてもコミュニケーションを取ることができる。

Teamsの主な機能

  • チーム内でのオープンな会話
  • チームメンバー同士のチャット(コミュニケーションスペース)
  • チームのメンバーとの1:1でのチャット
  • チーム内でのファイル共有
  • 関連サービスまたはシステムとの連携(コネクタアプリ)
  • チームの会議のスケジューリング
  • 音声/ビデオ通話(Skype for Business機能を活用)

Teamsの構成

組織/チーム/チャネルの3つで構成されている。  

組織    
 ┣ チーム① 1
 ┃  ┣ チャネル1  
 ┃  ┣  :  
 ┃  ┗ チャネルn  
 ┣ :  
 ┗ チームn  
    ┣ チャネル1  
    ┣  :  
    ┗ チャネルn  

TeamsとSlackの違い

開発コンセプト

【Slack】
 メールでのコミュニケーションを不要として
 チャットツール中心のコミュニケーションを実現すること。

【Teams】
 チャットとメールを別のコミュニケーションツールとして棲み分け、
 双方を有効活用したコミュニケーションを実現すること。

遊ぶのだー!!

まずは、遊ぶための下準備。

遊ぶためには準備が必要。しっかりとやっていこう。

前提

  • Teams
  • JDK11
  • SpringBoot
  • Gradle

Teamsのアカウントを準備する

公式サイトからサインアップorサインインをする。
※既にOutlookのアカウントを持っている人はサインインでいいゾ。

アカウント作成途中で「会社名は?」とか聞かれたような気がしたが、
Sampleとしておいた。

Sampleの配下に「一般」というタブがある。
この「一般」こそがチャネルである。

f:id:levia9071:20191214173203p:plain

コネクタを準備する

今回は外部からメッセージ投稿するので、Incoming Webhookを使っていく。

コネクタの設定方法

① 外部からメッセージ投稿させるチャネルを選択し、「コネクタ」を押下。
f:id:levia9071:20191214173209p:plain

② コネクタが一覧で表示されるので、
  「Incoming Webhook」を探してボタン「追加」を押下。
f:id:levia9071:20191214173240p:plain

③ Incoming Webhookの詳細画面に遷移するのでもう一度ボタン「追加」を押下。
f:id:levia9071:20191214173243p:plain

④ フック名に適当に名前を付ける。今回はsampleにした。
  名前を付けたらボタン「作成」を押下。
f:id:levia9071:20191214173249p:plain

⑤ スクロールするとURLがあるのでそれをコピー!メモか何かに貼り付けておこう。
  念のためURLは隠したゾ。
f:id:levia9071:20191214173252p:plain

さぁ、メッセージを投稿しようではないか!SpringBoooooooot!

Teamsの準備もできたところで遊んでいこう。ソースは下記参照。

言うても今回は、RestTemplateを使ってメッセージを送信するという簡単なもの。
定数URLの値は【コネクタの設定方法】の手順⑤のURLである。

SpringBootを起動して、ブラウザのURLに「http://localhost:8080/teams」を入れて…。

f:id:levia9071:20191214173258p:plain

送信できたー!!!!

冒頭に書いた目標(楽しかったと言えればそれでいいのだ)は、達成と言ってもいいでしょう!

…といったところで今回はここまで!

今回使ったソース

@GetMapping(path = "/teams")
  public ResponseEntity<String> teams(){
      HttpHeaders headers = new HttpHeaders();
      headers.setContentType(MediaType.APPLICATION_JSON);
      Map<String, String> params = new HashMap<>();
      params.put("title", "タイトル");      
      params.put("text", "テキスト");
      HttpEntity<Map<String, String>> request = new HttpEntity<>(params, headers);
      RestTemplate restTemplate = new RestTemplate();
        
      try {
          return restTemplate.exchange(URL, HttpMethod.POST, request, String.class);
      } catch (RestClientException e) {
          throw new RuntimeException();
     }
  }

最後に

アドベントカレンダーというイベントに参加できたことを光栄に思います。
このような機会を作ってくださったjugemsanさん、ikedahideyaさん、相談に乗って頂いた皆様。
そしてなにより、こんな拙い記事を最後まで読んでくださった皆様、ありがとうございました。

参考URL