DMの連合形式
yurucommuのDMは、宛先を1人に限定した通常の ActivityStreams
Noteです。自動で消えるメッセージではありません。
urn:dmnote:v1、
bto、endTimeを使いません。 「DM
Note」という独自仕様ではなく、直接宛先を持つNoteとして説明します。
送信する形式
リモートアカウントへ送るときは、Createとその中の
Noteの両方で、相手のアクターIDをtoに指定します。
公開コレクションやfollowersコレクションは含めません。
{
"@context": "https://www.w3.org/ns/activitystreams",
"id": "https://alice.example/ap/activities/dm-1",
"type": "Create",
"actor": "https://alice.example/ap/users/alice",
"to": ["https://bob.example/ap/users/bob"],
"object": {
"id": "https://alice.example/ap/objects/message-1",
"type": "Note",
"attributedTo": "https://alice.example/ap/users/alice",
"to": ["https://bob.example/ap/users/bob"],
"content": "こんにちは",
"published": "2026-07-29T10:00:00.000Z",
"conversation": "https://alice.example/ap/conversations/..."
}
}
メディアがある場合はattachmentを追加します。
相手を通知に表示しやすくするため、Mentionの
tagも付けます。
DMとして受信する条件
受信したNoteは、次の条件を満たすとDMの会話へ保存されます。
- ローカル受信者のアクターIDが
toに含まれる -
Publicがtoにもccにもない - 送信者のfollowersコレクションが宛先にない
- 送信者が受信者にブロックされていない
現在の会話モデルは1対1です。複数人宛てのdirect
NoteをグループDMとして扱う契約はありません。
会話のまとめ方
送信者と受信者の組み合わせから会話IDを決めます。
受信データのconversationが同じ組み合わせから計算したIDと
一致する場合はそれを使い、一致しない場合はローカルで計算したIDへ正規化します。
これにより、外部から渡された任意の会話IDで別の会話へ混ぜることを避けます。
保存期間と削除
| 操作 | 現在の挙動 |
|---|---|
| 何もしない |
メッセージは期限なしで保存。endTimeによる自動非表示や
自動削除は行わない
|
| 自分のメッセージを削除 |
ローカルのオブジェクト、通知用データ、添付メディアを削除。
現在はリモートへDeleteを配送しない
|
| 自分のメッセージを編集 |
ローカルの内容を更新。現在はリモートへ
Updateを配送しない
|
相手が別サーバーの場合、送信後の編集や削除で相手側のコピーが変わるとは 限りません。機密情報は「後から消せる」ことを前提に送らないでください。
連合しない会話状態
既読位置、入力中表示、会話のアーカイブ状態はローカル機能です。 リモートの相手について既読状態が分からない場合は、未読と決めつけず 「不明」として扱います。
外部実装での見え方
独自のDM型は使っていないため、相手が宛先限定の
Noteをサポートしていれば受信できる可能性があります。
ただし、通知、会話のまとめ方、添付表示、返信UIまで同じになる保証はありません。