Socket イベント
概要
クライアントが Socket 接続を確立して認証を通過した後(Socket 接続 を参照)、サーバーがプッシュするリアルタイムイベントを受信できます。本ページでは、すべてのイベントタイプとその payload 形式を一覧し、ネイティブアプリ / Web クライアントが解析する際の参考としてご利用いただけます。
イベント一覧
| イベント名 | トリガータイミング | 用途 |
|---|---|---|
chat message | チャットルームで新しいメッセージを受信したとき | メッセージのリアルタイム表示、ローカル通知のトリガー |
room | チャットルームの属性が更新されたとき(メンバー、設定など) | チャットルーム一覧、メンバー一覧の更新 |
lastRead | あるメンバーが最終既読を更新したとき | 既読確認 UI の更新 |
typing | あるメンバーが入力中のとき | 「相手が入力中…」を表示 |
ai_streaming | AI メッセージが分割ストリーミングで返ってくるとき | AI 生成内容の段階的な表示 |
roomPref | ユーザー自身が特定チャットルームの設定を更新したとき | デバイス間でチャットルーム設定を同期 |
myPrefChange | ユーザー自身が個人設定を更新したとき | デバイス間で個人設定を同期 |
myPrefDelete | ユーザー自身が特定の設定を削除したとき | デバイス間で同期 |
invitation | グループ招待を受信したとき | 招待通知の表示 |
userDeleteMessages | ユーザーが自分でメッセージを削除したとき(自分のみに非表示) | UI からメッセージを削除 |
messageDeleted | 管理者(super-user)がメッセージを完全に削除したとき | 全メンバーの UI からメッセージを削除 |
chat message
チャットルームに新しいメッセージが届いたときにトリガーされます。
| フィールド | 内容 |
|---|---|
| Data | Message オブジェクト |
payload 例
{
"_id": "5c1ddf2d1536bbb6c49f7cfe",
"message": "Bonjour 2",
"room": "demo-room",
"sender": {
"_id": "sss",
"nickname": "Desirae",
"isRobot": false,
"avatarUrl": "",
"id": "sss"
},
"messageType": "text",
"appID": "SampleApp",
"messageTime": "2018-12-22T06:52:29.380Z",
"messageTimeMS": 1545461549380,
"id": "5c1ddf2d1536bbb6c49f7cfe"
}room
チャットルームの属性(メンバー、名称、設定など)に更新があったときにトリガーされます。
| フィールド | 内容 |
|---|---|
| Data | 更新後のチャットルームオブジェクト |
lastRead
あるチャットルームメンバーが PUT /rooms/:id/lastRead を呼び出して最終既読を更新した後、該当チャットルームの全メンバーにブロードキャストされます。
| フィールド | 説明 |
|---|---|
roomID | チャットルーム ID |
memberID | 既読を報告したメンバーの Client ID |
messageID | そのメンバーの最終既読メッセージ ID |
payload 例
{
"roomID": "5be660651a71681534245a4e",
"messageID": "5be7edaced649e42234f0699",
"memberID": "aaa"
}typing
あるメンバーが入力中のときにトリガーされ、通常は「相手が入力中…」の表示に使用します。
| フィールド | 説明 |
|---|---|
room | チャットルーム ID |
message | 入力中の内容(断片の可能性あり) |
payload 例
{
"room": "58871b877390be11d5f1ab30",
"message": "typing content"
}ai_streaming
AI からのストリーミングメッセージ断片を受信します。AI アシスタントのリアルタイム応答シナリオに適しています。
| フィールド | 説明 |
|---|---|
room | チャットルーム ID |
sender | AI Client ID |
text | メッセージ断片の内容 |
payload 例
{
"room": "<RoomID>",
"sender": "<ClientID>",
"text": "<Message chunk content>"
}roomPref
現在のユーザーがあるデバイスで特定チャットルームの設定(ミュート、ピン留め、非表示など)を更新した際、そのユーザーの他の接続デバイスにブロードキャストされます。
| フィールド | 説明 |
|---|---|
| Data | 更新後のチャットルーム設定オブジェクト |
payload 例
{
"room": "demo-room",
"folder": "Some-Folder",
"hidden": false,
"muted": false,
"sticky": false,
"tags": ["demo", "sample"]
}myPrefChange
現在のユーザーがあるデバイスで個人設定を更新した際、そのユーザーの他の接続デバイスにブロードキャストされます。
| フィールド | 説明 |
|---|---|
| Data | data と key の 2 フィールドを含む |
payload 例
{
"data": {
"foo": "bar",
"folders": {
"folder 1": { "rooms": ["aaabbb", "cccddd"] }
}
},
"key": "demokey"
}myPrefDelete
現在のユーザーが個人設定の項目を削除したときにトリガーされます。
| フィールド | 説明 |
|---|---|
| Data | 削除された設定キー |
payload 例
"demokey"invitation
グループ招待を受信したときにトリガーされます。
| フィールド | 説明 |
|---|---|
| Data | 招待オブジェクト |
userDeleteMessages
ユーザーが自分でメッセージを削除した(自分のみに非表示)ときにトリガーされます。
| フィールド | 説明 |
|---|---|
room | チャットルーム ID |
messages | 削除されたメッセージ ID の配列 |
isUserDeleteAllMessagesInRoom | 「チャットルーム内の全メッセージを削除」かどうか(boolean) |
payload 例
{
"room": "demo-FpOtW6",
"messages": ["64623ad9f83f7f1a35009d6b"],
"isUserDeleteAllMessagesInRoom": true
}messageDeleted
管理者(super-user)があるメッセージを完全に削除したときにトリガーされ、全チャットルームメンバーが受信します。
| フィールド | 説明 |
|---|---|
room | チャットルーム ID |
messageID | 削除されたメッセージ ID。_all の場合は、チャットルーム内の全メッセージが完全に削除されたことを示します |
注意事項
- イベント名にスペースを含む:
chat messageはスペースを含むイベント名です。購読時は完全な文字列を入力してください - payload のデコード:接続時に
encoding: "base64"を有効化している場合、すべてのイベント payload は base64 デコードしてからJSON.parseする必要があります - オンライン時のみ受信:これらのイベントは socket 接続中のみ受信できます。アプリがバックグラウンドまたはオフラインのときに見逃したイベントは、
POST /push/push2clients、Webhook、または再接続後にメッセージ一覧を取得することで補完する必要があります - メッセージ送信元の判別:
chat messageのsender._idが自分と一致する場合、自分の別デバイスから送信したメッセージであることを示しますが、UI 上には引き続き表示すべきです - プッシュとの併用:モバイルアプリは socket(フォアグラウンド)+ APNs/FCM プッシュ(バックグラウンド)を併用し、メッセージの取りこぼしを防いでください
- 冪等処理:再接続時にすでに処理済みのイベントを再受信する可能性があります。クライアントは
_idをキーに重複排除を行ってください