ID 仕様

ID 文字列仕様 #

はじめに #

daab では ID 文字列によりリソース (roomuser 等) を一意に識別します。

ID 文字列の仕様には daab SDK 専用の文字列表現形式と一般的な 10 進数文字列形式の 2 種類が存在します。この文書ではこれらの仕様ならびに相互変換の方法を説明します。

以降の記載内容は現時点の仕様を示したものであり、将来的に変更される可能性があります。公式に提供している相互変換方法以外での動作は一切保証されません。

daab 専用の ID 文字列 #

ある int64 の値に束縛された変数を x とした場合、これに対応する daab 専用 ID 文字列は以下のように決定されます。

const x = 1234567890123456789n;
const daabId = `_${BigInt.asIntN(32, (x >> 32n) & 0xFFFFFFFFn)}_${BigInt.asIntN(32, x & 0xFFFFFFFFn)}`;
// => "_287445236_2112454933"

daab SDK の公開仕様上ではこちらの形式が主として使われています。

この計算式はワークアラウンドとして使用する場合を除き、ユーザーコード上で直接利用することは避けてください

int64 数値の ID 文字列 #

こちらは int64 値を単純に 10 進数で文字列化しただけのフォーマットです。

const restId = 1234567890123456789n.toString();
// => "1234567890123456789"

daab 以外ではこちらの形式が主として使われています。

特に、同意書を締結したユーザー様にのみ提供 (限定公開) している REST API ではこちらの ID 文字列仕様のみを使用します。daab 専用 ID 文字列は使用できません

相互変換方法 (direct-js >= 2.1.0 で使用可能) #

ID からアクセス可能なメソッドを利用して以下のように相互変換が可能です。

const ID = robot.direct.ID;

console.log(ID.from("1234567890123456789").toDaabID());
// => "_287445236_2112454933"

console.log(ID.from("_287445236_2112454933").toString());
// => "1234567890123456789"

例えば daab の情報から REST API リクエストに必要な ID 値を作成する場合は以下のように処理します。

const ID = robot.direct.ID;

const userId = ID.from(res.message.user.id).toString();
const domainId = ID.from(res.message.user.domainId).toString();