Slack用にMicrosoftがOffice365に用意してきたチャットツールとして、Microsoft Teamsがあります。Googleで言えばHangout Chatがそれになります。このTeamsにエントリー投稿しかまだ出来ないのですが、Google Apps Scriptから投稿する事が可能です。Graph APIでも可能なのですが、TeamsにはWebookという便利な機能があるので、今回これを使ってみます。

今回使用するファイル

事前準備

Microsoft Graph API連携の時と同じように、アプリケーションIDとシークレット、スコープを設定する必要があります。また、OAuth2.0認証の為に、ライブラリも追加しましょう。

ライブラリの追加

以下の手順でOAuth2 for Apps Scriptライブラリを追加しましょう。

  1. スクリプトエディタを開きます。
  2. メニューより「リソース」⇒「ライブラリ」を開きます。
  3. ライブラリを追加欄に「1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF」を追加します。
  4. 現時点ではバージョンは30が最新ですので、それを選択しておきます。
  5. 保存ボタンを押して完了

これで、OAuth2.0認証にまつわる様々な関数を手軽に利用できるようになります。

コールバックURLを取得する

コールバックURLとは、認証を完了しAccess Tokenを取得したら戻るべきURLを指定するものです。これは、スクリプトIDをもとに作られているので、スクリプトIDを取得して組み立てます。

  1. スクリプトエディタのメニューより「ファイル」⇒「プロジェクトのプロパティ」を開く
  2. 情報の中にある「スクリプトID」を控えておく。
  3. https://script.google.com/macros/d/スクリプトID/usercallback として組み立てる。これがコールバックURLとなる。

図:スクリプトIDはファイル毎に異なるのです。

Office365側の準備

  1. Application Registration Portalにログインする。
  2. アプリの追加ボタンを押す。
  3. Application Nameを入力しCreateボタンを押します。アルファベット以外も使えますよ。
  4. この段階でアプリケーションIDはすでに生成されているので、控えて置きます。
  5. アプリケーションシークレットにて、「新しいパスワードを生成」をクリックし、パスワードを発行します(このパスワードはこの時の1回しか表示されません)。
  6. 「プラットフォームの追加」にて、追加ボタンを押し、Webを選択。
  7. ここで、GAS側で取得したコールバックURLをリダイレクトURLに入力します。
  8. Microsoft Graphのアクセス許可では、スコープを設定します。User.Read、Group.ReadWrite.All、offline_accessを追加します。offline_accessを入れないと「リフレッシュトークン」が取得できないので、注意。
  9. 保存ボタンを押して完了です。

図:スコープの設定で許可するアクションを選びます。

Incoming Webhookを追加する

Teams単体でもGraph APIを使って投稿ができるのですが、ID調べたりチャンネルID調べたりが面倒なので、この機能をTeamsに追加し、Webhook URLに対して投稿処理を実行します。以下の手順で追加します。

  1. Teamsの左サイドで「チーム」を選択します。チームを作成していない場合には適当に作成しておいてください。
  2. 作ったチームをクリックすると、デフォルトチャネルとして「一般」というものがありますので、その隣の「」をクリック。
  3. コネクタをクリックします。
  4. いろいろなコネクタが出てくるのですが、ここでは、Incoming Webhookを追加します。
  5. 構成画面が出るので、適当に名前を入れます。これが投稿者の名前になります。
  6. 投稿者の画像を変更する場合にはここで画像をアップロードしておきます。
  7. 作成ボタンを押して準備完了
  8. Webhook URLが下の方に出てくるので、コピーして控えておきます。このあとコード内に記述します。
  9. 完了ボタンを押して終了。

図:Incoming Webhookを追加します。

図:Webhook構成画面

ソースコード

今回、認証を行う部分のソースコードは準備編を参照してください。Teamsにエントリーを投稿する部分のコードを記載します。なお、Scopeの設定は、var scope = “User.Read offline_access Group.ReadWrite.All”としておく必要があります。

HTML側コード(teams.html)

  • disp関数でGAS側のpostTeamChat関数へタイトルとチャット内容を送り込んでいます。
  • 送信時に連続送信しないように、プログレス表示に切り替えを追加しています。

図:チャット投稿用ダイアログ

GAS側コード

  • 今回のスクリプトは、graphapicall関数にpayloadの引数を1つ追加しています。
  • payloadには、タイトルとチャット内容を含めてPOSTで送り込みます。

実行と結果

まずはともあれ、認証を実行しAccess Tokenを実行しましょう。メニューより「OAuth認証」⇒「認証の実行」をして、Office365側の認証を取得しておきます。その後、メニューより、「Teams投稿」⇒「エントリーの投稿」を実行すると、チャット投稿用のダイアログが出現します。ここにタイトルとチャット内容を投稿することで、Teamsエントリーが投稿されます。

投稿内容は、スプレッドシートにも記録として書き込みがなされます。

図:OAuth認証の実行画面。承諾しましょう。

図:Webhookからの投稿が反映しています。

関連リンク