開発情報・ナレッジ

投稿者:SPIRERS ナレッジ向上チーム 2022年10月4日 (火)

Teams に登録通知を行うサンプルプログラム

フォームからデータが登録された際に、Teams に通知を行いたい!という要望は多いかと思います。
通知を飛ばす手順 および サンプルプログラムを作成しましたので、
通知機能を作成したい方はぜひ参考にしてみてください。

注意点

Teams への通知機能を作成するためには、Incoming Webhook が許可されている必要があります。
サードパーティ製アプリが禁止されている場合 や Incoming Webhookが許可されていない場合は、利用することができません。

Teams側の設定

手順1
通知を飛ばすためのチャネルを追加いたします。
すでに通知したいチャネルがある場合は、追加不要です。
また、プライバシーは、標準/プライベート のいずれでも通知することが可能となります。

手順2
① を押下し、表示されたメニューから ② のコネクタを押下します。

手順3
「Incoming Webhook」の箇所で、③ の「構成」ボタンを押下します。
初回作成の場合は、「追加」が表示されるため追加後に「構成」ボタンを押下してください。

手順4
任意の名前をつけて、Incoming Webhookを作成します。

「イメージをアップロードします」にて通知時の名前やアイコンを変更することができます。

手順5
作成に成功すると Incoming Webhook のURLが生成されるので、④ のボタンを押下して保存します。
Incoming Webhook のURLを使用して、通知のプログラムを作成いたしますので、漏れてしまうと、第三者からメッセージの投稿ができてしまいます。取り扱いには、ご注意ください。
URLを保存しましたら、完了ボタンを押下し、設定が終了となります。

SPIRAL ver.2 側の設定

SPIRAL ver.2 の設定は、完了時に通知を行いたいページに PHP を埋め込みます。
サンプルプログラムは、以下となります。

PHP
<?php
// 設定値
define("TEAMS_WEBHOOK_URL", "");
$record = $SPIRAL->getRecordValue();
$data["title"] = "title";
$data["text"] = <<<EOT
**太字**\n
_斜め文字_\n
**_太字斜め文字_**\n
~~取り消し線~~\n
- 中黒1 \n- 中黒2 \n- 中黒3 \n
1. 番号付き1\n
2. 番号付き2\n
3. 番号付き3\n
[テキスト](URL)\n
😀😁😁\n
EOT;

//------------------------------
// 設定値用モジュール
//------------------------------
// ステップのセット
// 登録ブロックの場合
$formComplete = $SPIRAL->getRegistrationForm("ブロックの識別子"); // 登録フォームブロックの識別名を登録
// 更新ブロックの場合
// $formComplete = $SPIRAL->getUpdateForm("ブロックの識別子"); // 更新フォームブロックの識別名を登録

// 以下修正不要
if($formComplete->isCompletedStep()){
    $result = jsonAPIsend($data);
    if($result == 1){
        $SPIRAL->setTHValue("api", true);
    }else{
        // debug
        $SPIRAL->setTHValue("api", "error");
        $SPIRAL->setTHValue("result", print_r($result,true));
    }
}

function jsonAPIsend($data){
    $header = array(
        "Content-Type:application/json",
    );
    // curl
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_URL, TEAMS_WEBHOOK_URL);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);

    curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
    $response = curl_exec($curl);
    if (curl_errno($curl)) echo curl_error($curl);
    curl_close($curl);
    return json_decode($response, true);
}

設定値は下記の3ヶ所を設定してください。
TEAMS_WEBHOOK_URL
3行目
Teams側の設定の手順5で取得したIncoming Webhook のURLを設定
$data["title"]
5行目
メッセージのタイトル
$data["text"]
6行目
メッセージの本文(7行目-17行目の間を修正)

次にどのフォームブロックかを判定する箇所を修正します。
23行目 - 26行目の箇所になります。

PHP
// 登録ブロックの場合
$formComplete = $SPIRAL->getRegistrationForm("ブロックの識別子"); // 登録フォームブロックの識別名を登録
// 更新ブロックの場合
$formComplete = $SPIRAL->getUpdateForm("ブロックの識別子"); // 更新フォームブロックの識別名を登録
使用しないブロックタイプの設定は、コメントアウト(*)してください。
* 文字の先頭に「//」をつけることでコメントアウトできます。
使用するブロックタイプの設定として、「ブロックの識別子」となっている箇所を、識別子に変更して完了です。

メッセージの本文は、Markdown を使用した書式設定が可能となっています。
下記を参考に設定をしてみてください。
太字 **太字**
斜め文字 _斜め文字_
太斜め文字 **_太字斜め文字_**
取り消し線 ~~取り消し線~~
中黒 - 中黒
リスト 1. 番号付き
リンク [テキスト](URL)
改行 \n
登録データ {$record['item']['フィールドID']}
下記のようにリンクに埋め込むことも可能です
[https;//pi-pe.co.jp/?id={$record["item"]["_id"]}](https;//pi-pe.co.jp/?id={$record["item"]["_id"]})

ブロックの完了画面で下記のコードを使用することで、エラーのデバックが可能となっております。
送信がうまくいかない方は、コード登録の上、原因をお確かめください。

HTML
<th:block th:if="${cp.result.value['api']} ne 'error'">
      <p style="text-align: center;">送信成功。</p>
  </th:block>
  <th:block th:if="${cp.result.value['api']} eq 'error'">
      <p style="text-align: center;" th:text="${cp.result.value['errorText']}">エラーコード</p>
  </th:block>

最後に

設定後は動作確認を必ず行い、動作に問題がないか確認をしてください。
不具合やほかのやり方が知りたい等あれば、下記の「コンテンツに関しての要望はこちら」からご連絡ください。
コンテンツに関しての
要望はこちら