この記事はTouchDesigner Advent Calendar 2022の15日目の記事です。
SlackTD
この記事では、TouchDesignerからWebhook
を用いてSlackにメッセージを投稿する方法を説明します。
長期展示を行う際にTouchDesignerプログラムの状況を定期的に報告することや、何らかの問題が発生した際にSlackへ通知する等の機能を実現することができます。
本記事で使用しているサンプルファイルはこちらにあります。
監視対象のtoeから監視したい情報をTouchOut.CHOP
でSlackTD.toeへ送信し、1) 定期的に文字列として指定されたSlack Channelへの投稿と、2) TouchOut.CHOP
からの情報変化がない = 監視対象のtoeが途絶えたと判断し、Slack Channelへの投稿する、の2点の機能がすでに実装されています。
SlackTDの主な使い方
主に監視行いたいtoeに、下記のように変化あるCHOPデータ(ここでは仮にPerform.CHOP
)をTouchOut.CHOPへ接続します。NetworkPort
は8000とします。
SlackTD.toeを起動し、WebhooksURL
(後述)を入力。Interval(min)
= 何分おきに通知をしてほしいかを指定します。
すると、Slack側でこのように、定期的にTouchOut.CHOP
で送信された情報が投稿されます。
また、仮にTouchOut.CHOP
からの送信を止める(監視対象のtoeが落ちた状態を再現)すると。
このように、@here
のメンション付きで、Slackに投稿されます。例えば「Slack側でメンションがあったときのみ通知する」としておくことで、異常があったときのみ通知を受け取ることができます。
再度、TouchOut.CHOP
からの送信を再開すると(監視対象のtoeが復旧した状態を再現)すると。
のように、復帰の通知が発行されます。
本機能を使うための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が備える様々な機能が使えることがで期待できます。さらに、細く設定するれば特性のユーザーにメンションする。などができるかもしれません。
Slack側の準備
Webhooksを利用してTouchDesignerからSlackへメッセージを送信するには、まずSlack側でIncoming Webhookを作成します。
(2022.12.15現在のSlackWebでの設定方法ですが、細かい仕様は将来的に変わるかもしれません。
App_Nameを設定。通知を送りたいチャンネルがあるWorkspaceを選択します。
"Activate Incoming Webhooks"をONにすると、下記の表示が現れます。
[Add New Wenhook to Workspace]をクリック。
そこで得られたURLがWenhook用のURLになります。例:
https://hooks.slack.com/services/XXXXXXXX/YYYYYYY/zzzzzzzzzzzzzzzz
こちらを前述のWebhooksURLに入力して使ってください。
おわりに
本機能を使用することで経時的に変化するメモリ使用量を監視したり、異様にFPSが下がったら通知してこっそり対策をする、自動復旧・起動が成功したかを遠隔で確認する、などのユースケースが考えられます。
そして、「今日も世界のどこかで、こことかこことか、ここの展示会場の片隅で終夜通電して動いているTouchDesignerの事が心配で夜も眠れない」という状態を回避できる可能性があります。
皆様に安らかな夜が訪れますように。🌙