APIリファレンス
@metatell/bot-sdkで通常のボットを開発するときは、createMetatellClient()が返すMetatellClientを利用します。
型定義の全項目は、自動生成APIドキュメントも参照してください。
クライアントを作成する
import { createMetatellClient } from "@metatell/bot-sdk";
const client = createMetatellClient({
serverUrl: "wss://metatell.app",
roomId: "YOUR_ROOM_ID",
username: "GuideBot",
});
await client.connect();
終了時はdisconnect()を呼びます。
await client.disconnect();
接続と状態
| API | 戻り値 | 説明 |
|---|---|---|
connect(options?) | Promise<void> | サーバーへ接続してルームへ入室します。 |
disconnect() | Promise<void> | 接続を終了します。 |
getStatus() | { connected, connecting } | 現在の接続状態を返します。 |
getInfo() | Promise<BotInfo> | ボット自身の情報を返します。 |
getUsers() | User[] | 現在把握しているユーザー一覧を同期的に返します。 |
ルーム
| API | 説明 |
|---|---|
room.getSceneInfo() | 接続時に取得したシーン情報を返します。 |
room.prepareNavigation(options?) | シーンのSpawn Pointとナビゲーション用メッシュを読み込みます。 |
room.getUsers() | ルーム内のユーザー一覧を非同期で取得します。 |
room.getNearbyUsers(radius?) | ボットから指定距離以内にいるユーザーを取得します。 |
const nearbyUsers = await client.room.getNearbyUsers(5);
for (const user of nearbyUsers) {
console.log(user.name);
}
チャット
chat.send()はルーム全体へメッセージを送ります。
await client.chat.send("こんにちは");
chat.onMessage()はチャットを購読し、受信イベントに付属するreply()で返信できます。
client.chat.onMessage(async ({ from, text, mention, reply }) => {
console.log(from.name, text, mention);
await reply("メッセージを受け取りました");
});
メンションは[@表示名](session-id)形式です。
ボット同士の応答ループや連投を防ぐ条件を、ハンドラー側で設けてください。
アバター
| API | 説明 |
|---|---|
avatar.select(assetId) | アバターを変更します。 |
avatar.play(animation) | アニメーションを再生します。 |
avatar.moveTo(position) | 指定した座標へ移動します。 |
avatar.rotateTo(rotation) | 度数法のオイラー角へ回転します。 |
avatar.lookAt(target) | 指定座標の方向を向きます。 |
avatar.getPosition() | 現在位置を返します。 |
avatar.getAvailableAssets() | 選択できるアバターを取得します。 |
avatar.getAvailableAnimations() | 現在のアバターで利用できるアニメーションを取得します。 |
await client.avatar.moveTo({ x: 2, y: 0, z: -3 });
await client.avatar.lookAt({ x: 0, y: 1.6, z: 0 });
const animations = await client.avatar.getAvailableAnimations();
if (animations[0]) {
await client.avatar.play(animations[0]);
}
イベント
on()で購読し、不要になったら同じイベント名とリスナーをoff()へ渡します。
| イベント | 内容 |
|---|---|
connected | 接続が完了しました。 |
disconnected | 接続が終了しました。 |
user-join | ユーザーが入室しました。 |
user-leave | ユーザーが退室しました。 |
chat-message | チャットを受信しました。 |
message | 低レベルのメッセージを受信しました。 |
voice:mute-changed | ボットのミュート状態が変わりました。 |
room-scene-changed | ルームのシーンが変更されました。 |
const onJoin = (user) => console.log(`${user.name} joined`);
client.on("user-join", onJoin);
// 終了処理
client.off("user-join", onJoin);
音声
音声を使う前にenableVoice()で接続を有効化します。
詳しくは音声ボット開発を参照してください。
低レベルのAgentClient
AgentClientは、接続、送信、移動、視線、アニメーション、ユーザー、音声を個別に扱う低レベルAPIです。
新規実装では、接続処理とサービス構成をまとめたMetatellClientを優先してください。
主なAPIは次のとおりです。
| 分類 | API |
|---|---|
| 接続 | connect、disconnect、getStatus |
| メッセージ | send |
| 移動と視線 | move、look、lookAtNearest |
| アニメーション | playAnimation、stopAnimation、getAvailableAnimations、getCurrentAnimation |
| ユーザー | getUsers、getUser、getUsersNearby |
| 音声 | sendVoiceFrame、muteVoice、isVoiceMuted |
| 運用 | setRateLimit、getRateLimit、on、off |