GitHub
現行実装

DMの連合形式

yurucommuのDMは、宛先を1人に限定した通常の ActivityStreams Noteです。自動で消えるメッセージではありません。

以前の説明からの変更: 現在の実装はurn:dmnote:v1btoendTimeを使いません。 「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を追加します。 相手を通知に表示しやすくするため、Mentiontagも付けます。

DMとして受信する条件

受信したNoteは、次の条件を満たすとDMの会話へ保存されます。

現在の会話モデルは1対1です。複数人宛てのdirect NoteをグループDMとして扱う契約はありません。

会話のまとめ方

送信者と受信者の組み合わせから会話IDを決めます。 受信データのconversationが同じ組み合わせから計算したIDと 一致する場合はそれを使い、一致しない場合はローカルで計算したIDへ正規化します。 これにより、外部から渡された任意の会話IDで別の会話へ混ぜることを避けます。

保存期間と削除

操作 現在の挙動
何もしない メッセージは期限なしで保存。endTimeによる自動非表示や 自動削除は行わない
自分のメッセージを削除 ローカルのオブジェクト、通知用データ、添付メディアを削除。 現在はリモートへDeleteを配送しない
自分のメッセージを編集 ローカルの内容を更新。現在はリモートへ Updateを配送しない

相手が別サーバーの場合、送信後の編集や削除で相手側のコピーが変わるとは 限りません。機密情報は「後から消せる」ことを前提に送らないでください。

連合しない会話状態

既読位置、入力中表示、会話のアーカイブ状態はローカル機能です。 リモートの相手について既読状態が分からない場合は、未読と決めつけず 「不明」として扱います。

外部実装での見え方

独自のDM型は使っていないため、相手が宛先限定の Noteをサポートしていれば受信できる可能性があります。 ただし、通知、会話のまとめ方、添付表示、返信UIまで同じになる保証はありません。