SlackTD : TouchDesignerからSlackに投稿する

この記事は[TouchDesigner Advent Calendar 2022](https://qiita.com/advent-calendar/2022/touchdesigner)の15日目の記事です。

# SlackTD
この記事では、TouchDesignerから`Webhook`を用いてSlackにメッセージを投稿する方法を説明します。
長期展示を行う際にTouchDesignerプログラムの状況を定期的に報告することや、何らかの問題が発生した際にSlackへ通知する等の機能を実現することができます。

本記事で使用しているサンプルファイルは[こちら](https://github.com/shks/SlackTD)にあります。

https://github.com/shks/SlackTD


監視対象のtoeから監視したい情報を`TouchOut.CHOP`でSlackTD.toeへ送信し、1) 定期的に文字列として指定されたSlack Channelへの投稿と、2) `TouchOut.CHOP`からの情報変化がない = 監視対象のtoeが途絶えたと判断し、Slack Channelへの投稿する、の2点の機能がすでに実装されています。



## SlackTDの主な使い方

主に監視行いたいtoeに、下記のように変化あるCHOPデータ(ここでは仮に`Perform.CHOP`)をTouchOut.CHOPへ接続します。`NetworkPort`は8000とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/a6a767c3-ef39-fc55-81bb-6284a51512de.png)

SlackTD.toeを起動し、`WebhooksURL`(後述）を入力。`Interval(min)` = 何分おきに通知をしてほしいかを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/4637da7d-14e2-f62a-bae0-b4a51980d922.png)

すると、Slack側でこのように、定期的に`TouchOut.CHOP`で送信された情報が投稿されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/7488657d-7605-7365-5b29-e8e92e442fc9.png)


また、仮に`TouchOut.CHOP`からの送信を止める（監視対象のtoeが落ちた状態を再現）すると。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/7492ce29-497e-6d4b-5754-b178c203d49f.png)
このように、`@here`のメンション付きで、Slackに投稿されます。例えば「Slack側でメンションがあったときのみ通知する」としておくことで、異常があったときのみ通知を受け取ることができます。

再度、`TouchOut.CHOP`からの送信を再開すると（監視対象のtoeが復旧した状態を再現）すると。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/569f20e2-92ba-eec6-d311-5c842fa0b28c.png)
のように、復帰の通知が発行されます。

**本機能を使うためのSlack側の準備は、後述します。**


## TouchDesigner から slack Webhookへメッセージを送信する

```
import requests
import json

webhook_url = str(me.parent().par.Webhookurl.eval())

MESSAGE = ''
for chan in op('slackmes').chans():
	MESSAGE += chan.name + " : " + str (int(chan)) + " , "

data = {'text':MESSAGE}
r = requests.post(webhook_url,data=json.dumps(data),headers={'Content-Type':'application/json'})
```


実際内部では`python`スクリプト内で、`requests.post`経由で`webhook_url`に対して`json`データを送っているだけになります。なお`json`形式を凝ることでSlackが備える様々な機能が使えることがで期待できます。さらに、細く設定するれば特性のユーザーにメンションする。などができるかもしれません。

https://api.slack.com/messaging/interactivity




## Slack側の準備

Webhooksを利用してTouchDesignerからSlackへメッセージを送信するには、まずSlack側でIncoming Webhookを作成します。

https://slack.com/intl/ja-jp/help/articles/115005265063-Slack-%E3%81%A7%E3%81%AE-Incoming-Webhook-%E3%81%AE%E5%88%A9%E7%94%A8

(2022.12.15現在のSlackWebでの設定方法ですが、細かい仕様は将来的に変わるかもしれません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/12e3c22d-9a50-c651-73e9-9554f610369f.png)
[From Scrach]を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/2fdc4ba5-7cba-4898-268b-c07efdc05507.png)
App_Nameを設定。通知を送りたいチャンネルがあるWorkspaceを選択します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/29d5271f-fddd-02bf-61df-2ce0a480997d.png)
[Incoming Webhooks]をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/62a31bd2-37ec-44e5-dc9b-13bb1347aeac.png)
"Activate Incoming Webhooks"をONにすると、下記の表示が現れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/6b08d63d-8de4-9312-f7a8-a0926732e5c9.png)
[Add New Wenhook to Workspace]をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/67cb20a4-b886-9863-c35f-e2b9eb44a5a8.png)
通知を送るためのチャンネルを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70810/db321d9b-8334-12a2-ba89-cae9291cef72.png)
そこで得られたURLがWenhook用のURLになります。例：
```
https://hooks.slack.com/services/XXXXXXXX/YYYYYYY/zzzzzzzzzzzzzzzz
```
こちらを前述のWebhooksURLに入力して使ってください。


# おわりに
本機能を使用することで経時的に変化するメモリ使用量を監視したり、異様にFPSが下がったら通知してこっそり対策をする、自動復旧・起動が成功したかを遠隔で確認する、などのユースケースが考えられます。
そして、「今日も世界のどこかで、[ここ](https://shunichikasahara.com/2022/02/15/morphing-identity-will-be-exhibited-at-miraikan/)とか[ここ](https://shunichikasahara.com/2022/10/04/fragment-shadow-x-silver-cloud-at-andy-warhol-kyoto-exhibition/)とか、[ここ](https://time.news/national-taiwan-museum-of-fine-artsscenery-of-dataflow2023-taiwan-international-light-and-shadow-art-festival/)の展示会場の片隅で終夜通電して動いているTouchDesignerの事が心配で夜も眠れない」という状態を回避できる可能性があります。

皆様に安らかな夜が訪れますように。🌙