डेवलपर
MCP आपके सिस्टम से AI को जोड़ने का खुला मानक है: अपना सर्वर रजिस्टर करिए, चुनिए कि हर टूल का इस्तेमाल कौन कर सकते हैं, प्रकाशित करिए। असिस्टेंट को वेब, iOS, Android और डेस्कटॉप पर लॉन्च करिए, और हर वर्कस्पेस को किसी भी MCP क्लाइंट से संभालिए।
claude mcp add --transport http busymate-ai https://busymate.ai/mcpजुड़ने के रास्ते
आपके चुने हुए किसी भी पेज पर एक स्क्रिप्ट टैग — लॉन्चर और अतिथि चैट तुरंत काम करने लगते हैं।
खाते की पहचान, चैट और कंट्रोल पर टैप करने से माँगी जाने वाली माइक्रोफ़ोन अनुमति के लिए वर्शन वाला Swift पैकेज इंस्टॉल करें।
खाते की पहचान, चैट और कंट्रोल पर टैप करने से माँगी जाने वाली माइक्रोफ़ोन अनुमति के लिए वर्शन वाली Android लाइब्रेरी इंस्टॉल करें।
आपका अपना MCP सर्वर असिस्टेंट की कार्रवाइयाँ बन जाता है — हर ग्राहक की ओर से।
OAuth के ज़रिए Claude, Claude Code, Cursor या किसी भी MCP क्लाइंट से प्लेटफ़ॉर्म चलाएँ।
WebMCP: आपके पेज अपने एक्शन को टूल के रूप में सूचीबद्ध करते हैं — बुक करें, ऑर्डर करें, स्टेटस देखें — पुष्टि पहले से शामिल है।
01क्विकस्टार्ट
आपका ऐप ही सत्य का स्रोत बना रहता है। असिस्टेंट को एक अल्पकालिक हस्ताक्षरित टोकन मिलता है जो बताता है कि कौन मौजूद है, और वह आपके टूल को एक अलग, सीमित दायरे वाले एक्टर के रूप में कॉल करता है।
01
पहचान और अकाउंट डेटा रखता है; दो मिनट का ऐसा टोकन हस्ताक्षरित करता है जो बताता है कि कौन साइन-इन है।
02
आपके वर्कस्पेस की सेटिंग्स लागू करता है: सामग्री, मॉडल, टूल के एक्सेस स्तर, पुष्टि चरण, हैंडऑफ़।
03
एक बार में एक उपयोगकर्ता के लिए टूल का जवाब देता है, और उपयोगकर्ता की पहचान साइन-इन बियरर टोकन से लेता है — टूल के आर्ग्युमेंट से कभी नहीं।
जुड़ने के 7 तरीके, असिस्टेंट एक: वेब एम्बेड · साइन-इन ग्राहक · iOS · Android · डेस्कटॉप · REST API · आपका MCP सर्वर
02साइन-इन ग्राहक
ताकि असिस्टेंट भरोसा कर सके कि पूछने वाला कौन है, आपके बैकएंड का एक प्रमाणित एंडपॉइंट आपकी स्थायी ग्राहक id और कुछ सुरक्षित प्रदर्शन फ़ील्ड के साथ एक अल्पकालिक टोकन (ES256 JWT) पर हस्ताक्षर करता है।
टोकन अधिकतम 120 सेकंड तक रहता है, एक-बार नोंस और jti रखता है, और आपके वर्कस्पेस का नाम बताता है। निजी कुंजी और आपका प्रोडक्ट सेशन कभी ब्राउज़र या चैट तक नहीं पहुँचते।
import { SignJWT, importJWK } from "jose";
// POST https://YOUR-PRODUCT-DOMAIN/api/bmai/identity — requires YOUR OWN logged-in product session.
app.post("/api/bmai/identity", requireSession, async (req, res) => {
// Fresh on EVERY mint. Never persist the launch token/nonce in localStorage,
// sessionStorage, cookies, React state, or module state: every assistant
// launch consumes this pair exactly once.
const nonce = typeof req.body?.nonce === "string" ? req.body.nonce : "";
if (!/^[A-Za-z0-9_-]{32,200}$/.test(nonce)) return res.status(400).json({ error: "invalid_nonce" });
const key = await importJWK(JSON.parse(process.env.AI_LAUNCH_PRIVATE_JWK), "ES256");
const token = await new SignJWT({
tenant_id: process.env.BMAI_TENANT_ID, // the tenant id shown in Console → Identity
nonce, // equals the sibling field below
name: req.user.displayName, // optional low-sensitivity display claim
})
.setProtectedHeader({ alg: "ES256", kid: process.env.AI_LAUNCH_KEY_ID })
.setIssuer(process.env.BMAI_ISSUER) // the Issuer you registered in Console → Identity
.setAudience("busymate-ai")
.setSubject(req.user.id) // IMMUTABLE internal account id; never email/phone/session id
.setJti(crypto.randomUUID()) // one-time (replay-protected)
.setIssuedAt()
.setExpirationTime("120s") // <= registered max age (120s)
.sign(key);
res.set("Cache-Control", "no-store");
res.status(201).json({ token, nonce, expiresIn: 120 });
});टोकन बताता है कि कौन मौजूद है, यह नहीं कि वह क्या कर सकता है। बैलेंस, डिवाइस, सेटिंग्स और हर बदलाव ऐसे टूल के पीछे रखें जो सिर्फ़ एक उपयोगकर्ता के लिए जवाब दें।
03वेब और पूरा पेज
SDK ज़रूरत पड़ने पर आपके बैकएंड से पहचान माँगता है, अतिथियों के लिए भी चलता है, लॉगिन और लॉगआउट के बाद ताज़ा होता है, बाहरी लिंक फ़्रेम के बाहर खोलता है, और उसे किसी थर्ड-पार्टी कुकी की ज़रूरत नहीं।
<!-- Floating "mate" launcher for Your product.
Anonymous chat works immediately on the allowed origins. -->
<script>
function newLaunchNonce() {
const bytes = new Uint8Array(32);
crypto.getRandomValues(bytes);
return btoa(String.fromCharCode(...bytes))
.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/g, "");
}
window.BusymateAI = {
getIdentity: async () => {
const accessToken = await getProductAccessToken(); // YOUR existing auth helper
if (!accessToken) return null;
const nonce = newLaunchNonce();
const returnTo = new URL(location.href); returnTo.search = ""; returnTo.hash = "";
const r = await fetch("https://YOUR-PRODUCT-DOMAIN/api/bmai/identity", {
method: "POST", credentials: "include", cache: "no-store",
headers: { "content-type": "application/json", authorization: "Bearer " + accessToken },
body: JSON.stringify({ nonce, returnTo: returnTo.href }),
});
if (r.status === 401) return null; // signed out -> anonymous chat
if (!r.ok) throw new Error("AI identity mint failed (" + r.status + ")");
// MUST be a newly minted { token, nonce } pair on every call. Never
// persist either value in localStorage, sessionStorage, cookies, React
// state, or module state.
const identity = await r.json();
if (identity.nonce !== nonce) throw new Error("AI identity nonce mismatch");
return { token: identity.token, nonce: identity.nonce };
},
};
// Call after YOUR product completes login, an access-token/session
// rotation, or an account switch — upgrades the live conversation in
// place, same thread. Do not send an identity postMessage directly.
window.assistantIdentityChanged = () =>
window.BusymateAI?.identityChanged?.() ?? Promise.resolve(false);
// Call after YOUR product completes logout. Without this the signed-out
// visitor keeps a verified chat and the previous transcript until the tab
// closes — a privacy defect, not a missing nicety.
window.assistantSignedOut = () =>
window.BusymateAI?.signedOut?.("signed_out");
</script>
<script
src="https://your-assistant.busymate.ai/embed/v1.js"
data-assistant="your-assistant"
data-label="Ask mate"
async></script>जब कोई साइन-इन उपयोगकर्ता आपके असिस्टेंट का पता या आपका कस्टम डोमेन खोले, तो साइन-इन टोकन URL फ़्रैगमेंट में भेजें। पेज एक्सचेंज से पहले उसे हटा देता है।
// Full-page open with identity in the URL FRAGMENT — never sent in the
// request line, referrer, or logs; the destination strips it before exchange.
function newLaunchNonce() {
const bytes = new Uint8Array(32);
crypto.getRandomValues(bytes);
return btoa(String.fromCharCode(...bytes))
.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/g, "");
}
const nonce = newLaunchNonce();
const accessToken = await getProductAccessToken(); // YOUR existing auth helper
if (!accessToken) throw new Error("Sign in before opening an identified assistant");
const returnTo = new URL(location.href); returnTo.search = ""; returnTo.hash = "";
const response = await fetch("https://YOUR-PRODUCT-DOMAIN/api/bmai/identity", {
method: "POST", credentials: "include", cache: "no-store",
headers: { "content-type": "application/json", authorization: "Bearer " + accessToken },
body: JSON.stringify({ nonce, returnTo: returnTo.href }),
});
if (response.status === 401) throw new Error("Sign in before opening an identified assistant");
if (!response.ok) throw new Error("AI identity mint failed (" + response.status + ")");
const identity = await response.json();
if (typeof identity.token !== "string" || typeof identity.nonce !== "string") {
throw new Error("AI identity mint returned an invalid response");
}
if (identity.nonce !== nonce) throw new Error("AI identity nonce mismatch");
const url = new URL("https://your-assistant.busymate.ai/");
url.hash = new URLSearchParams({
bmai_token: identity.token,
bmai_nonce: identity.nonce,
}).toString();
location.assign(url);04iPhone
Swift पैकेज का वर्शन निश्चित करें। प्रमाणीकरण वाले अपने बैकएंड को जोड़ें और प्लेटफ़ॉर्म गाइड तथा उदाहरण ऐप की मदद से सिस्टम की माइक्रोफ़ोन अनुमति जोड़ें।
iOS इंस्टॉलेशन, कॉन्फ़िगरेशन और डेमो
// Swift Package: https://github.com/serebano/busymate-ai-sdk-ios.git (exact 1.0.2)
// Full lifecycle + demo: https://busymate.ai/docs/guides/ios-sdk
import WebKit
import BusymateAI
@MainActor
func installAssistant(
on webView: WKWebView,
account: @escaping () -> String?,
mint: @escaping @MainActor (BusymateBridge.MintRequest) async throws -> BusymateBridge.MintToken?
) {
BusymateBridge.install(on: webView, config: .init(
assistant: "your-assistant",
origins: ["https://your-assistant.busymate.ai"],
account: account,
mint: mint
))
// mint calls YOUR authenticated backend with request.nonce; never cache tokens.
// Backend endpoint: https://YOUR-PRODUCT-DOMAIN/api/bmai/identity
webView.load(URLRequest(url: URL(string: "https://your-assistant.busymate.ai/?channel=ios")!))
}
// Microphone: declare NSMicrophoneUsageDescription; install and retain
// BusymateMicrophone before load, and forward WKUIDelegate media permission.
// Call BusymateBridge.accountChanged() on login/logout/account changes.05Android
Android लाइब्रेरी का वर्शन निश्चित करें। चैट लोड करने से पहले इंस्टॉल करें और Activity जीवनचक्र, माइक्रोफ़ोन और रेंडरर रिकवरी गाइड का पालन करें।
Android इंस्टॉलेशन, कॉन्फ़िगरेशन और डेमो
// Gradle installation + lifecycle: https://busymate.ai/docs/guides/android-sdk
// Source: https://github.com/serebano/busymate-ai-sdk-android/tree/1.0.2
import android.webkit.WebView
import ai.busymate.bridge.BusymateBridge
fun installAssistant(
webView: WebView,
account: () -> String?,
mint: (Map<String, Any?>, (BusymateBridge.MintResult) -> Unit) -> Unit
) {
BusymateBridge.install(webView, BusymateBridge.Config(
assistant = "your-assistant",
origins = listOf("https://your-assistant.busymate.ai"),
account = account,
mint = mint
))
// mint calls YOUR authenticated backend with request["nonce"], then done(result).
// Backend endpoint: https://YOUR-PRODUCT-DOMAIN/api/bmai/identity
webView.loadUrl("https://your-assistant.busymate.ai/?channel=android")
}
// Microphone: declare INTERNET + RECORD_AUDIO; construct and retain
// BusymateMicrophone in Activity.onCreate BEFORE STARTED/loadUrl; forward
// WebChromeClient.onPermissionRequest. See the guide for renderer recovery.
// Call BusymateBridge.accountChanged() on login/logout/account changes.06डेस्कटॉप
macOS, Windows, Electron, Linux और Tauri के आधिकारिक SDK होस्टेड चैट को एक अलग WebView में लोड करते हैं, विशेषाधिकार वाली होस्ट परत के ज़रिए पहचान अनुरोधों का जवाब देते हैं और सुरक्षित URL बाहर खोलते हैं। SDK संस्करण पिन करें और मोबाइल की तरह अपना प्रमाणित बैकएंड जोड़ें।
डेस्कटॉप इंस्टॉलेशन, कॉन्फ़िगरेशन और उदाहरण ऐप्स
// Official desktop SDK for your platform — macOS, Windows, Electron, Linux or Tauri:
// https://github.com/serebano/busymate-ai-sdk-electron (and -macos, -windows, -linux, -tauri).
// Every SDK takes these settings and installs the identity bridge before the first load.
const chatOptions = {
url: "https://your-assistant.busymate.ai/?channel=desktop_sdk", // the window's top-level page
assistant: "your-assistant",
account: () => productAuth.currentUserId(), // null when signed out
// YOUR authenticated backend signs { token, nonce } for request.nonce.
mint: (request) => productAuth.mintAssistantIdentity(request),
};07MCP टूल
डिस्कवरी पर पूरे स्कीमा प्रकाशित करें। हर टूल को तीन एक्सेस स्तरों में से एक दें, उन बदलावों को चिह्नित करें जिन्हें पुष्टि कार्ड चाहिए, और हर कॉल पर अधिकार दोबारा जाँचें।
चैट करने वाला कोई भी इसे कॉल कर सकता है। कीमतें, स्थिति, ख़ूबियाँ।
साइन-इन उपयोगकर्ता ज़रूरी। ऑर्डर की स्थिति, अकाउंट से जुड़े जवाब।
साइन-इन उपयोगकर्ता की ओर से एक सीमित एक्टर टोकन या उपयोगकर्ता की अपनी OAuth अनुमति से काम करता है।
हर बदलाव की पुष्टि सर्वर पर होती है। confirm_tools में सूचीबद्ध टूल चलने से पहले एक पुष्टि कार्ड पर रुकते हैं; और वैसा हर टूल नाम भी, जिसे असिस्टेंट पहचानता नहीं। विजेट फ़्रेम कभी कोई बदलाव नहीं चलाते।
MCP endpoint ............ https://YOUR-DOMAIN/mcp
RFC 8707 resource ....... https://YOUR-DOMAIN/mcp (the token is audience-bound to this)
AS metadata (RFC 8414) .. https://YOUR-DOMAIN/.well-known/oauth-authorization-server
Resource meta (RFC 9728) https://YOUR-DOMAIN/.well-known/oauth-protected-resource
Client registration ..... Dynamic (RFC 7591) — public client, no secret
PKCE .................... S256 required (RFC 7636)
Authorization response .. iss parameter checked (RFC 9207)
Grants .................. authorization_code + refresh_token
Delegated tools/call .... no bearer -> 401; user derived from the bearer,
NEVER from an account id in tool arguments
Customer experience ..... one separate Authorize account tools action is expected;
use signed_actor_token instead for automatic SSO// POST https://YOUR-DOMAIN/mcp
// Authorization: Bearer <the per-user OAuth token mate obtained>
{
"jsonrpc": "2.0",
"id": 12,
"method": "tools/call",
"params": { "name": "get_my_account", "arguments": {} }
}
// Your server verifies the bearer, derives the user from its signed subject,
// and returns ONLY that user's data.वही प्रोटोकॉल सेट लागू होता है — चाहे प्लैटफ़ॉर्म आपके सर्वर का क्लाइंट हो, या आपके MCP क्लाइंट का सर्वर।
REST API और webhooks
एक वर्कस्पेस-स्कोप्ड API key REST endpoints और MCP server दोनों को प्रमाणित करता है। बातचीत सूचीबद्ध और पढ़ें, एक ऑपरेटर रिप्लाई पोस्ट करें, या polling की जगह webhook की सदस्यता लें।
Console → API keys में एक key बनाएँ, फिर इसे Bearer token के रूप में भेजें।
curl https://busymate.ai/api/v1/conversations \
-H "Authorization: Bearer bmai_sk_..."पूरा संदर्भ: API गाइड, webhooks गाइड, OpenAPI दस्तावेज़.
08हैंडऑफ़ और इनसाइट्स
ग्राहक किसी व्यक्ति से बात माँगे, कोई टूल विफल हो, रिफ़ंड आपकी सीमा से ऊपर हो, कोई कीवर्ड दिखे, या आपका तय किया कोई भी इवेंट हो।
एक इनबॉक्स; बातचीत हाथ से, बारी-बारी या सबसे कम खुली चैट वाले को सौंपी जाती है; सूचनाएँ ऐप में, Web Push, APNs और निजी Telegram पर।
बातचीत देखें, संदर्भ के साथ जुड़ें, उसी चैट में जवाब दें; जब तक कोई व्यक्ति सक्रिय है, असिस्टेंट कोई बदलाव नहीं करता।
बार-बार आने वाले सवाल, जानकारी में कमी और अटकने वाले रास्ते — असली बातचीत से समूहबद्ध, और प्रमाण के लिंक के साथ।
09वर्कस्पेस लॉगिन
कंसोल में वर्कस्पेस के लॉगिन और अकाउंट URL सेट करें। जो अतिथि साइन इन चुनता है, वह फ़्रेम छोड़कर आपके प्रोडक्ट पर प्रमाणित होता है और ठीक उसी URL पर लौट आता है। इसके बाद आपका बैकएंड एक बार इस्तेमाल होने वाला साइन-इन टोकन देता है; Busymate AI को उपयोगकर्ता का पासवर्ड या आपकी हस्ताक्षर कुंजी कभी नहीं मिलती।
कोई भी बदलाव सिर्फ़ साइन-इन उपयोगकर्ता के अपने डेटा को छूता है। अकाउंट टूल ग्राहक की पहचान डेलिगेटेड एक्टर से लेते हैं, हर कॉल पर अधिकार दोबारा जाँचते हैं, और आपके तय किए गए बदलावों पर पुष्टि माँगते हैं।
10लॉन्च चेकलिस्ट
अपना वर्कस्पेस सेट करने के लिए तैयार हैं?
कंसोल का इंटीग्रेशन पेज आपकी प्रकाशित सेटिंग्स से हर सतह के लिए कोड और सेटिंग्स बना देता है।
WebMCP
WebMCP, W3C Web Machine Learning Community Group का ड्राफ्ट है जिसमें पेज अपने एक्शन को टूल के रूप में सूचीबद्ध करते हैं। शुरुआत करने के तीन तरीके, सबसे छोटे बदलाव से लेकर पूरे नियंत्रण तक।
book_appointment, check_order_status, start_return — एक टूल, एक काम।
“अगले मंगलवार दस बजे”, “Express” — कभी भी कोई आंतरिक id नहीं जिसे असिस्टेंट को अंदाज़ा लगाना पड़े।
वे टूल पेश करें जो यह पेज चला सकता है; पेज बदलने पर उन्हें अनरजिस्टर कर दें।
बुकिंग, पेमेंट, रिटर्न: इसे फ्लैग करें, और चलने से पहले ग्राहक पुष्टि करता है।
पुष्टि ग्राहक के पास ही रहती है। टूल विज़िटर के अपने ब्राउज़र में, आपके ओरिजिन पर चलते हैं। जिस टूल को आप महत्वपूर्ण के रूप में चिह्नित करते हैं, वह ग्राहक को दिखने वाली पुष्टि पर रुक जाता है; exposedTo यह सीमित करता है कि कौन से ओरिजिन किसी टूल को देख भी सकते हैं।
सबसे छोटा बदलाव: आपके पास पहले से मौजूद फ़ॉर्म पर एक नाम और एक-पंक्ति का विवरण। ब्राउज़र इसे टूल में बदल देता है; फ़ॉर्म दिखता रहता है और सबके लिए काम करता रहता है।
<form action="/book" toolname="book_appointment"
tooldescription="Book an appointment for a date, a time and a service."
toolautosubmit>
<input name="date" type="date" toolparamdescription="The day, e.g. next Tuesday">
<input name="time" type="time" toolparamdescription="The start time">
<select name="service" toolparamdescription="Which service to book">
<option>Consultation</option>
<option>Follow-up</option>
</select>
<button type="submit">Book</button>
</form>पूरा नियंत्रण: ब्राउज़र API। इसे फीचर-डिटेक्ट करें — WebMCP के बिना ब्राउज़र को पेज आज जैसा ही मिलता है। Chrome 149 और Edge 150 इसे ओरिजिन ट्रायल के रूप में ले जाते हैं; Firefox और Safari प्रस्ताव की समीक्षा कर रहे हैं।
// The browser API (draft). Load the polyfill BEFORE this file so every browser has it
// (it stands down where the browser is native):
// <script src="https://busymate.ai/webmcp/polyfill-1.0.1.js" integrity="sha384-pLZ5lO3gwZIn8Nim+hDrUQY+bvpliRtZhrS1O1OGRFB3lvoW0sZ71DUFHIk3m+DG" crossorigin="anonymous"></script>
const ctx = document.modelContext ?? navigator.modelContext;
if (!ctx) throw new Error("no WebMCP registry: the polyfill did not load");
ctx?.registerTool({
name: "start_return",
description: "Start a return for a delivered order. Asks the customer to confirm first.",
inputSchema: { type: "object", properties: { orderNumber: { type: "string", description: "The order number, as printed on the receipt" } }, required: ["orderNumber"] },
annotations: { consequentialHint: true },
execute: async ({ orderNumber }) => startReturn(orderNumber),
}, { exposedTo: ["self"] });जहां असिस्टेंट पहले से इंस्टॉल है, वहां एक कॉल आपके टूल को उसके लिए और आने वाले हर दूसरे असिस्टेंट के लिए सूचीबद्ध कर देता है — जहां ब्राउज़र API मौजूद है वहां उस पर, और बाकी जगह असिस्टेंट के अपने ब्रिज पर।
// One call, both transports: the browser's own WebMCP where it exists,
// and the assistant's bridge everywhere else (Safari, Firefox, app WebViews).
BusymateAI.registerPageTools([
{
name: "check_order_status",
description: "Look up an order by its number and say where it is.",
inputSchema: {
type: "object",
properties: { orderNumber: { type: "string", description: "The order number, as printed on the receipt" } },
required: ["orderNumber"],
additionalProperties: false,
},
annotations: { readOnlyHint: true },
execute: async ({ orderNumber }) => (await fetch(`/api/orders/${orderNumber}`)).json(),
},
]);अपनाने का तरीका और कॉपी-पेस्ट प्रॉम्प्टआपकी टीम के लिए सरल भाषा में पेज
मैनेजमेंट MCP
OAuth 2.1 के साथ MCP पर प्रबंधन टूल। क्लाइंट पहली कनेक्शन पर ब्राउज़र साइन-इन खोलता है; कुछ भी पेस्ट नहीं होता।
https://busymate.ai/mcp| क्लाइंट | यह कैसे जुड़ता है |
|---|---|
| Claude | Claude की कनेक्टर डायरेक्टरी से कनेक्टर जोड़ें और साइन इन करें — कुछ भी पेस्ट करने की ज़रूरत नहीं। |
| ChatGPT and Codex | ऐप OpenAI की समीक्षा में है और अभी सूचीबद्ध नहीं है। |
| Claude Code (CLI) | नीचे दिया गया कमांड चलाइए — ब्राउज़र OAuth साइन-इन को संभालता है। |
| Cursor | नीचे दिया गया mcp.json प्रविष्टि को Cursor की MCP सेटिंग में पेस्ट करें। |
| दूसरे MCP क्लाइंट | क्लाइंट को नीचे दिया गया एंडपॉइंट दें; OAuth 2.1 discovery और PKCE बाकी को संभालते हैं। |
आप जिस अकाउंट से साइन इन करते हैं, वही तय करता है कि क्लाइंट कौन-से वर्कस्पेस संभाल सकता है। हर बदलाव पर पुष्टि माँगी जाती है।
claude mcp add --transport http busymate-ai https://busymate.ai/mcpCursor, Claude Desktop और हर वह क्लाइंट जो mcp.json पढ़ता है, यह एंट्री स्वीकार करता है; जो क्लाइंट रिमोट URL लेते हैं, वे ऊपर दिया गया एंडपॉइंट लेते हैं।
{
"mcpServers": {
"busymate-ai": {
"type": "http",
"url": "https://busymate.ai/mcp"
}
}
}नवीनतम बदलाव
बिल्ड 1631
When a store's connector is updated, Busymate AI re-checks its tools. That check no longer hides public product tools (search, product details, collections) on stores whose shoppers are identified by Busymate AI's signed token. Publishing a store's assistant works again after such an update. Busymate AI now checks, by itself, that a connector your workspace declares as its own actually accepts the signed customer token. A connector set to "your own product" (customer identity Busymate AI) runs that way only after its server has accepted Busymate AI's signed customer token. The platform now runs that live check on its own every 6 hours and after the connector's address changes, and admins can run it on demand and read every connector's resolved mode.
बिल्ड 1630
Busymate AI views in ChatGPT load their own data when ChatGPT doesn't deliver it. When ChatGPT runs several Busymate AI lookups at once, for example the conversations of five workspaces, the iPhone app often passed the result to only one of the views and the rest said "Couldn't load this result". A view for a read-only lookup now fetches its own data after 3 seconds when nothing arrived, using the same request. If that fails, it shows the real reason.
बिल्ड 1629
Signed-in customers now get one consistent answer about account tools. Each connector now has one "customer identity".