(この記事は IoTLT の Advent Calendar 2025・JavaScript の Advent Calendar 2025 の記事です)
はじめに
この記事の内容は、「Node.js版の BOCCO emo の SDK(emo-platform-api-nodejs)」を使い、「BOCCO emo の API(BOCCO emo Platform API)」を使った簡単な発話の処理を試した話です。
前に BOCCO emo に関して以下の記事を書いたことがあったのですが、この時は curl と Node.js を使い、API を直接扱っていました。
●BOCCO emo を開発者モードにして API で扱う(簡単な発話)【curl と Node.js】 - Qiita
https://qiita.com/youtoy/items/d453d65efaacbe77e203
今回は、以下の Node.js版の SDK を使って、上記の記事でやっていたことと同じ内容(簡単な発話)を試します。
※ SDK の最終更新が 3年前となっている部分は、少し気になりつつ
●@ux-xu/emo-platform-api-nodejs - npm
https://www.npmjs.com/package/@ux-xu/emo-platform-api-nodejs
情報を確認しつつ試していく
ここから、公式の情報を確認しつつ、SDK を試してみます。
SDK に関する公式情報
今回使う SDK の情報は、以下の公式の APIドキュメントに情報が掲載されています。
●APIドキュメント | BOCCO emo Platform API
https://platform-api.bocco.me/api-docs/#overview--%E6%9C%AC%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6
上記のページに、以下の「SDK(ソフトウェア開発キット)」という部分があり、ここに Python版・Node.js版の SDK の情報が書かれています。
インストールコマンド
パッケージのインストールコマンドは、以下になるようです。
npm install @ux-xu/emo-platform-api-nodejs
サンプルコード
また、サンプルコードは以下の Usage の部分に書かれています。
●@ux-xu/emo-platform-api-nodejs - npm
https://www.npmjs.com/package/@ux-xu/emo-platform-api-nodejs
import type { AxiosError } from 'axios'
import { EmoApiClient } from '@ux-xu/emo-platform-api-nodejs'
const apiClient = new EmoApiClient({
accessToken: 'YOUR ACCESS TOKEN',
refreshToken: 'YOUR REFRESH TOKEN',
})
// Get my account information
apiClient.getMe()
.then(response => {
console.log(response)
})
.catch((error: AxiosError) => {
console.error(`Status code: ${error?.response?.status}`)
console.error(error?.response?.data)
console.log(error)
})
// Get my rooms
apiClient.getRooms()
.then(response => {
console.log(response)
})
.catch((error: AxiosError) => {
console.error(`Status code: ${error?.response?.status}`)
console.error(error?.response?.data)
})
// response example
{
listing: { offset: 0, limit: 50, total: 1 },
rooms: [
{
uuid: 'bcbcbcbc-1234-5678-abcd-aaaaaaaaaaaa',
name: 'My first room',
roomType: 'normal',
roomMembers: [Array]
}
]
}
// Post a message
// You can obtain uuids of rooms from `getRooms` API.
const roomUuid = 'bcbcbcbc-1234-5678-abcd-aaaaaaaaaaaa'
apiClient
.postTextMessage(roomUuid, {
text: 'Hello, BOCCO!',
})
.then(response => {
console.log(response)
})
.catch((error: AxiosError) => {
console.error(`Status code: ${error?.response?.status}`)
console.error(error?.response?.data)
})
SDK を使ってみる
それでは、SDK を使ってみます。
下準備
SDK を使った今回のお試しは、簡単な発話を試します。
SDK のサンプルコードでいうと、以下の「postTextMessage()」を使った処理です。
// Post a message
// You can obtain uuids of rooms from `getRooms` API.
const roomUuid = 'bcbcbcbc-1234-5678-abcd-aaaaaaaaaaaa'
apiClient
.postTextMessage(roomUuid, {
text: 'Hello, BOCCO!',
})
.then(response => {
console.log(response)
})
.catch((error: AxiosError) => {
console.error(`Status code: ${error?.response?.status}`)
console.error(error?.response?.data)
})
これを試すには、以下の下準備が必要です。
- パッケージ(emo-platform-api-nodejs)のインストール
- 以下 3つのトークンなどの取得
- アクセストークン
- リフレッシュトークン
- 部屋の ID
トークンなどの取得方法は、冒頭にも掲載していた過去の記事に書いているので、その記事をご参照ください。また、部屋の ID については、今回の SDK を使った処理でも取得できるようです。
ちなみに、アクセストークンは 1時間で有効期限切れとなるものですが、今回使う SDK を使った場合は、その情報を自動で更新してくれるようです(リフレッシュトークンを使って、アクセストークンの期限切れに自動で対応する処理が入っているようでした)。
今回のお試し用のコード
以下は、今回のお試し用のコードです。
※ トークンや ID をコードに直書きしてしまっていますが、本来は環境変数で扱うなどの方法を用いるのが良いです
import { EmoApiClient } from "@ux-xu/emo-platform-api-nodejs";
const apiClient = new EmoApiClient({
accessToken:
"【アクセストークン】",
refreshToken: "【リフレッシュトークン】",
});
const roomUuid = "【部屋の ID】";
apiClient
.postTextMessage(roomUuid, {
text: "こんにちは!SDKを使ってメッセージを送信しています。",
})
.then((response) => {
console.log(response);
})
.catch((error) => {
console.error(`Status code: ${error?.response?.status}`);
console.error(error?.response?.data);
});
内容は、公式のサンプルコードをもとに、処理の一部を削って作ったものです。上記を実行すると、BOCCO emo にテキストメッセージが送られ、BOCCO emo がそれを読み上げるという動作を確認できました。
その他
以下は、今回の内容を進める中で、「BOCCO emo がメッセージを受け取ったものの発話しない状態になった」というのがあり、その際に調べた内容です。メモとして、内容を掲載してみます。
※ なお、自分の場合は BOCCO emo の再起動でなおりました
●呼びかけに反応しなくなった
https://www.bocco.me/faq/not-responding-to-my-call-2/
●BOCCO emo | よくあるお問い合わせと自分でできる解決法3選|ユカイ工学
https://note.com/ux_xu/n/n52ab378ccb80
