メインコンテンツまでスキップ

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
接続connectdisconnectgetStatus
メッセージsend
移動と視線movelooklookAtNearest
アニメーションplayAnimationstopAnimationgetAvailableAnimationsgetCurrentAnimation
ユーザーgetUsersgetUsergetUsersNearby
音声sendVoiceFramemuteVoiceisVoiceMuted
運用setRateLimitgetRateLimitonoff