目的
マストドン複数インスタンスの各種通知をiPhoneへプッシュ通知したい。
(すでに複数インスタンス対応のアプリが出てきているので必要性は薄れてしまったが勉強のために。)
利用言語・サービス
- Go言語
- mattn/go-mastodon - https://github.com/mattn/go-mastodon
- AWS SQS
- IFTTT(webhook/push)
- moru3/mastodon-notifications-sqs(作成)
- moru3/sqs-to-ifttt-webhook(作成)
リポジトリ
以下の2つに分けて実装。1つにまとめても問題はないはず。
mastodon-notifications-sqs
複数マストドンインスタンスに対してStreamingAPIを利用してnotificationsを待ち続ける。
notificationを取得したらAWS SQSのキューに対してメッセージをプッシュする。
sqs-to-ifttt-webhook
AWS SQSの特定のキューから定期的にメッセージを取得。
取得した内容をvalue1というPOSTデータとしてIFTTTのwebhookURLに対してPOSTする。
下準備
AWS SQSのキューの準備
AWS Management Console-> Simple Queue Serviceからキューの作成を実施。
設定の内容は任意。
作成後キューのURL(例:https://sqs.ap-northeast-1.amazonaws.com/111111111/hogehoge
)を確認しておく。このURLに対してメッセージをPOST/GETする。
IFTTTのサービス設定
IFTTTのmaker webhooksを利用可能状態にし、
「webhook受信->プッシュ通知」のイベントを作成する。
プッシュ送信内容は今回はvalue1だけを指定する。

WebhookのURLは作成したWebhookの詳細にあるURLに対してブラウザでアクセスすると利用方法がわかる。
URLの一部にevent名、クエリにシークレットが入りそれで認証している。
[webhook-URL例]
https://maker.ifttt.com/trigger/[event_name]/with/key/[secret_key]
AWSの認証情報設定
SQSが利用できるAWSのIAMユーザの認証情報をサーバの~/.aws/credentialsに記述する。
[default]
aws_access_key_id = xxxxxxxxxxxx
aws_secret_access_key = xxxxxxxxxxxxxx
通知を受けたいインスタンスの認証情報を取得
moru3/mastodon-notifications-sqsのREADMEにも記述しているが、
マストドンのAPIを利用するためには、対象のインスタンスに対してclient_idとclient_secretを取得する必要がある。
curlで取得可能。
# 取得
curl -X POST -sS https://xxxxxxxxxxxxxx/api/v1/apps \
-F "client_name=xxxxxxxxxx" \
-F "redirect_uris=urn:ietf:wg:oauth:2.0:oob" \
-F "scopes=read write follow"
# 結果
{"id":1,"redirect_uri":"urn:ietf:wg:oauth:2.0:oob","client_id":"xxxxxxxxxxxxxx","client_secret":"xxxxxxxxxxxxxxxxxxxxx"}%
利用
実行環境にて以下を実行する。
実行前にsetting.ymlを作成しておく。
- moru3/mastodon-notifications-sqs
- moru3/sqs-to-ifttt-webhook
少し動かしてみた感想
- 通知多すぎ問題
- なぜか認証が通らないインスタンスがあった(閉じている?)
- 1インスタンスへの通知監視が止まってしまっていることがあった