通知チャンネル (notifier)
通知チャンネルを追加します。@provider(points.NOTIFIER, id=...) は NotifierFactory を返します。ファクトリはチャンネルのエントリ NotifierSettings を受け取り、Notifier を返します。ユーザーが設定 → 通知でチャンネルを追加するとき、種類の一覧にこの id が表示されます。
python
from ab_sdk import Plugin, points, provider
from ab_sdk.notify import NotificationMessage, NotifierFactory, NotifierSettings
class Channel:
def __init__(self, settings: NotifierSettings) -> None:
self.settings = settings
async def send(self, message: NotificationMessage) -> bool:
... # 配信に成功したら True を返す
async def test(self) -> tuple[bool, str]:
ok = await self.send(NotificationMessage(kind="event", title="AB", body="test"))
return ok, "ok" if ok else "送信に失敗しました"
class MyPlugin(Plugin):
@provider(points.NOTIFIER, id="my-push")
def channel(self) -> NotifierFactory:
return Channelコントラクト
send(message)はboolを返します。バックエンドがメッセージを拒否したときはFalseを返してください。例外を送出しないでください。test()は(成功したか, 説明)を返します。NotificationMessage.kindはepisode(新しい話。official_title、season、episode、poster_urlを持つ)またはevent(システムイベント)です。- 認証情報はプラグイン自身の
config_modelに置き、self.configで読みます。チャンネルのエントリNotifierSettingsが持つのは、共通のテンプレートtemplateと、その他のフィールドextraだけです。 - プッシュの文面を書き換えるには、通知メッセージテンプレート フックを使います。
テスト
python
from ab_sdk.testing import NotifierContract
class TestChannel(NotifierContract):
def create(self):
... # バックエンドがメッセージを受け付けるチャンネル
def create_failing(self):
... # 任意:バックエンドがメッセージを拒否するチャンネル例:examples/plugins/ntfy-notifier。