This commit is contained in:
sheepbox8646
2026-03-29 12:30:55 +00:00
parent cbfc3705fb
commit e813200f0d
134 changed files with 396 additions and 253 deletions
+2 -2
View File
File diff suppressed because one or more lines are too long
+5 -5
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
import{_ as t,o as a,c as o,ag as i}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"About Memoh","description":"","frontmatter":{},"headers":[],"relativePath":"about.md","filePath":"about.md","lastUpdated":1774787421000}'),n={name:"about.md"};function r(s,e,l,c,d,m){return a(),o("div",null,[...e[0]||(e[0]=[i("",41)])])}const p=t(n,[["render",r]]);export{u as __pageData,p as default};
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
import{_ as a,o as t,c as o,ag as i}from"./chunks/framework.CvgP6Fyv.js";const m=JSON.parse('{"title":"About Memoh","description":"","frontmatter":{},"headers":[],"relativePath":"about.md","filePath":"about.md","lastUpdated":1774359244000}'),r={name:"about.md"};function n(s,e,l,c,d,u){return t(),o("div",null,[...e[0]||(e[0]=[i("",34)])])}const p=a(r,[["render",n]]);export{m as __pageData,p as default};
@@ -1 +1 @@
import{t as p}from"./chunks/theme.BBjfXRRi.js";import{R as s,a2 as i,a3 as u,a4 as c,a5 as l,a6 as f,a7 as d,a8 as m,a9 as h,aa as g,ab as A,d as v,u as y,v as C,s as P,ac as b,ad as w,ae as R,af as E}from"./chunks/framework.CvgP6Fyv.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),R(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp};
import{t as p}from"./chunks/theme.DOOkDCSj.js";import{R as s,a2 as i,a3 as u,a4 as c,a5 as l,a6 as f,a7 as d,a8 as m,a9 as h,aa as g,ab as A,d as v,u as y,v as C,s as P,ac as b,ad as w,ae as R,af as E}from"./chunks/framework.CvgP6Fyv.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),R(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp};
@@ -1 +1 @@
import{_ as t,o,c as r,ag as a}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"Discord Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/discord.md","filePath":"channels/discord.md","lastUpdated":1774631569000}'),n={name:"channels/discord.md"};function i(s,e,l,c,d,h){return o(),r("div",null,[...e[0]||(e[0]=[a('<h1 id="discord-channel-configuration" tabindex="-1">Discord Channel Configuration <a class="header-anchor" href="#discord-channel-configuration" aria-label="Permalink to &quot;Discord Channel Configuration&quot;"></a></h1><p>Connecting your Memoh Bot to Discord allows it to join servers and interact with community members.</p><h2 id="step-1-create-a-discord-application" tabindex="-1">Step 1: Create a Discord Application <a class="header-anchor" href="#step-1-create-a-discord-application" aria-label="Permalink to &quot;Step 1: Create a Discord Application&quot;"></a></h2><ol><li>Go to the <a href="https://discord.com/developers/applications" target="_blank" rel="noreferrer">Discord Developer Portal</a>.</li><li>Click <strong>New Application</strong> and give it a name.</li><li>In the left sidebar, go to <strong>Bot</strong>.</li><li>Click <strong>Reset Token</strong> to generate a <strong>Bot Token</strong>. Copy this token and store it securely.</li></ol><h2 id="step-2-configure-bot-settings" tabindex="-1">Step 2: Configure Bot Settings <a class="header-anchor" href="#step-2-configure-bot-settings" aria-label="Permalink to &quot;Step 2: Configure Bot Settings&quot;"></a></h2><ol><li>Scroll down to the <strong>Privileged Gateway Intents</strong> section.</li><li>Enable <code>Message Content Intent</code>, <code>Server Members Intent</code> and <code>Presence Intent</code>.</li><li>Save changes.</li></ol><h2 id="step-3-invite-the-bot-to-your-server" tabindex="-1">Step 3: Invite the Bot to Your Server <a class="header-anchor" href="#step-3-invite-the-bot-to-your-server" aria-label="Permalink to &quot;Step 3: Invite the Bot to Your Server&quot;"></a></h2><ol><li>Go to <strong>OAuth2</strong> &gt; <strong>URL Generator</strong>.</li><li>Select scopes: <code>bot</code>, <code>applications.commands</code>.</li><li>Select permissions: <code>Send Messages</code>, <code>Read Message History</code>, <code>Embed Links</code>, <code>Attach Files</code>.</li><li>Copy the generated URL and open it in your browser.</li><li>Select the server you want to add the bot to and authorize it.</li></ol><blockquote><p>Official Guide: <a href="https://discord.com/developers/docs/intro" target="_blank" rel="noreferrer">Discord Developer Portal - Bots</a></p></blockquote><h2 id="step-4-configure-memoh" tabindex="-1">Step 4: Configure Memoh <a class="header-anchor" href="#step-4-configure-memoh" aria-label="Permalink to &quot;Step 4: Configure Memoh&quot;"></a></h2><ol><li>Go to your Bot&#39;s <strong>Channels</strong> tab in the Memoh Web UI.</li><li>Click <strong>Add Channel</strong> and select <strong>Discord</strong>.</li><li>Paste your <strong>Bot Token</strong>.</li><li>Click <strong>Save and Enable</strong>.</li></ol><h2 id="features-supported" tabindex="-1">Features Supported <a class="header-anchor" href="#features-supported" aria-label="Permalink to &quot;Features Supported&quot;"></a></h2><ul><li><strong>Message Content</strong>: Full access to chat text.</li><li><strong>Attachments</strong>: Support for images and files.</li><li><strong>Commands</strong>: Integration with Discord&#39;s slash commands (if configured via MCP).</li></ul>',13)])])}const u=t(n,[["render",i]]);export{g as __pageData,u as default};
import{_ as t,o,c as r,ag as a}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"Discord Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/discord.md","filePath":"channels/discord.md","lastUpdated":1774787421000}'),n={name:"channels/discord.md"};function i(s,e,l,c,d,h){return o(),r("div",null,[...e[0]||(e[0]=[a('<h1 id="discord-channel-configuration" tabindex="-1">Discord Channel Configuration <a class="header-anchor" href="#discord-channel-configuration" aria-label="Permalink to &quot;Discord Channel Configuration&quot;"></a></h1><p>Connecting your Memoh Bot to Discord allows it to join servers and interact with community members.</p><h2 id="step-1-create-a-discord-application" tabindex="-1">Step 1: Create a Discord Application <a class="header-anchor" href="#step-1-create-a-discord-application" aria-label="Permalink to &quot;Step 1: Create a Discord Application&quot;"></a></h2><ol><li>Go to the <a href="https://discord.com/developers/applications" target="_blank" rel="noreferrer">Discord Developer Portal</a>.</li><li>Click <strong>New Application</strong> and give it a name.</li><li>In the left sidebar, go to <strong>Bot</strong>.</li><li>Click <strong>Reset Token</strong> to generate a <strong>Bot Token</strong>. Copy this token and store it securely.</li></ol><h2 id="step-2-configure-bot-settings" tabindex="-1">Step 2: Configure Bot Settings <a class="header-anchor" href="#step-2-configure-bot-settings" aria-label="Permalink to &quot;Step 2: Configure Bot Settings&quot;"></a></h2><ol><li>Scroll down to the <strong>Privileged Gateway Intents</strong> section.</li><li>Enable <code>Message Content Intent</code>, <code>Server Members Intent</code> and <code>Presence Intent</code>.</li><li>Save changes.</li></ol><h2 id="step-3-invite-the-bot-to-your-server" tabindex="-1">Step 3: Invite the Bot to Your Server <a class="header-anchor" href="#step-3-invite-the-bot-to-your-server" aria-label="Permalink to &quot;Step 3: Invite the Bot to Your Server&quot;"></a></h2><ol><li>Go to <strong>OAuth2</strong> &gt; <strong>URL Generator</strong>.</li><li>Select scopes: <code>bot</code>, <code>applications.commands</code>.</li><li>Select permissions: <code>Send Messages</code>, <code>Read Message History</code>, <code>Embed Links</code>, <code>Attach Files</code>.</li><li>Copy the generated URL and open it in your browser.</li><li>Select the server you want to add the bot to and authorize it.</li></ol><blockquote><p>Official Guide: <a href="https://discord.com/developers/docs/intro" target="_blank" rel="noreferrer">Discord Developer Portal - Bots</a></p></blockquote><h2 id="step-4-configure-memoh" tabindex="-1">Step 4: Configure Memoh <a class="header-anchor" href="#step-4-configure-memoh" aria-label="Permalink to &quot;Step 4: Configure Memoh&quot;"></a></h2><ol><li>Go to your Bot&#39;s <strong>Platforms</strong> tab in the Memoh Web UI.</li><li>Click <strong>Add Channel</strong> and select <strong>Discord</strong>.</li><li>Paste your <strong>Bot Token</strong>.</li><li>Click <strong>Save and Enable</strong>.</li></ol><h2 id="features-supported" tabindex="-1">Features Supported <a class="header-anchor" href="#features-supported" aria-label="Permalink to &quot;Features Supported&quot;"></a></h2><ul><li><strong>Message Content</strong>: Full access to chat text.</li><li><strong>Attachments</strong>: Support for images and files.</li><li><strong>Commands</strong>: Integration with Discord&#39;s slash commands (if configured via MCP).</li></ul>',13)])])}const u=t(n,[["render",i]]);export{g as __pageData,u as default};
@@ -1 +1 @@
import{_ as t,o,c as r,ag as a}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"Discord Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/discord.md","filePath":"channels/discord.md","lastUpdated":1774631569000}'),n={name:"channels/discord.md"};function i(s,e,l,c,d,h){return o(),r("div",null,[...e[0]||(e[0]=[a("",13)])])}const u=t(n,[["render",i]]);export{g as __pageData,u as default};
import{_ as t,o,c as r,ag as a}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"Discord Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/discord.md","filePath":"channels/discord.md","lastUpdated":1774787421000}'),n={name:"channels/discord.md"};function i(s,e,l,c,d,h){return o(),r("div",null,[...e[0]||(e[0]=[a("",13)])])}const u=t(n,[["render",i]]);export{g as __pageData,u as default};
@@ -1 +1 @@
import{_ as o,o as t,c as i,ag as a}from"./chunks/framework.CvgP6Fyv.js";const c=JSON.parse('{"title":"Feishu (Lark) Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/feishu.md","filePath":"channels/feishu.md","lastUpdated":1772359263000}'),n={name:"channels/feishu.md"};function s(r,e,l,p,h,g){return t(),i("div",null,[...e[0]||(e[0]=[a('<h1 id="feishu-lark-channel-configuration" tabindex="-1">Feishu (Lark) Channel Configuration <a class="header-anchor" href="#feishu-lark-channel-configuration" aria-label="Permalink to &quot;Feishu (Lark) Channel Configuration&quot;"></a></h1><p>Memoh supports integrating with Feishu (Lark) via the Open Platform. This allows your enterprise bots to interact with users in groups or private chats.</p><h2 id="step-1-create-a-feishu-app" tabindex="-1">Step 1: Create a Feishu App <a class="header-anchor" href="#step-1-create-a-feishu-app" aria-label="Permalink to &quot;Step 1: Create a Feishu App&quot;"></a></h2><ol><li>Go to the <a href="https://open.feishu.cn/app" target="_blank" rel="noreferrer">Feishu Open Platform</a> and log in.</li><li>Click <strong>Create Custom App</strong>.</li><li>Enter a name and description, then click <strong>Create</strong>.</li><li>In the left sidebar, go to <strong>App Settings</strong> &gt; <strong>Credentials &amp; Basic Info</strong>.</li><li>Copy your <strong>App ID</strong> and <strong>App Secret</strong>.</li></ol><h2 id="step-2-enable-bot-capability" tabindex="-1">Step 2: Enable Bot Capability <a class="header-anchor" href="#step-2-enable-bot-capability" aria-label="Permalink to &quot;Step 2: Enable Bot Capability&quot;"></a></h2><ol><li>In the Feishu Developer Console, go to <strong>Capabilities</strong> &gt; <strong>Bot</strong>.</li><li>Click <strong>Enable Bot</strong>.</li></ol><h2 id="step-3-configure-permissions" tabindex="-1">Step 3: Configure Permissions <a class="header-anchor" href="#step-3-configure-permissions" aria-label="Permalink to &quot;Step 3: Configure Permissions&quot;"></a></h2><ol><li>Go to <strong>Capabilities</strong> &gt; <strong>Permissions</strong>.</li><li>Search for and enable the following permissions (at minimum): <ul><li><code>im:message</code> (Receive and send messages)</li><li><code>im:chat</code> (Access group chat information)</li></ul></li><li>Click <strong>Apply for Permissions</strong> if required by your organization.</li></ol><h2 id="step-4-configure-events-webhook-mode" tabindex="-1">Step 4: Configure Events (Webhook Mode) <a class="header-anchor" href="#step-4-configure-events-webhook-mode" aria-label="Permalink to &quot;Step 4: Configure Events (Webhook Mode)&quot;"></a></h2><ol><li>In Memoh, go to your Bot&#39;s <strong>Channels</strong> tab and add a <strong>Feishu</strong> channel.</li><li>Choose <strong>Inbound Mode</strong>: <code>webhook</code>.</li><li>Fill in your <strong>App ID</strong> and <strong>App Secret</strong>.</li><li>Click <strong>Save</strong>. Memoh will generate a <strong>Webhook Callback URL</strong>.</li><li>Copy this URL.</li><li>In the Feishu Console, go to <strong>App Settings</strong> &gt; <strong>Event Subscriptions</strong>.</li><li>Paste the URL into the <strong>Verification URL</strong> field and save.</li><li>Add events like <code>Receive Message</code> (im.message.receive_v1).</li></ol><blockquote><p>Official Guide: <a href="https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot" target="_blank" rel="noreferrer">Feishu Custom Bot Guide</a></p></blockquote><h2 id="step-5-publish-your-app" tabindex="-1">Step 5: Publish Your App <a class="header-anchor" href="#step-5-publish-your-app" aria-label="Permalink to &quot;Step 5: Publish Your App&quot;"></a></h2><ol><li>In the Feishu Console, go to <strong>App Release</strong> &gt; <strong>Version Management &amp; Release</strong>.</li><li>Click <strong>Create a Version</strong>, fill in the details, and submit for approval.</li><li>Once approved and published, the bot is ready to use.</li></ol>',13)])])}const d=o(n,[["render",s]]);export{c as __pageData,d as default};
import{_ as o,o as t,c as i,ag as a}from"./chunks/framework.CvgP6Fyv.js";const c=JSON.parse('{"title":"Feishu (Lark) Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/feishu.md","filePath":"channels/feishu.md","lastUpdated":1774787421000}'),n={name:"channels/feishu.md"};function s(r,e,l,p,h,g){return t(),i("div",null,[...e[0]||(e[0]=[a('<h1 id="feishu-lark-channel-configuration" tabindex="-1">Feishu (Lark) Channel Configuration <a class="header-anchor" href="#feishu-lark-channel-configuration" aria-label="Permalink to &quot;Feishu (Lark) Channel Configuration&quot;"></a></h1><p>Memoh supports integrating with Feishu (Lark) via the Open Platform. This allows your enterprise bots to interact with users in groups or private chats.</p><h2 id="step-1-create-a-feishu-app" tabindex="-1">Step 1: Create a Feishu App <a class="header-anchor" href="#step-1-create-a-feishu-app" aria-label="Permalink to &quot;Step 1: Create a Feishu App&quot;"></a></h2><ol><li>Go to the <a href="https://open.feishu.cn/app" target="_blank" rel="noreferrer">Feishu Open Platform</a> and log in.</li><li>Click <strong>Create Custom App</strong>.</li><li>Enter a name and description, then click <strong>Create</strong>.</li><li>In the left sidebar, go to <strong>App Settings</strong> &gt; <strong>Credentials &amp; Basic Info</strong>.</li><li>Copy your <strong>App ID</strong> and <strong>App Secret</strong>.</li></ol><h2 id="step-2-enable-bot-capability" tabindex="-1">Step 2: Enable Bot Capability <a class="header-anchor" href="#step-2-enable-bot-capability" aria-label="Permalink to &quot;Step 2: Enable Bot Capability&quot;"></a></h2><ol><li>In the Feishu Developer Console, go to <strong>Capabilities</strong> &gt; <strong>Bot</strong>.</li><li>Click <strong>Enable Bot</strong>.</li></ol><h2 id="step-3-configure-permissions" tabindex="-1">Step 3: Configure Permissions <a class="header-anchor" href="#step-3-configure-permissions" aria-label="Permalink to &quot;Step 3: Configure Permissions&quot;"></a></h2><ol><li>Go to <strong>Capabilities</strong> &gt; <strong>Permissions</strong>.</li><li>Search for and enable the following permissions (at minimum): <ul><li><code>im:message</code> (Receive and send messages)</li><li><code>im:chat</code> (Access group chat information)</li></ul></li><li>Click <strong>Apply for Permissions</strong> if required by your organization.</li></ol><h2 id="step-4-configure-events-webhook-mode" tabindex="-1">Step 4: Configure Events (Webhook Mode) <a class="header-anchor" href="#step-4-configure-events-webhook-mode" aria-label="Permalink to &quot;Step 4: Configure Events (Webhook Mode)&quot;"></a></h2><ol><li>In Memoh, go to your Bot&#39;s <strong>Platforms</strong> tab and add a <strong>Feishu</strong> channel.</li><li>Choose <strong>Inbound Mode</strong>: <code>webhook</code>.</li><li>Fill in your <strong>App ID</strong> and <strong>App Secret</strong>.</li><li>Click <strong>Save</strong>. Memoh will generate a <strong>Webhook Callback URL</strong>.</li><li>Copy this URL.</li><li>In the Feishu Console, go to <strong>App Settings</strong> &gt; <strong>Event Subscriptions</strong>.</li><li>Paste the URL into the <strong>Verification URL</strong> field and save.</li><li>Add events like <code>Receive Message</code> (im.message.receive_v1).</li></ol><blockquote><p>Official Guide: <a href="https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot" target="_blank" rel="noreferrer">Feishu Custom Bot Guide</a></p></blockquote><h2 id="step-5-publish-your-app" tabindex="-1">Step 5: Publish Your App <a class="header-anchor" href="#step-5-publish-your-app" aria-label="Permalink to &quot;Step 5: Publish Your App&quot;"></a></h2><ol><li>In the Feishu Console, go to <strong>App Release</strong> &gt; <strong>Version Management &amp; Release</strong>.</li><li>Click <strong>Create a Version</strong>, fill in the details, and submit for approval.</li><li>Once approved and published, the bot is ready to use.</li></ol>',13)])])}const d=o(n,[["render",s]]);export{c as __pageData,d as default};
@@ -1 +1 @@
import{_ as o,o as t,c as i,ag as a}from"./chunks/framework.CvgP6Fyv.js";const c=JSON.parse('{"title":"Feishu (Lark) Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/feishu.md","filePath":"channels/feishu.md","lastUpdated":1772359263000}'),n={name:"channels/feishu.md"};function s(r,e,l,p,h,g){return t(),i("div",null,[...e[0]||(e[0]=[a("",13)])])}const d=o(n,[["render",s]]);export{c as __pageData,d as default};
import{_ as o,o as t,c as i,ag as a}from"./chunks/framework.CvgP6Fyv.js";const c=JSON.parse('{"title":"Feishu (Lark) Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/feishu.md","filePath":"channels/feishu.md","lastUpdated":1774787421000}'),n={name:"channels/feishu.md"};function s(r,e,l,p,h,g){return t(),i("div",null,[...e[0]||(e[0]=[a("",13)])])}const d=o(n,[["render",s]]);export{c as __pageData,d as default};
+1
View File
@@ -0,0 +1 @@
import{_ as t,o as r,c as a,ag as o}from"./chunks/framework.CvgP6Fyv.js";const m=JSON.parse('{"title":"Channels Overview","description":"","frontmatter":{},"headers":[],"relativePath":"channels/index.md","filePath":"channels/index.md","lastUpdated":1774787421000}'),n={name:"channels/index.md"};function s(i,e,l,h,g,c){return r(),a("div",null,[...e[0]||(e[0]=[o('<h1 id="channels-overview" tabindex="-1">Channels Overview <a class="header-anchor" href="#channels-overview" aria-label="Permalink to &quot;Channels Overview&quot;"></a></h1><p>Channels are the gateways that connect your Memoh Bots to the outside world. By configuring channels, you can interact with your bots via your favorite messaging platforms.</p><p>Memoh currently supports the following channels:</p><ul><li><strong><a href="./telegram.html">Telegram</a></strong>: Feature-rich integration with streaming and attachment support.</li><li><strong><a href="./feishu.html">Feishu (Lark)</a></strong>: Enterprise-ready integration for business workflows.</li><li><strong><a href="./discord.html">Discord</a></strong>: Community-focused integration for servers and direct messages.</li><li><strong><a href="./qq.html">QQ</a></strong>: Quick setup for personal DM bots via the dedicated AI bot registration portal.</li><li><strong><a href="./matrix.html">Matrix</a></strong>: Decentralized messaging protocol support for any Matrix homeserver.</li><li><strong><a href="./wecom.html">WeCom (WeWork)</a></strong>: Enterprise messaging integration for WeCom workspaces.</li><li><strong><a href="./weixin.html">WeChat</a></strong>: Personal messaging via the WeChat AI bot platform.</li><li><strong>Email</strong>: Connect via SMTP providers, Mailgun, or Gmail OAuth (configured through Email Providers).</li><li><strong>Web</strong>: Built-in chat interface for immediate access.</li></ul><h2 id="general-setup-flow" tabindex="-1">General Setup Flow <a class="header-anchor" href="#general-setup-flow" aria-label="Permalink to &quot;General Setup Flow&quot;"></a></h2><ol><li><strong>Create an external app/bot</strong>: Register your bot on the target platform (e.g., via BotFather on Telegram).</li><li><strong>Obtain credentials</strong>: Fetch API tokens, App IDs, or secrets.</li><li><strong>Configure in Memoh</strong>: Add the channel to your Bot&#39;s <strong>Platforms</strong> tab and paste the credentials.</li><li><strong>Enable</strong>: Activate the channel to start receiving and sending messages.</li></ol><p>Choose a channel from the sidebar to see detailed configuration guides for each platform.</p>',7)])])}const p=t(n,[["render",s]]);export{m as __pageData,p as default};
@@ -0,0 +1 @@
import{_ as t,o as r,c as a,ag as o}from"./chunks/framework.CvgP6Fyv.js";const m=JSON.parse('{"title":"Channels Overview","description":"","frontmatter":{},"headers":[],"relativePath":"channels/index.md","filePath":"channels/index.md","lastUpdated":1774787421000}'),n={name:"channels/index.md"};function s(i,e,l,h,g,c){return r(),a("div",null,[...e[0]||(e[0]=[o("",7)])])}const p=t(n,[["render",s]]);export{m as __pageData,p as default};
-1
View File
@@ -1 +0,0 @@
import{_ as t,o as a,c as n,ag as r}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"Channels Overview","description":"","frontmatter":{},"headers":[],"relativePath":"channels/index.md","filePath":"channels/index.md","lastUpdated":1773070648000}'),o={name:"channels/index.md"};function s(i,e,l,h,c,d){return a(),n("div",null,[...e[0]||(e[0]=[r('<h1 id="channels-overview" tabindex="-1">Channels Overview <a class="header-anchor" href="#channels-overview" aria-label="Permalink to &quot;Channels Overview&quot;"></a></h1><p>Channels are the gateways that connect your Memoh Bots to the outside world. By configuring channels, you can interact with your bots via your favorite messaging platforms.</p><p>Memoh currently supports the following channels:</p><ul><li><strong><a href="./telegram.html">Telegram</a></strong>: The most feature-rich integration with streaming and attachment support.</li><li><strong><a href="./feishu.html">Feishu (Lark)</a></strong>: Enterprise-ready integration for business workflows.</li><li><strong><a href="./discord.html">Discord</a></strong>: Community-focused integration for servers and direct messages.</li><li><strong><a href="./qq.html">QQ</a></strong>: Quick setup for personal DM bots via the dedicated AI bot registration portal.</li><li><strong>Email</strong>: Connect via standard SMTP and IMAP (configured through Email Providers).</li><li><strong>Web</strong>: Built-in chat interface for immediate access.</li></ul><h2 id="general-setup-flow" tabindex="-1">General Setup Flow <a class="header-anchor" href="#general-setup-flow" aria-label="Permalink to &quot;General Setup Flow&quot;"></a></h2><ol><li><strong>Create an external app/bot</strong>: Register your bot on the target platform (e.g., via BotFather on Telegram).</li><li><strong>Obtain credentials</strong>: Fetch API tokens, App IDs, or secrets.</li><li><strong>Configure in Memoh</strong>: Add the channel to your Bot&#39;s settings and paste the credentials.</li><li><strong>Enable</strong>: Activate the channel to start receiving and sending messages.</li></ol><p>Choose a channel from the sidebar to see detailed configuration guides for each platform.</p>',7)])])}const p=t(o,[["render",s]]);export{u as __pageData,p as default};
@@ -1 +0,0 @@
import{_ as t,o as a,c as n,ag as r}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"Channels Overview","description":"","frontmatter":{},"headers":[],"relativePath":"channels/index.md","filePath":"channels/index.md","lastUpdated":1773070648000}'),o={name:"channels/index.md"};function s(i,e,l,h,c,d){return a(),n("div",null,[...e[0]||(e[0]=[r("",7)])])}const p=t(o,[["render",s]]);export{u as __pageData,p as default};
+1
View File
@@ -0,0 +1 @@
import{_ as e,o,c as r,ag as a}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"Matrix Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/matrix.md","filePath":"channels/matrix.md","lastUpdated":1774787421000}'),i={name:"channels/matrix.md"};function n(s,t,l,c,d,h){return o(),r("div",null,[...t[0]||(t[0]=[a('<h1 id="matrix-channel-configuration" tabindex="-1">Matrix Channel Configuration <a class="header-anchor" href="#matrix-channel-configuration" aria-label="Permalink to &quot;Matrix Channel Configuration&quot;"></a></h1><p>Connecting your Memoh Bot to Matrix allows it to communicate via the decentralized Matrix messaging protocol. Your bot can join rooms, respond to direct messages, and participate in group conversations on any Matrix homeserver.</p><h2 id="step-1-create-a-matrix-bot-account" tabindex="-1">Step 1: Create a Matrix Bot Account <a class="header-anchor" href="#step-1-create-a-matrix-bot-account" aria-label="Permalink to &quot;Step 1: Create a Matrix Bot Account&quot;"></a></h2><ol><li>Register a new account on your Matrix homeserver (e.g., via Element or any Matrix client).</li><li>Note the <strong>User ID</strong> (e.g., <code>@mybot:matrix.org</code>).</li><li>Obtain an <strong>Access Token</strong> for the account. You can do this by: <ul><li>Using the Matrix client login API: <code>POST /_matrix/client/r0/login</code></li><li>Or extracting it from your Matrix client&#39;s settings (Element: Settings &gt; Help &amp; About &gt; Access Token).</li></ul></li></ol><blockquote><p><strong>Important</strong>: Keep the access token secret. Anyone with this token can act as your bot account.</p></blockquote><h2 id="step-2-configure-memoh" tabindex="-1">Step 2: Configure Memoh <a class="header-anchor" href="#step-2-configure-memoh" aria-label="Permalink to &quot;Step 2: Configure Memoh&quot;"></a></h2><ol><li>Go to your Bot&#39;s <strong>Platforms</strong> tab in the Memoh Web UI.</li><li>Click <strong>Add Channel</strong> and select <strong>Matrix</strong>.</li><li>Fill in the required fields:</li></ol><table tabindex="0"><thead><tr><th>Field</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td><strong>Homeserver URL</strong></td><td>Yes</td><td>The base URL of your Matrix homeserver (e.g., <code>https://matrix.org</code>).</td></tr><tr><td><strong>Access Token</strong></td><td>Yes</td><td>The bot account&#39;s access token.</td></tr><tr><td><strong>User ID</strong></td><td>Yes</td><td>The bot&#39;s Matrix user ID (e.g., <code>@mybot:matrix.org</code>).</td></tr><tr><td><strong>Sync Timeout</strong></td><td>No</td><td>Long-polling timeout in seconds (default: 30).</td></tr><tr><td><strong>Auto Join Invites</strong></td><td>No</td><td>Automatically join rooms when invited (default: enabled).</td></tr></tbody></table><ol start="4"><li>Click <strong>Save and Enable</strong>.</li></ol><h2 id="step-3-invite-the-bot" tabindex="-1">Step 3: Invite the Bot <a class="header-anchor" href="#step-3-invite-the-bot" aria-label="Permalink to &quot;Step 3: Invite the Bot&quot;"></a></h2><ol><li>Open your Matrix client (Element, etc.).</li><li>Invite the bot&#39;s user ID to a room, or start a direct message.</li><li>If <strong>Auto Join Invites</strong> is enabled, the bot will automatically accept and join.</li></ol><h2 id="features-supported" tabindex="-1">Features Supported <a class="header-anchor" href="#features-supported" aria-label="Permalink to &quot;Features Supported&quot;"></a></h2><ul><li><strong>Message Content</strong>: Full access to text messages.</li><li><strong>Rooms</strong>: Join and participate in group rooms.</li><li><strong>Direct Messages</strong>: Private conversations with individual users.</li><li><strong>Streaming</strong>: Responses are streamed as they are generated.</li><li><strong>Markdown</strong>: Support for formatted text.</li></ul><h2 id="official-resources" tabindex="-1">Official Resources <a class="header-anchor" href="#official-resources" aria-label="Permalink to &quot;Official Resources&quot;"></a></h2><ul><li><a href="https://spec.matrix.org/" target="_blank" rel="noreferrer">Matrix Specification</a></li><li><a href="https://app.element.io/" target="_blank" rel="noreferrer">Element Web Client</a></li></ul>',15)])])}const m=e(i,[["render",n]]);export{g as __pageData,m as default};
@@ -0,0 +1 @@
import{_ as e,o,c as r,ag as a}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"Matrix Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/matrix.md","filePath":"channels/matrix.md","lastUpdated":1774787421000}'),i={name:"channels/matrix.md"};function n(s,t,l,c,d,h){return o(),r("div",null,[...t[0]||(t[0]=[a("",15)])])}const m=e(i,[["render",n]]);export{g as __pageData,m as default};
+1
View File
@@ -0,0 +1 @@
import{_ as e,o,c as a,ag as n}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"QQ Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/qq.md","filePath":"channels/qq.md","lastUpdated":1774787421000}'),r={name:"channels/qq.md"};function i(l,t,s,c,g,p){return o(),a("div",null,[...t[0]||(t[0]=[n('<h1 id="qq-channel-configuration" tabindex="-1">QQ Channel Configuration <a class="header-anchor" href="#qq-channel-configuration" aria-label="Permalink to &quot;QQ Channel Configuration&quot;"></a></h1><p>Connecting your Memoh Bot to QQ allows it to interact with users through QQ&#39;s official Bot platform.</p><h2 id="step-1-create-a-qq-bot" tabindex="-1">Step 1: Create a QQ Bot <a class="header-anchor" href="#step-1-create-a-qq-bot" aria-label="Permalink to &quot;Step 1: Create a QQ Bot&quot;"></a></h2><ol><li>Go to the <a href="https://q.qq.com/qqbot/openclaw/" target="_blank" rel="noreferrer">QQ Bot Open Platform</a> and log in with your QQ account.</li><li>Click <strong>Create Bot</strong> (创建机器人) - no approval required. Each account can create up to 5 bots.</li><li>Copy the <strong>AppID</strong> and <strong>AppSecret</strong> displayed on the page.</li></ol><blockquote><p><strong>Important</strong>: AppSecret is only shown once. Save it securely - viewing it again will force a reset.</p></blockquote><h2 id="step-2-configure-memoh" tabindex="-1">Step 2: Configure Memoh <a class="header-anchor" href="#step-2-configure-memoh" aria-label="Permalink to &quot;Step 2: Configure Memoh&quot;"></a></h2><ol><li>Go to your Bot&#39;s <strong>Platforms</strong> tab in the Memoh Web UI.</li><li>Click <strong>Add Channel</strong> and select <strong>QQ</strong>.</li><li>Paste your <strong>AppID</strong> and <strong>AppSecret</strong>.</li><li>Configure optional settings: <ul><li><strong>Markdown Support</strong>: Enable Markdown formatting (default: enabled).</li><li><strong>Enable Input Hint</strong>: Show typing indicators (default: enabled).</li></ul></li><li>Click <strong>Save and Enable</strong>.</li></ol><h2 id="step-3-bind-your-identity-optional" tabindex="-1">Step 3: Bind Your Identity (Optional) <a class="header-anchor" href="#step-3-bind-your-identity-optional" aria-label="Permalink to &quot;Step 3: Bind Your Identity (Optional)&quot;"></a></h2><p>Binding your QQ identity to your Memoh account enables cross-platform identity recognition — the bot will know who you are regardless of which channel you use.</p><ol><li>In Memoh Web UI, go to <strong>Profile</strong> &gt; <strong>Bind Code</strong>.</li><li>Select <strong>QQ</strong> and click <strong>Generate</strong>.</li><li>Copy the code and send it to your bot in a QQ direct message.</li></ol><h2 id="features-supported" tabindex="-1">Features Supported <a class="header-anchor" href="#features-supported" aria-label="Permalink to &quot;Features Supported&quot;"></a></h2><ul><li><strong>Message Content</strong>: Full support for text messages.</li><li><strong>Markdown</strong>: Rich formatting with bold, italic, code blocks, and links.</li><li><strong>Attachments</strong>: Support for images and files.</li><li><strong>Typing Indicators</strong>: Visual feedback while generating responses.</li><li><strong>Target Types</strong>: C2C (direct message), group, and channel.</li></ul><h2 id="official-resources" tabindex="-1">Official Resources <a class="header-anchor" href="#official-resources" aria-label="Permalink to &quot;Official Resources&quot;"></a></h2><ul><li><a href="https://q.qq.com/" target="_blank" rel="noreferrer">QQ Bot Open Platform</a></li><li><a href="https://bot.q.qq.com/wiki/" target="_blank" rel="noreferrer">QQ Bot Documentation</a></li></ul>',14)])])}const h=e(r,[["render",i]]);export{u as __pageData,h as default};
@@ -1 +1 @@
import{_ as e,o,c as a,ag as n}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"QQ Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/qq.md","filePath":"channels/qq.md","lastUpdated":1773070648000}'),r={name:"channels/qq.md"};function i(l,t,s,c,p,d){return o(),a("div",null,[...t[0]||(t[0]=[n("",14)])])}const h=e(r,[["render",i]]);export{u as __pageData,h as default};
import{_ as e,o,c as a,ag as n}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"QQ Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/qq.md","filePath":"channels/qq.md","lastUpdated":1774787421000}'),r={name:"channels/qq.md"};function i(l,t,s,c,g,p){return o(),a("div",null,[...t[0]||(t[0]=[n("",14)])])}const h=e(r,[["render",i]]);export{u as __pageData,h as default};
-1
View File
@@ -1 +0,0 @@
import{_ as e,o,c as a,ag as n}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"QQ Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/qq.md","filePath":"channels/qq.md","lastUpdated":1773070648000}'),r={name:"channels/qq.md"};function i(l,t,s,c,p,d){return o(),a("div",null,[...t[0]||(t[0]=[n('<h1 id="qq-channel-configuration" tabindex="-1">QQ Channel Configuration <a class="header-anchor" href="#qq-channel-configuration" aria-label="Permalink to &quot;QQ Channel Configuration&quot;"></a></h1><p>Connecting your Memoh Bot to QQ allows it to interact with users through QQ&#39;s official Bot platform.</p><h2 id="step-1-create-a-qq-bot" tabindex="-1">Step 1: Create a QQ Bot <a class="header-anchor" href="#step-1-create-a-qq-bot" aria-label="Permalink to &quot;Step 1: Create a QQ Bot&quot;"></a></h2><ol><li>Go to the <a href="https://q.qq.com/qqbot/openclaw/" target="_blank" rel="noreferrer">QQ Bot Open Platform</a> and log in with your QQ account.</li><li>Click <strong>Create Bot</strong> (创建机器人) - no approval required. Each account can create up to 5 bots.</li><li>Copy the <strong>AppID</strong> and <strong>AppSecret</strong> displayed on the page.</li></ol><blockquote><p><strong>Important</strong>: AppSecret is only shown once. Save it securely - viewing it again will force a reset.</p></blockquote><h2 id="step-2-configure-memoh" tabindex="-1">Step 2: Configure Memoh <a class="header-anchor" href="#step-2-configure-memoh" aria-label="Permalink to &quot;Step 2: Configure Memoh&quot;"></a></h2><ol><li>Go to your Bot&#39;s <strong>Channels</strong> tab in the Memoh Web UI.</li><li>Click <strong>Add Channel</strong> and select <strong>QQ</strong>.</li><li>Paste your <strong>AppID</strong> and <strong>AppSecret</strong>.</li><li>Configure optional settings: <ul><li><strong>Markdown Support</strong>: Enable Markdown formatting (default: enabled).</li><li><strong>Enable Input Hint</strong>: Show typing indicators (default: enabled).</li></ul></li><li>Click <strong>Save and Enable</strong>.</li></ol><h2 id="step-3-bind-your-identity-optional" tabindex="-1">Step 3: Bind Your Identity (Optional) <a class="header-anchor" href="#step-3-bind-your-identity-optional" aria-label="Permalink to &quot;Step 3: Bind Your Identity (Optional)&quot;"></a></h2><p>If your bot is a <code>personal</code> type bot, bind your QQ identity to chat with it directly:</p><ol><li>In Memoh Web UI, go to <strong>Settings</strong> &gt; <strong>Bind Code</strong>.</li><li>Select <strong>QQ</strong> and click <strong>Generate</strong>.</li><li>Copy the code and send it to your bot in a QQ direct message.</li></ol><h2 id="features-supported" tabindex="-1">Features Supported <a class="header-anchor" href="#features-supported" aria-label="Permalink to &quot;Features Supported&quot;"></a></h2><ul><li><strong>Message Content</strong>: Full support for text messages.</li><li><strong>Markdown</strong>: Rich formatting with bold, italic, code blocks, and links.</li><li><strong>Attachments</strong>: Support for images and files.</li><li><strong>Typing Indicators</strong>: Visual feedback while generating responses.</li><li><strong>Target Types</strong>: C2C (direct message), group, and channel.</li></ul><h2 id="official-resources" tabindex="-1">Official Resources <a class="header-anchor" href="#official-resources" aria-label="Permalink to &quot;Official Resources&quot;"></a></h2><ul><li><a href="https://q.qq.com/" target="_blank" rel="noreferrer">QQ Bot Open Platform</a></li><li><a href="https://bot.q.qq.com/wiki/" target="_blank" rel="noreferrer">QQ Bot Documentation</a></li></ul>',14)])])}const h=e(r,[["render",i]]);export{u as __pageData,h as default};
@@ -1 +1 @@
import{_ as t,o,c as a,ag as n}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"Telegram Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/telegram.md","filePath":"channels/telegram.md","lastUpdated":1772359263000}'),r={name:"channels/telegram.md"};function l(i,e,s,d,g,h){return o(),a("div",null,[...e[0]||(e[0]=[n('<h1 id="telegram-channel-configuration" tabindex="-1">Telegram Channel Configuration <a class="header-anchor" href="#telegram-channel-configuration" aria-label="Permalink to &quot;Telegram Channel Configuration&quot;"></a></h1><p>This guide walks you through connecting your Memoh Bot to Telegram. Telegram is one of the most supported platforms in Memoh, featuring streaming responses, Markdown formatting, and attachment support.</p><h2 id="step-1-create-a-telegram-bot" tabindex="-1">Step 1: Create a Telegram Bot <a class="header-anchor" href="#step-1-create-a-telegram-bot" aria-label="Permalink to &quot;Step 1: Create a Telegram Bot&quot;"></a></h2><p>You need to create a bot on Telegram to get an API token.</p><ol><li>Open Telegram and search for the official <strong>@BotFather</strong> bot.</li><li>Send the <code>/newbot</code> command.</li><li>Follow the prompts: <ul><li><strong>Name</strong>: Choose a display name for your bot (e.g., <code>My Memoh Bot</code>).</li><li><strong>Username</strong>: Choose a unique username ending in <code>bot</code> (e.g., <code>my_memoh_bot</code>).</li></ul></li><li>BotFather will provide you with an <strong>API Token</strong> (e.g., <code>123456789:ABCdefGHIjklMNOpqrsTUVwxyz</code>). <strong>Keep this token secret.</strong></li></ol><blockquote><p>Official Guide: <a href="https://core.telegram.org/bots/tutorial" target="_blank" rel="noreferrer">Telegram Bot Tutorial</a></p></blockquote><h2 id="step-2-configure-memoh" tabindex="-1">Step 2: Configure Memoh <a class="header-anchor" href="#step-2-configure-memoh" aria-label="Permalink to &quot;Step 2: Configure Memoh&quot;"></a></h2><ol><li>Go to your Bot&#39;s <strong>Detail Page</strong> in the Memoh Web UI.</li><li>Select the <strong>Channels</strong> tab.</li><li>Click <strong>Add Channel</strong> and select <strong>Telegram</strong>.</li><li>Paste your <strong>API Token</strong> into the credentials field.</li><li>Click <strong>Save and Enable</strong>.</li></ol><h2 id="step-3-bind-your-identity-optional" tabindex="-1">Step 3: Bind Your Identity (Optional) <a class="header-anchor" href="#step-3-bind-your-identity-optional" aria-label="Permalink to &quot;Step 3: Bind Your Identity (Optional)&quot;"></a></h2><p>If your bot is a <code>personal</code> type bot, you need to bind your Telegram identity to your Memoh account to chat with it directly.</p><ol><li>In Memoh Web UI, go to <strong>Settings</strong> &gt; <strong>Bind Code</strong>.</li><li>Select <strong>Telegram</strong> and click <strong>Generate</strong>.</li><li>Copy the code.</li><li>Open a chat with your new bot on Telegram and send the bind code.</li><li>The bot should respond that your identity is successfully linked.</li></ol><h2 id="features-supported" tabindex="-1">Features Supported <a class="header-anchor" href="#features-supported" aria-label="Permalink to &quot;Features Supported&quot;"></a></h2><ul><li><strong>Streaming</strong>: Responses appear as the bot &quot;thinks.&quot;</li><li><strong>Markdown</strong>: Support for bold, italic, code blocks, and links.</li><li><strong>Attachments</strong>: Send images or files to the bot; the bot can also send files back.</li><li><strong>Replies</strong>: The bot understands context from message replies.</li></ul>',13)])])}const p=t(r,[["render",l]]);export{u as __pageData,p as default};
import{_ as t,o,c as a,ag as n}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"Telegram Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/telegram.md","filePath":"channels/telegram.md","lastUpdated":1774787421000}'),r={name:"channels/telegram.md"};function l(i,e,s,g,d,h){return o(),a("div",null,[...e[0]||(e[0]=[n('<h1 id="telegram-channel-configuration" tabindex="-1">Telegram Channel Configuration <a class="header-anchor" href="#telegram-channel-configuration" aria-label="Permalink to &quot;Telegram Channel Configuration&quot;"></a></h1><p>This guide walks you through connecting your Memoh Bot to Telegram. Telegram is one of the most supported platforms in Memoh, featuring streaming responses, Markdown formatting, and attachment support.</p><h2 id="step-1-create-a-telegram-bot" tabindex="-1">Step 1: Create a Telegram Bot <a class="header-anchor" href="#step-1-create-a-telegram-bot" aria-label="Permalink to &quot;Step 1: Create a Telegram Bot&quot;"></a></h2><p>You need to create a bot on Telegram to get an API token.</p><ol><li>Open Telegram and search for the official <strong>@BotFather</strong> bot.</li><li>Send the <code>/newbot</code> command.</li><li>Follow the prompts: <ul><li><strong>Name</strong>: Choose a display name for your bot (e.g., <code>My Memoh Bot</code>).</li><li><strong>Username</strong>: Choose a unique username ending in <code>bot</code> (e.g., <code>my_memoh_bot</code>).</li></ul></li><li>BotFather will provide you with an <strong>API Token</strong> (e.g., <code>123456789:ABCdefGHIjklMNOpqrsTUVwxyz</code>). <strong>Keep this token secret.</strong></li></ol><blockquote><p>Official Guide: <a href="https://core.telegram.org/bots/tutorial" target="_blank" rel="noreferrer">Telegram Bot Tutorial</a></p></blockquote><h2 id="step-2-configure-memoh" tabindex="-1">Step 2: Configure Memoh <a class="header-anchor" href="#step-2-configure-memoh" aria-label="Permalink to &quot;Step 2: Configure Memoh&quot;"></a></h2><ol><li>Go to your Bot&#39;s <strong>Detail Page</strong> in the Memoh Web UI.</li><li>Select the <strong>Platforms</strong> tab.</li><li>Click <strong>Add Channel</strong> and select <strong>Telegram</strong>.</li><li>Paste your <strong>API Token</strong> into the credentials field.</li><li>Click <strong>Save and Enable</strong>.</li></ol><h2 id="step-3-bind-your-identity-optional" tabindex="-1">Step 3: Bind Your Identity (Optional) <a class="header-anchor" href="#step-3-bind-your-identity-optional" aria-label="Permalink to &quot;Step 3: Bind Your Identity (Optional)&quot;"></a></h2><p>Binding your Telegram identity to your Memoh account enables cross-platform identity recognition — the bot will know who you are regardless of which channel you use.</p><ol><li>In Memoh Web UI, go to <strong>Profile</strong> &gt; <strong>Bind Code</strong>.</li><li>Select <strong>Telegram</strong> and click <strong>Generate</strong>.</li><li>Copy the code.</li><li>Open a chat with your new bot on Telegram and send the bind code.</li><li>The bot should respond that your identity is successfully linked.</li></ol><h2 id="features-supported" tabindex="-1">Features Supported <a class="header-anchor" href="#features-supported" aria-label="Permalink to &quot;Features Supported&quot;"></a></h2><ul><li><strong>Streaming</strong>: Responses appear as the bot &quot;thinks.&quot;</li><li><strong>Markdown</strong>: Support for bold, italic, code blocks, and links.</li><li><strong>Attachments</strong>: Send images or files to the bot; the bot can also send files back.</li><li><strong>Replies</strong>: The bot understands context from message replies.</li></ul>',13)])])}const m=t(r,[["render",l]]);export{u as __pageData,m as default};
@@ -1 +1 @@
import{_ as t,o,c as a,ag as n}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"Telegram Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/telegram.md","filePath":"channels/telegram.md","lastUpdated":1772359263000}'),r={name:"channels/telegram.md"};function l(i,e,s,d,g,h){return o(),a("div",null,[...e[0]||(e[0]=[n("",13)])])}const p=t(r,[["render",l]]);export{u as __pageData,p as default};
import{_ as t,o,c as a,ag as n}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"Telegram Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/telegram.md","filePath":"channels/telegram.md","lastUpdated":1774787421000}'),r={name:"channels/telegram.md"};function l(i,e,s,g,d,h){return o(),a("div",null,[...e[0]||(e[0]=[n("",13)])])}const m=t(r,[["render",l]]);export{u as __pageData,m as default};
+1
View File
@@ -0,0 +1 @@
import{_ as t,o,c as a,ag as r}from"./chunks/framework.CvgP6Fyv.js";const m=JSON.parse('{"title":"WeCom (WeWork) Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/wecom.md","filePath":"channels/wecom.md","lastUpdated":1774787421000}'),n={name:"channels/wecom.md"};function i(s,e,l,c,d,h){return o(),a("div",null,[...e[0]||(e[0]=[r('<h1 id="wecom-wework-channel-configuration" tabindex="-1">WeCom (WeWork) Channel Configuration <a class="header-anchor" href="#wecom-wework-channel-configuration" aria-label="Permalink to &quot;WeCom (WeWork) Channel Configuration&quot;"></a></h1><p>Connecting your Memoh Bot to WeCom (企业微信) allows it to interact with users within your organization&#39;s WeCom workspace.</p><h2 id="step-1-create-a-wecom-bot" tabindex="-1">Step 1: Create a WeCom Bot <a class="header-anchor" href="#step-1-create-a-wecom-bot" aria-label="Permalink to &quot;Step 1: Create a WeCom Bot&quot;"></a></h2><ol><li>Log in to the <a href="https://work.weixin.qq.com/" target="_blank" rel="noreferrer">WeCom Admin Console</a>.</li><li>Navigate to <strong>App Management</strong> &gt; <strong>Custom Apps</strong> or <strong>Bot Management</strong>.</li><li>Create a new bot application.</li><li>Note the <strong>Bot ID</strong> and <strong>Secret</strong> credentials.</li></ol><h2 id="step-2-configure-memoh" tabindex="-1">Step 2: Configure Memoh <a class="header-anchor" href="#step-2-configure-memoh" aria-label="Permalink to &quot;Step 2: Configure Memoh&quot;"></a></h2><ol><li>Go to your Bot&#39;s <strong>Platforms</strong> tab in the Memoh Web UI.</li><li>Click <strong>Add Channel</strong> and select <strong>WeCom</strong>.</li><li>Fill in the required fields:</li></ol><table tabindex="0"><thead><tr><th>Field</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td><strong>Bot ID</strong></td><td>Yes</td><td>The WeCom bot identifier.</td></tr><tr><td><strong>Secret</strong></td><td>Yes</td><td>The bot&#39;s authentication credential.</td></tr><tr><td><strong>WebSocket URL</strong></td><td>No</td><td>Custom WebSocket endpoint (uses default if empty).</td></tr></tbody></table><ol start="4"><li>Click <strong>Save and Enable</strong>.</li></ol><h2 id="step-3-start-chatting" tabindex="-1">Step 3: Start Chatting <a class="header-anchor" href="#step-3-start-chatting" aria-label="Permalink to &quot;Step 3: Start Chatting&quot;"></a></h2><p>Once the channel is enabled, the bot will connect to WeCom via WebSocket and begin receiving messages. Users in your WeCom workspace can send messages to the bot directly or in group chats.</p><h2 id="features-supported" tabindex="-1">Features Supported <a class="header-anchor" href="#features-supported" aria-label="Permalink to &quot;Features Supported&quot;"></a></h2><ul><li><strong>Message Content</strong>: Full support for text messages.</li><li><strong>Direct Messages</strong>: Private conversations with individual users.</li><li><strong>Group Chats</strong>: Participate in group conversations.</li><li><strong>Streaming</strong>: Responses are streamed in real-time.</li></ul><h2 id="official-resources" tabindex="-1">Official Resources <a class="header-anchor" href="#official-resources" aria-label="Permalink to &quot;Official Resources&quot;"></a></h2><ul><li><a href="https://developer.work.weixin.qq.com/" target="_blank" rel="noreferrer">WeCom Open Platform</a></li><li><a href="https://developer.work.weixin.qq.com/document/path/91770" target="_blank" rel="noreferrer">WeCom Bot Documentation</a></li></ul>',14)])])}const u=t(n,[["render",i]]);export{m as __pageData,u as default};
@@ -0,0 +1 @@
import{_ as t,o,c as a,ag as r}from"./chunks/framework.CvgP6Fyv.js";const m=JSON.parse('{"title":"WeCom (WeWork) Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/wecom.md","filePath":"channels/wecom.md","lastUpdated":1774787421000}'),n={name:"channels/wecom.md"};function i(s,e,l,c,d,h){return o(),a("div",null,[...e[0]||(e[0]=[r("",14)])])}const u=t(n,[["render",i]]);export{m as __pageData,u as default};
+1
View File
@@ -0,0 +1 @@
import{_ as t,o as a,c as n,ag as o}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"WeChat Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/weixin.md","filePath":"channels/weixin.md","lastUpdated":1774787421000}'),i={name:"channels/weixin.md"};function r(s,e,l,h,d,c){return a(),n("div",null,[...e[0]||(e[0]=[o('<h1 id="wechat-channel-configuration" tabindex="-1">WeChat Channel Configuration <a class="header-anchor" href="#wechat-channel-configuration" aria-label="Permalink to &quot;WeChat Channel Configuration&quot;"></a></h1><p>Connecting your Memoh Bot to WeChat allows it to interact with users directly via WeChat personal messaging. Setup is simple — just scan a QR code.</p><h2 id="step-1-add-wechat-channel-in-memoh" tabindex="-1">Step 1: Add WeChat Channel in Memoh <a class="header-anchor" href="#step-1-add-wechat-channel-in-memoh" aria-label="Permalink to &quot;Step 1: Add WeChat Channel in Memoh&quot;"></a></h2><ol><li>Go to your Bot&#39;s <strong>Platforms</strong> tab in the Memoh Web UI.</li><li>Click <strong>Add Channel</strong> and select <strong>WeChat</strong>.</li></ol><h2 id="step-2-scan-the-qr-code" tabindex="-1">Step 2: Scan the QR Code <a class="header-anchor" href="#step-2-scan-the-qr-code" aria-label="Permalink to &quot;Step 2: Scan the QR Code&quot;"></a></h2><ol><li>Click <strong>Start QR Login</strong>. Memoh will fetch a QR code from the WeChat platform.</li><li>Open WeChat on your phone and scan the displayed QR code.</li><li>Confirm the login on your phone when prompted.</li><li>Once confirmed, Memoh automatically saves the credentials — no manual token or API key entry is needed.</li></ol><p>The QR code has a limited validity window. If it expires before you scan, click <strong>Start QR Login</strong> again to get a fresh one.</p><h2 id="step-3-start-chatting" tabindex="-1">Step 3: Start Chatting <a class="header-anchor" href="#step-3-start-chatting" aria-label="Permalink to &quot;Step 3: Start Chatting&quot;"></a></h2><p>After the QR login succeeds, the channel is automatically enabled. Users can now send messages to the bot directly in WeChat.</p><h2 id="optional-settings" tabindex="-1">Optional Settings <a class="header-anchor" href="#optional-settings" aria-label="Permalink to &quot;Optional Settings&quot;"></a></h2><table tabindex="0"><thead><tr><th>Field</th><th>Description</th></tr></thead><tbody><tr><td><strong>Enable Typing</strong></td><td>Show typing indicators while generating responses.</td></tr></tbody></table><h2 id="features-supported" tabindex="-1">Features Supported <a class="header-anchor" href="#features-supported" aria-label="Permalink to &quot;Features Supported&quot;"></a></h2><ul><li><strong>Message Content</strong>: Full support for text messages.</li><li><strong>Direct Messages</strong>: Private conversations with individual users.</li><li><strong>Attachments</strong>: Support for images and media.</li><li><strong>Typing Indicators</strong>: Visual feedback while generating responses (when enabled).</li></ul>',13)])])}const u=t(i,[["render",r]]);export{g as __pageData,u as default};
@@ -0,0 +1 @@
import{_ as t,o as a,c as n,ag as o}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"WeChat Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/weixin.md","filePath":"channels/weixin.md","lastUpdated":1774787421000}'),i={name:"channels/weixin.md"};function r(s,e,l,h,d,c){return a(),n("div",null,[...e[0]||(e[0]=[o("",13)])])}const u=t(i,[["render",r]]);export{g as __pageData,u as default};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{_ as t,o,c as a,ag as r}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"Bot Access Control","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/access.md","filePath":"getting-started/access.md","lastUpdated":1774787421000}'),s={name:"getting-started/access.md"};function n(l,e,i,c,d,h){return o(),a("div",null,[...e[0]||(e[0]=[r("",40)])])}const p=t(s,[["render",n]]);export{g as __pageData,p as default};
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
import{_ as t,o as s,c as a,ag as o}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"Bot Access Control","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/access.md","filePath":"getting-started/access.md","lastUpdated":1773501089000}'),n={name:"getting-started/access.md"};function i(r,e,l,c,h,d){return s(),a("div",null,[...e[0]||(e[0]=[o("",41)])])}const b=t(n,[["render",i]]);export{g as __pageData,b as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{_ as e,o as r,c as o,ag as a}from"./chunks/framework.CvgP6Fyv.js";const m=JSON.parse('{"title":"Bot Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/bot.md","filePath":"getting-started/bot.md","lastUpdated":1774787421000}'),n={name:"getting-started/bot.md"};function i(s,t,d,l,g,c){return r(),o("div",null,[...t[0]||(t[0]=[a("",28)])])}const b=e(n,[["render",i]]);export{m as __pageData,b as default};
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
import{_ as e,o,c as r,ag as a}from"./chunks/framework.CvgP6Fyv.js";const b=JSON.parse('{"title":"Bot Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/bot.md","filePath":"getting-started/bot.md","lastUpdated":1772873936000}'),i={name:"getting-started/bot.md"};function n(s,t,l,d,g,h){return o(),r("div",null,[...t[0]||(t[0]=[a("",25)])])}const m=e(i,[["render",n]]);export{b as __pageData,m as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{_ as e,o,c as r,ag as a}from"./chunks/framework.CvgP6Fyv.js";const p=JSON.parse('{"title":"Browser Contexts","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/browser.md","filePath":"getting-started/browser.md","lastUpdated":1774787421000}'),s={name:"getting-started/browser.md"};function i(n,t,l,d,c,h){return o(),r("div",null,[...t[0]||(t[0]=[a("",36)])])}const b=e(s,[["render",i]]);export{p as __pageData,b as default};
@@ -1 +0,0 @@
import{_ as e,o,c as r,ag as s}from"./chunks/framework.CvgP6Fyv.js";const p=JSON.parse('{"title":"Browser Contexts","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/browser.md","filePath":"getting-started/browser.md","lastUpdated":1773501089000}'),a={name:"getting-started/browser.md"};function i(n,t,l,d,c,h){return o(),r("div",null,[...t[0]||(t[0]=[s("",36)])])}const b=e(a,[["render",i]]);export{p as __pageData,b as default};
@@ -1 +0,0 @@
import{_ as a,o as t,c as n,ag as o}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"Bot Channels","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/channels.md","filePath":"getting-started/channels.md","lastUpdated":1773070648000}'),i={name:"getting-started/channels.md"};function r(l,e,s,h,d,c){return t(),n("div",null,[...e[0]||(e[0]=[o('<h1 id="bot-channels" tabindex="-1">Bot Channels <a class="header-anchor" href="#bot-channels" aria-label="Permalink to &quot;Bot Channels&quot;"></a></h1><p>Channels connect your Bot to various messaging platforms, allowing you to interact with it using your favorite chat applications.</p><h2 id="concept-unified-communication" tabindex="-1">Concept: Unified Communication <a class="header-anchor" href="#concept-unified-communication" aria-label="Permalink to &quot;Concept: Unified Communication&quot;"></a></h2><p>Memoh acts as a hub that bridges different messaging services. You can configure multiple channels for a single bot, enabling it to chat on Telegram, Discord, and more simultaneously.</p><hr><h2 id="supported-channels" tabindex="-1">Supported Channels <a class="header-anchor" href="#supported-channels" aria-label="Permalink to &quot;Supported Channels&quot;"></a></h2><p>Configure your bot&#39;s connections from the <strong>Channels</strong> tab in the Bot Detail page.</p><h3 id="popular-platforms" tabindex="-1">Popular Platforms <a class="header-anchor" href="#popular-platforms" aria-label="Permalink to &quot;Popular Platforms&quot;"></a></h3><p>For detailed step-by-step guides on how to create and configure bots for each platform, see:</p><ul><li><strong><a href="/channels/telegram.html">Telegram Configuration</a></strong></li><li><strong><a href="/channels/feishu.html">Feishu (Lark) Configuration</a></strong></li><li><strong><a href="/channels/discord.html">Discord Configuration</a></strong></li><li><strong><a href="/channels/qq.html">QQ Configuration</a></strong></li></ul><hr><h2 id="configuration-flow" tabindex="-1">Configuration Flow <a class="header-anchor" href="#configuration-flow" aria-label="Permalink to &quot;Configuration Flow&quot;"></a></h2><h3 id="_1-adding-a-channel" tabindex="-1">1. Adding a Channel <a class="header-anchor" href="#_1-adding-a-channel" aria-label="Permalink to &quot;1. Adding a Channel&quot;"></a></h3><ol><li>Click <strong>Add Channel</strong>.</li><li>Select the platform from the list.</li><li>Fill in the required credentials and configuration. The fields are dynamic and change based on the selected channel.</li></ol><h3 id="_2-common-fields" tabindex="-1">2. Common Fields <a class="header-anchor" href="#_2-common-fields" aria-label="Permalink to &quot;2. Common Fields&quot;"></a></h3><table tabindex="0"><thead><tr><th>Field</th><th>Description</th></tr></thead><tbody><tr><td><strong>Credentials</strong></td><td>API tokens, secrets, or bot keys provided by the platform.</td></tr><tr><td><strong>Disabled</strong></td><td>Quickly enable or disable a channel without removing its configuration.</td></tr><tr><td><strong>Routing</strong></td><td>Configure how messages are mapped between the platform and Memoh.</td></tr></tbody></table><h3 id="_3-special-case-feishu-webhook" tabindex="-1">3. Special Case: Feishu Webhook <a class="header-anchor" href="#_3-special-case-feishu-webhook" aria-label="Permalink to &quot;3. Special Case: Feishu Webhook&quot;"></a></h3><p>If using <strong>Feishu</strong> in <code>webhook</code> inbound mode:</p><ol><li>Memoh will generate a <strong>Webhook Callback URL</strong>.</li><li>Copy this URL and paste it into your Feishu App&#39;s event configuration.</li><li>This allows Feishu to send messages directly to Memoh.</li></ol><hr><h2 id="operations" tabindex="-1">Operations <a class="header-anchor" href="#operations" aria-label="Permalink to &quot;Operations&quot;"></a></h2><ul><li><strong>Save</strong>: Update the configuration.</li><li><strong>Save and Enable</strong>: Update and immediately activate the channel.</li><li><strong>Enable/Disable Toggle</strong>: Switch the channel&#39;s active status.</li><li><strong>Delete</strong>: Permanently remove a channel&#39;s configuration.</li></ul>',22)])])}const m=a(i,[["render",r]]);export{g as __pageData,m as default};
@@ -0,0 +1 @@
import{_ as a,o as t,c as n,ag as o}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"Bot Channels","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/channels.md","filePath":"getting-started/channels.md","lastUpdated":1774787421000}'),i={name:"getting-started/channels.md"};function r(l,e,s,h,d,c){return t(),n("div",null,[...e[0]||(e[0]=[o('<h1 id="bot-channels" tabindex="-1">Bot Channels <a class="header-anchor" href="#bot-channels" aria-label="Permalink to &quot;Bot Channels&quot;"></a></h1><p>Channels connect your Bot to various messaging platforms, allowing you to interact with it using your favorite chat applications.</p><h2 id="concept-unified-communication" tabindex="-1">Concept: Unified Communication <a class="header-anchor" href="#concept-unified-communication" aria-label="Permalink to &quot;Concept: Unified Communication&quot;"></a></h2><p>Memoh acts as a hub that bridges different messaging services. You can configure multiple channels for a single bot, enabling it to chat on Telegram, Discord, Matrix, and more simultaneously.</p><hr><h2 id="supported-channels" tabindex="-1">Supported Channels <a class="header-anchor" href="#supported-channels" aria-label="Permalink to &quot;Supported Channels&quot;"></a></h2><p>Configure your bot&#39;s connections from the <strong>Platforms</strong> tab in the Bot Detail page.</p><h3 id="platform-guides" tabindex="-1">Platform Guides <a class="header-anchor" href="#platform-guides" aria-label="Permalink to &quot;Platform Guides&quot;"></a></h3><p>For detailed step-by-step guides on how to create and configure bots for each platform, see:</p><ul><li><strong><a href="/channels/telegram.html">Telegram Configuration</a></strong></li><li><strong><a href="/channels/feishu.html">Feishu (Lark) Configuration</a></strong></li><li><strong><a href="/channels/discord.html">Discord Configuration</a></strong></li><li><strong><a href="/channels/qq.html">QQ Configuration</a></strong></li><li><strong><a href="/channels/matrix.html">Matrix Configuration</a></strong></li><li><strong><a href="/channels/wecom.html">WeCom (WeWork) Configuration</a></strong></li><li><strong><a href="/channels/weixin.html">WeChat Configuration</a></strong></li></ul><hr><h2 id="configuration-flow" tabindex="-1">Configuration Flow <a class="header-anchor" href="#configuration-flow" aria-label="Permalink to &quot;Configuration Flow&quot;"></a></h2><h3 id="_1-adding-a-channel" tabindex="-1">1. Adding a Channel <a class="header-anchor" href="#_1-adding-a-channel" aria-label="Permalink to &quot;1. Adding a Channel&quot;"></a></h3><ol><li>Click <strong>Add Channel</strong>.</li><li>Select the platform from the list.</li><li>Fill in the required credentials and configuration. The fields are dynamic and change based on the selected channel.</li></ol><h3 id="_2-common-fields" tabindex="-1">2. Common Fields <a class="header-anchor" href="#_2-common-fields" aria-label="Permalink to &quot;2. Common Fields&quot;"></a></h3><table tabindex="0"><thead><tr><th>Field</th><th>Description</th></tr></thead><tbody><tr><td><strong>Credentials</strong></td><td>API tokens, secrets, or bot keys provided by the platform.</td></tr><tr><td><strong>Disabled</strong></td><td>Quickly enable or disable a channel without removing its configuration.</td></tr><tr><td><strong>Routing</strong></td><td>Configure how messages are mapped between the platform and Memoh.</td></tr></tbody></table><h3 id="_3-special-case-feishu-webhook" tabindex="-1">3. Special Case: Feishu Webhook <a class="header-anchor" href="#_3-special-case-feishu-webhook" aria-label="Permalink to &quot;3. Special Case: Feishu Webhook&quot;"></a></h3><p>If using <strong>Feishu</strong> in <code>webhook</code> inbound mode:</p><ol><li>Memoh will generate a <strong>Webhook Callback URL</strong>.</li><li>Copy this URL and paste it into your Feishu App&#39;s event configuration.</li><li>This allows Feishu to send messages directly to Memoh.</li></ol><h3 id="_4-special-case-wechat-qr-code" tabindex="-1">4. Special Case: WeChat QR Code <a class="header-anchor" href="#_4-special-case-wechat-qr-code" aria-label="Permalink to &quot;4. Special Case: WeChat QR Code&quot;"></a></h3><p>If using <strong>WeChat</strong>:</p><ol><li>After enabling the channel, a QR code flow is provided for connecting.</li><li>Scan the QR code with WeChat to link the bot.</li></ol><hr><h2 id="operations" tabindex="-1">Operations <a class="header-anchor" href="#operations" aria-label="Permalink to &quot;Operations&quot;"></a></h2><ul><li><strong>Save</strong>: Update the configuration.</li><li><strong>Save and Enable</strong>: Update and immediately activate the channel.</li><li><strong>Enable/Disable Toggle</strong>: Switch the channel&#39;s active status.</li><li><strong>Delete</strong>: Permanently remove a channel&#39;s configuration.</li></ul>',25)])])}const f=a(i,[["render",r]]);export{u as __pageData,f as default};
@@ -1 +1 @@
import{_ as a,o as t,c as n,ag as o}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"Bot Channels","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/channels.md","filePath":"getting-started/channels.md","lastUpdated":1773070648000}'),i={name:"getting-started/channels.md"};function r(l,e,s,h,d,c){return t(),n("div",null,[...e[0]||(e[0]=[o("",22)])])}const m=a(i,[["render",r]]);export{g as __pageData,m as default};
import{_ as a,o as t,c as n,ag as o}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"Bot Channels","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/channels.md","filePath":"getting-started/channels.md","lastUpdated":1774787421000}'),i={name:"getting-started/channels.md"};function r(l,e,s,h,d,c){return t(),n("div",null,[...e[0]||(e[0]=[o("",25)])])}const f=a(i,[["render",r]]);export{u as __pageData,f as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{_ as o,o as t,c as a,ag as r}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"Memory Compaction","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/compaction.md","filePath":"getting-started/compaction.md","lastUpdated":1774787421000}'),i={name:"getting-started/compaction.md"};function n(s,e,l,m,c,d){return t(),a("div",null,[...e[0]||(e[0]=[r("",29)])])}const p=o(i,[["render",n]]);export{g as __pageData,p as default};
@@ -1 +0,0 @@
import{_ as e,o as a,c as n,ag as o}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"Bot Container Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/container.md","filePath":"getting-started/container.md","lastUpdated":1772359263000}'),i={name:"getting-started/container.md"};function s(r,t,l,h,c,p){return a(),n("div",null,[...t[0]||(t[0]=[o('<h1 id="bot-container-management" tabindex="-1">Bot Container Management <a class="header-anchor" href="#bot-container-management" aria-label="Permalink to &quot;Bot Container Management&quot;"></a></h1><p>Every Bot in Memoh operates within its own isolated container environment. This isolation ensures security, provides a dedicated filesystem, and allows the bot to execute code or commands without affecting other bots or the host system.</p><h2 id="concept-the-isolated-workspace" tabindex="-1">Concept: The Isolated Workspace <a class="header-anchor" href="#concept-the-isolated-workspace" aria-label="Permalink to &quot;Concept: The Isolated Workspace&quot;"></a></h2><p>The container acts as the bot&#39;s private &quot;computer.&quot; Within it, the bot can:</p><ul><li>Store and modify files</li><li>Install software via package managers</li><li>Execute scripts</li><li>Maintain state across multiple sessions</li></ul><hr><h2 id="operations" tabindex="-1">Operations <a class="header-anchor" href="#operations" aria-label="Permalink to &quot;Operations&quot;"></a></h2><p>Manage the lifecycle of your bot&#39;s environment from the <strong>Container</strong> tab in the Bot Detail page.</p><h3 id="lifecycle-actions" tabindex="-1">Lifecycle Actions <a class="header-anchor" href="#lifecycle-actions" aria-label="Permalink to &quot;Lifecycle Actions&quot;"></a></h3><ul><li><strong>Create</strong>: Initialize the container if it doesn&#39;t exist (using the configured image).</li><li><strong>Start</strong>: Launch the container. The bot must have a running container to perform many operations like file editing or executing tools.</li><li><strong>Stop</strong>: Gracefully shut down the container to save resources.</li><li><strong>Delete</strong>: Remove the container instance. This will delete the temporary state but preserve the data in persistent volumes.</li></ul><hr><h2 id="container-information" tabindex="-1">Container Information <a class="header-anchor" href="#container-information" aria-label="Permalink to &quot;Container Information&quot;"></a></h2><p>The <strong>Container</strong> tab displays real-time data about the bot&#39;s runtime:</p><ul><li><strong>Container ID</strong>: Unique identifier for the instance.</li><li><strong>Status</strong>: Whether it&#39;s currently running, stopped, or creating.</li><li><strong>Image</strong>: The Docker/Containerd image used as the base.</li><li><strong>Paths</strong>: Host and container paths for data persistence.</li><li><strong>Tasks</strong>: Number of active background tasks running in the container.</li></ul><hr><h2 id="snapshots" tabindex="-1">Snapshots <a class="header-anchor" href="#snapshots" aria-label="Permalink to &quot;Snapshots&quot;"></a></h2><p>Snapshots allow you to capture the current state of the bot&#39;s container and restore it later. This is useful for:</p><ul><li>Saving a known good configuration</li><li>Versioning the bot&#39;s environment</li><li>Testing complex changes safely</li></ul><h3 id="creating-a-snapshot" tabindex="-1">Creating a Snapshot <a class="header-anchor" href="#creating-a-snapshot" aria-label="Permalink to &quot;Creating a Snapshot&quot;"></a></h3><ol><li>Ensure the container is stopped or in a stable state.</li><li>Click <strong>Create Snapshot</strong>.</li><li>Provide a name for the snapshot.</li></ol><h3 id="restoring-a-snapshot" tabindex="-1">Restoring a Snapshot <a class="header-anchor" href="#restoring-a-snapshot" aria-label="Permalink to &quot;Restoring a Snapshot&quot;"></a></h3><ul><li>Find the desired snapshot in the list and click <strong>Restore</strong>. This will reset the container to the captured state.</li></ul><h3 id="managing-snapshots" tabindex="-1">Managing Snapshots <a class="header-anchor" href="#managing-snapshots" aria-label="Permalink to &quot;Managing Snapshots&quot;"></a></h3><ul><li>View a list of existing snapshots with their creation timestamps and parent relationships.</li><li>Use the <strong>Delete</strong> button next to a snapshot to remove it.</li></ul>',24)])])}const u=e(i,[["render",s]]);export{g as __pageData,u as default};
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{_ as e,o as a,c as n,ag as o}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"Bot Container Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/container.md","filePath":"getting-started/container.md","lastUpdated":1772359263000}'),i={name:"getting-started/container.md"};function s(r,t,l,h,c,p){return a(),n("div",null,[...t[0]||(t[0]=[o("",24)])])}const u=e(i,[["render",s]]);export{g as __pageData,u as default};
import{_ as e,o as a,c as n,ag as o}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"Bot Container Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/container.md","filePath":"getting-started/container.md","lastUpdated":1774787421000}'),i={name:"getting-started/container.md"};function r(s,t,l,h,c,d){return a(),n("div",null,[...t[0]||(t[0]=[o("",38)])])}const u=e(i,[["render",r]]);export{g as __pageData,u as default};
@@ -1 +0,0 @@
import{_ as e,o,c as n,ag as r}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"MCP Connections","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/mcp.md","filePath":"getting-started/mcp.md","lastUpdated":1772359263000}'),a={name:"getting-started/mcp.md"};function s(i,t,c,d,l,h){return o(),n("div",null,[...t[0]||(t[0]=[r('<h1 id="mcp-connections" tabindex="-1">MCP Connections <a class="header-anchor" href="#mcp-connections" aria-label="Permalink to &quot;MCP Connections&quot;"></a></h1><p>Memoh fully supports the <strong>Model Context Protocol (MCP)</strong>, allowing you to connect your Bot to external tool services and context providers.</p><h2 id="concept-extending-bot-capabilities" tabindex="-1">Concept: Extending Bot Capabilities <a class="header-anchor" href="#concept-extending-bot-capabilities" aria-label="Permalink to &quot;Concept: Extending Bot Capabilities&quot;"></a></h2><p>MCP provides a standardized way for bots to access external data sources and tools. Each Bot can have its own independent set of MCP connections.</p><hr><h2 id="connection-types" tabindex="-1">Connection Types <a class="header-anchor" href="#connection-types" aria-label="Permalink to &quot;Connection Types&quot;"></a></h2><p>Configure MCP connections from the <strong>MCP</strong> tab in the Bot Detail page.</p><h3 id="_1-stdio-local-process" tabindex="-1">1. Stdio (Local Process) <a class="header-anchor" href="#_1-stdio-local-process" aria-label="Permalink to &quot;1. Stdio (Local Process)&quot;"></a></h3><p>This type of connection executes a local command on the server and communicates via standard input/output.</p><table tabindex="0"><thead><tr><th>Field</th><th>Description</th></tr></thead><tbody><tr><td><strong>Command</strong></td><td>The executable to run (e.g., <code>npx</code>, <code>python3</code>).</td></tr><tr><td><strong>Arguments</strong></td><td>A list of command-line arguments (e.g., <code>-y</code>, <code>@modelcontextprotocol/server-filesystem</code>, <code>/opt/memoh/data</code>).</td></tr><tr><td><strong>Env</strong></td><td>Key-value pairs for environment variables.</td></tr><tr><td><strong>CWD</strong></td><td>Working directory for the process.</td></tr></tbody></table><h3 id="_2-remote-http-sse" tabindex="-1">2. Remote (HTTP/SSE) <a class="header-anchor" href="#_2-remote-http-sse" aria-label="Permalink to &quot;2. Remote (HTTP/SSE)&quot;"></a></h3><p>This type of connection connects to a remote MCP server over the network.</p><table tabindex="0"><thead><tr><th>Field</th><th>Description</th></tr></thead><tbody><tr><td><strong>URL</strong></td><td>The endpoint of the remote MCP server.</td></tr><tr><td><strong>Headers</strong></td><td>Custom HTTP headers (e.g., for authentication).</td></tr><tr><td><strong>Transport</strong></td><td>Choose between <code>http</code> or <code>sse</code> (Server-Sent Events).</td></tr></tbody></table><hr><h2 id="operations" tabindex="-1">Operations <a class="header-anchor" href="#operations" aria-label="Permalink to &quot;Operations&quot;"></a></h2><ul><li><strong>Add Connection</strong>: Click <strong>Add</strong>, choose the type, and fill in the configuration.</li><li><strong>Import JSON</strong>: Use the <strong>Import</strong> button to quickly add multiple connections from a standard <code>mcpServers</code> JSON config file.</li><li><strong>Toggle Active</strong>: Enable or disable specific connections without deleting them.</li><li><strong>Search</strong>: Quickly find a connection by name or ID.</li><li><strong>Export</strong>: Export a connection configuration to a JSON file.</li></ul><hr><h2 id="bot-interaction" tabindex="-1">Bot Interaction <a class="header-anchor" href="#bot-interaction" aria-label="Permalink to &quot;Bot Interaction&quot;"></a></h2><p>Once an MCP connection is active, the bot will automatically:</p><ul><li>Discover the tools and resources exposed by the MCP server.</li><li>Use these tools to perform tasks requested by the user.</li><li>Include the context provided by the MCP server in its reasoning process.</li></ul>',20)])])}const m=e(a,[["render",s]]);export{g as __pageData,m as default};
@@ -1 +0,0 @@
import{_ as e,o,c as n,ag as r}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"MCP Connections","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/mcp.md","filePath":"getting-started/mcp.md","lastUpdated":1772359263000}'),a={name:"getting-started/mcp.md"};function s(i,t,c,d,l,h){return o(),n("div",null,[...t[0]||(t[0]=[r("",20)])])}const m=e(a,[["render",s]]);export{g as __pageData,m as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{_ as e,o,c as n,ag as r}from"./chunks/framework.CvgP6Fyv.js";const p=JSON.parse('{"title":"MCP Connections","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/mcp.md","filePath":"getting-started/mcp.md","lastUpdated":1774787421000}'),a={name:"getting-started/mcp.md"};function i(s,t,c,l,d,h){return o(),n("div",null,[...t[0]||(t[0]=[r("",31)])])}const g=e(a,[["render",i]]);export{p as __pageData,g as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{_ as t,o,c as r,ag as a}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"Bot Memory Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/memory.md","filePath":"getting-started/memory.md","lastUpdated":1774787421000}'),i={name:"getting-started/memory.md"};function n(s,e,m,l,d,h){return o(),r("div",null,[...e[0]||(e[0]=[a("",38)])])}const u=t(i,[["render",n]]);export{g as __pageData,u as default};
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
import{_ as t,o,c as r,ag as a}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"Bot Memory Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/memory.md","filePath":"getting-started/memory.md","lastUpdated":1773501089000}'),i={name:"getting-started/memory.md"};function n(s,e,m,l,d,c){return o(),r("div",null,[...e[0]||(e[0]=[a("",30)])])}const g=t(i,[["render",n]]);export{u as __pageData,g as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{_ as t,o,c as r,ag as i}from"./chunks/framework.CvgP6Fyv.js";const p=JSON.parse('{"title":"LLM Provider and Model","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/provider-and-model.md","filePath":"getting-started/provider-and-model.md","lastUpdated":1774787421000}'),a={name:"getting-started/provider-and-model.md"};function d(n,e,l,s,h,c){return o(),r("div",null,[...e[0]||(e[0]=[i("",27)])])}const m=t(a,[["render",d]]);export{p as __pageData,m as default};
@@ -1 +0,0 @@
import{_ as t,o,c as r,ag as d}from"./chunks/framework.CvgP6Fyv.js";const p=JSON.parse('{"title":"LLM Provider and Model","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/provider-and-model.md","filePath":"getting-started/provider-and-model.md","lastUpdated":1772359263000}'),a={name:"getting-started/provider-and-model.md"};function i(n,e,l,s,g,h){return o(),r("div",null,[...e[0]||(e[0]=[d('<h1 id="llm-provider-and-model" tabindex="-1">LLM Provider and Model <a class="header-anchor" href="#llm-provider-and-model" aria-label="Permalink to &quot;LLM Provider and Model&quot;"></a></h1><p>To use Memoh, you first need to configure at least one LLM Provider and at least one Model.</p><h2 id="llm-provider" tabindex="-1">LLM Provider <a class="header-anchor" href="#llm-provider" aria-label="Permalink to &quot;LLM Provider&quot;"></a></h2><p>An LLM Provider represents a connection to an AI service (like OpenAI, Anthropic, or a self-hosted compatible API). It stores the base URL and authentication credentials.</p><h3 id="creating-a-provider" tabindex="-1">Creating a Provider <a class="header-anchor" href="#creating-a-provider" aria-label="Permalink to &quot;Creating a Provider&quot;"></a></h3><ol><li>Navigate to the <strong>Models</strong> page from the sidebar.</li><li>Click the <strong>Add Provider</strong> button at the bottom of the sidebar.</li><li>Fill in the following fields: <ul><li><strong>Name</strong>: A display name for this provider (e.g., &quot;OpenAI&quot;).</li><li><strong>Base URL</strong>: The root URL of the API (e.g., <code>https://api.openai.com/v1</code>).</li><li><strong>API Key</strong>: Your authentication token for the service.</li></ul></li><li>Click <strong>Create</strong>.</li></ol><h3 id="managing-providers" tabindex="-1">Managing Providers <a class="header-anchor" href="#managing-providers" aria-label="Permalink to &quot;Managing Providers&quot;"></a></h3><ul><li><strong>Edit</strong>: Select a provider from the list and use the form on the right to update its name, URL, or API key.</li><li><strong>Delete</strong>: Use the <strong>Delete Provider</strong> button in the provider settings form.</li></ul><hr><h2 id="model" tabindex="-1">Model <a class="header-anchor" href="#model" aria-label="Permalink to &quot;Model&quot;"></a></h2><p>A Model is a specific AI instance (like <code>gpt-4o</code> or <code>text-embedding-3-small</code>) that belongs to a Provider. Memoh distinguishes between <strong>Chat</strong> models (for conversation) and <strong>Embedding</strong> models (for memory search).</p><h3 id="adding-a-model" tabindex="-1">Adding a Model <a class="header-anchor" href="#adding-a-model" aria-label="Permalink to &quot;Adding a Model&quot;"></a></h3><ol><li>Select a Provider from the list on the <strong>Models</strong> page.</li><li>Click <strong>Add Model</strong> in the model list section.</li><li>Configure the following fields:</li></ol><table tabindex="0"><thead><tr><th>Field</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td><strong>Type</strong></td><td>Yes</td><td><code>chat</code> for conversation, <code>embedding</code> for vector search.</td></tr><tr><td><strong>Model ID</strong></td><td>Yes</td><td>The exact identifier used by the provider (e.g., <code>gpt-4o</code>).</td></tr><tr><td><strong>Name</strong></td><td>No</td><td>A friendly display name (defaults to Model ID).</td></tr><tr><td><strong>Client Type</strong></td><td>Yes (Chat)</td><td>The API protocol: <code>openai-responses</code>, <code>openai-completions</code>, <code>anthropic-messages</code>, or <code>google-generative-ai</code>.</td></tr><tr><td><strong>Input Modalities</strong></td><td>Yes (Chat)</td><td>Capabilities supported: <code>text</code> (default), <code>image</code>, <code>audio</code>, <code>video</code>, <code>file</code>.</td></tr><tr><td><strong>Supports Reasoning</strong></td><td>No</td><td>Enable if the model supports internal reasoning steps (e.g., OpenAI o1).</td></tr><tr><td><strong>Dimensions</strong></td><td>Yes (Embed)</td><td>The vector size for embedding models (e.g., 1536).</td></tr></tbody></table><ol start="4"><li>Click <strong>Create</strong>.</li></ol><h3 id="managing-models" tabindex="-1">Managing Models <a class="header-anchor" href="#managing-models" aria-label="Permalink to &quot;Managing Models&quot;"></a></h3><ul><li><strong>Edit</strong>: Click the edit icon next to a model in the list.</li><li><strong>Delete</strong>: Click the trash icon next to a model to remove it.</li></ul><hr><h2 id="next-steps" tabindex="-1">Next Steps <a class="header-anchor" href="#next-steps" aria-label="Permalink to &quot;Next Steps&quot;"></a></h2><p>Now that you have configured your models, you can proceed to <a href="/getting-started/bot.html">Create and Configure a Bot</a>.</p>',20)])])}const m=t(a,[["render",i]]);export{p as __pageData,m as default};
@@ -1 +0,0 @@
import{_ as t,o,c as r,ag as d}from"./chunks/framework.CvgP6Fyv.js";const p=JSON.parse('{"title":"LLM Provider and Model","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/provider-and-model.md","filePath":"getting-started/provider-and-model.md","lastUpdated":1772359263000}'),a={name:"getting-started/provider-and-model.md"};function i(n,e,l,s,g,h){return o(),r("div",null,[...e[0]||(e[0]=[d("",20)])])}const m=t(a,[["render",i]]);export{p as __pageData,m as default};
@@ -1 +1 @@
import{_ as r,o as t,c as o,ag as a}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"Search Providers","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/search-provider.md","filePath":"getting-started/search-provider.md","lastUpdated":1772359263000}'),i={name:"getting-started/search-provider.md"};function n(s,e,d,l,c,h){return t(),o("div",null,[...e[0]||(e[0]=[a('<h1 id="search-providers" tabindex="-1">Search Providers <a class="header-anchor" href="#search-providers" aria-label="Permalink to &quot;Search Providers&quot;"></a></h1><p>Memoh allows you to connect your Bot to various search engines, enabling it to browse the web for real-time information and external knowledge.</p><h2 id="concept-real-time-knowledge" tabindex="-1">Concept: Real-Time Knowledge <a class="header-anchor" href="#concept-real-time-knowledge" aria-label="Permalink to &quot;Concept: Real-Time Knowledge&quot;"></a></h2><p>A <strong>Search Provider</strong> is a connection to a specific search API (like Brave, Google, or Bing). Once configured, it becomes a tool that your Bot can use during conversation.</p><hr><h2 id="supported-search-engines" tabindex="-1">Supported Search Engines <a class="header-anchor" href="#supported-search-engines" aria-label="Permalink to &quot;Supported Search Engines&quot;"></a></h2><p>Configure your search engines from the <strong>Search Provider</strong> page in the sidebar.</p><table tabindex="0"><thead><tr><th>Supported Engines</th><th>Notes</th></tr></thead><tbody><tr><td><strong>Brave</strong></td><td>Highly recommended for privacy and performance.</td></tr><tr><td><strong>Bing</strong></td><td>Powerful global search capability.</td></tr><tr><td><strong>Google</strong></td><td>Comprehensive web search.</td></tr><tr><td><strong>Tavily</strong></td><td>Designed specifically for AI-powered research.</td></tr><tr><td><strong>SearxNG</strong></td><td>Connect to your own self-hosted search aggregator.</td></tr><tr><td><strong>DuckDuckGo</strong></td><td>Privacy-focused search.</td></tr><tr><td><strong>Other Providers</strong></td><td>Sogou, Serper, Jina, Exa, Bocha, Yandex.</td></tr></tbody></table><hr><h2 id="configuration-flow" tabindex="-1">Configuration Flow <a class="header-anchor" href="#configuration-flow" aria-label="Permalink to &quot;Configuration Flow&quot;"></a></h2><h3 id="_1-adding-a-search-provider" tabindex="-1">1. Adding a Search Provider <a class="header-anchor" href="#_1-adding-a-search-provider" aria-label="Permalink to &quot;1. Adding a Search Provider&quot;"></a></h3><ol><li>Navigate to the <strong>Search Provider</strong> page from the sidebar.</li><li>Click <strong>Add Search Provider</strong>.</li><li>Fill in the following: <ul><li><strong>Name</strong>: A friendly name (e.g., &quot;My Brave Search&quot;).</li><li><strong>API Key</strong>: Your credentials for the specific search engine API.</li><li><strong>Other Parameters</strong>: Depending on the engine, you may need to specify additional settings (e.g., <code>base_url</code> for SearxNG).</li></ul></li></ol><h3 id="_2-managing-providers" tabindex="-1">2. Managing Providers <a class="header-anchor" href="#_2-managing-providers" aria-label="Permalink to &quot;2. Managing Providers&quot;"></a></h3><ul><li><strong>Edit</strong>: Select a provider from the sidebar and update its configuration in the form on the right.</li><li><strong>Delete</strong>: Use the <strong>Delete Provider</strong> button in the provider settings form.</li></ul><hr><h2 id="assigning-a-search-provider-to-a-bot" tabindex="-1">Assigning a Search Provider to a Bot <a class="header-anchor" href="#assigning-a-search-provider-to-a-bot" aria-label="Permalink to &quot;Assigning a Search Provider to a Bot&quot;"></a></h2><ol><li>Navigate to the <strong>Bots</strong> page and select your bot.</li><li>Go to the <strong>Settings</strong> tab.</li><li>Find the <strong>Search Provider</strong> dropdown and select the provider you created.</li><li>Click <strong>Save</strong>.</li></ol><hr><h2 id="bot-interaction" tabindex="-1">Bot Interaction <a class="header-anchor" href="#bot-interaction" aria-label="Permalink to &quot;Bot Interaction&quot;"></a></h2><ul><li>When a user&#39;s question requires real-time information, the bot will automatically call its assigned <strong>Search Provider</strong>.</li><li>The bot will process the search results to provide a grounded and accurate response.</li><li>Multiple search results can be synthesized to provide a comprehensive answer.</li></ul>',20)])])}const p=r(i,[["render",n]]);export{u as __pageData,p as default};
import{_ as r,o as t,c as o,ag as a}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"Search Providers","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/search-provider.md","filePath":"getting-started/search-provider.md","lastUpdated":1774787421000}'),i={name:"getting-started/search-provider.md"};function n(s,e,d,l,c,h){return t(),o("div",null,[...e[0]||(e[0]=[a('<h1 id="search-providers" tabindex="-1">Search Providers <a class="header-anchor" href="#search-providers" aria-label="Permalink to &quot;Search Providers&quot;"></a></h1><p>Memoh allows you to connect your Bot to various search engines, enabling it to browse the web for real-time information and external knowledge.</p><h2 id="concept-real-time-knowledge" tabindex="-1">Concept: Real-Time Knowledge <a class="header-anchor" href="#concept-real-time-knowledge" aria-label="Permalink to &quot;Concept: Real-Time Knowledge&quot;"></a></h2><p>A <strong>Search Provider</strong> is a connection to a specific search API (like Brave, Google, or Bing). Once configured, it becomes a tool that your Bot can use during conversation.</p><hr><h2 id="supported-search-engines" tabindex="-1">Supported Search Engines <a class="header-anchor" href="#supported-search-engines" aria-label="Permalink to &quot;Supported Search Engines&quot;"></a></h2><p>Configure your search engines from the <strong>Search Provider</strong> page in the sidebar.</p><table tabindex="0"><thead><tr><th>Supported Engines</th><th>Notes</th></tr></thead><tbody><tr><td><strong>Brave</strong></td><td>Highly recommended for privacy and performance.</td></tr><tr><td><strong>Bing</strong></td><td>Powerful global search capability.</td></tr><tr><td><strong>Google</strong></td><td>Comprehensive web search.</td></tr><tr><td><strong>Tavily</strong></td><td>Designed specifically for AI-powered research.</td></tr><tr><td><strong>SearxNG</strong></td><td>Connect to your own self-hosted search aggregator.</td></tr><tr><td><strong>DuckDuckGo</strong></td><td>Privacy-focused search.</td></tr><tr><td><strong>Other Providers</strong></td><td>Sogou, Serper, Jina, Exa, Bocha, Yandex.</td></tr></tbody></table><hr><h2 id="configuration-flow" tabindex="-1">Configuration Flow <a class="header-anchor" href="#configuration-flow" aria-label="Permalink to &quot;Configuration Flow&quot;"></a></h2><h3 id="_1-adding-a-search-provider" tabindex="-1">1. Adding a Search Provider <a class="header-anchor" href="#_1-adding-a-search-provider" aria-label="Permalink to &quot;1. Adding a Search Provider&quot;"></a></h3><ol><li>Navigate to the <strong>Search Provider</strong> page from the sidebar.</li><li>Click <strong>Add Search Provider</strong>.</li><li>Fill in the following: <ul><li><strong>Name</strong>: A friendly name (e.g., &quot;My Brave Search&quot;).</li><li><strong>API Key</strong>: Your credentials for the specific search engine API.</li><li><strong>Other Parameters</strong>: Depending on the engine, you may need to specify additional settings (e.g., <code>base_url</code> for SearxNG).</li></ul></li></ol><h3 id="_2-managing-providers" tabindex="-1">2. Managing Providers <a class="header-anchor" href="#_2-managing-providers" aria-label="Permalink to &quot;2. Managing Providers&quot;"></a></h3><ul><li><strong>Edit</strong>: Select a provider from the sidebar and update its configuration in the form on the right.</li><li><strong>Delete</strong>: Use the <strong>Delete Provider</strong> button in the provider settings form.</li></ul><hr><h2 id="assigning-a-search-provider-to-a-bot" tabindex="-1">Assigning a Search Provider to a Bot <a class="header-anchor" href="#assigning-a-search-provider-to-a-bot" aria-label="Permalink to &quot;Assigning a Search Provider to a Bot&quot;"></a></h2><ol><li>Navigate to the <strong>Bots</strong> page and select your bot.</li><li>Go to the <strong>General</strong> tab.</li><li>Find the <strong>Search Provider</strong> dropdown and select the provider you created.</li><li>Click <strong>Save</strong>.</li></ol><hr><h2 id="bot-interaction" tabindex="-1">Bot Interaction <a class="header-anchor" href="#bot-interaction" aria-label="Permalink to &quot;Bot Interaction&quot;"></a></h2><ul><li>When a user&#39;s question requires real-time information, the bot will automatically call its assigned <strong>Search Provider</strong>.</li><li>The bot will process the search results to provide a grounded and accurate response.</li><li>Multiple search results can be synthesized to provide a comprehensive answer.</li></ul>',20)])])}const p=r(i,[["render",n]]);export{u as __pageData,p as default};
@@ -1 +1 @@
import{_ as r,o as t,c as o,ag as a}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"Search Providers","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/search-provider.md","filePath":"getting-started/search-provider.md","lastUpdated":1772359263000}'),i={name:"getting-started/search-provider.md"};function n(s,e,d,l,c,h){return t(),o("div",null,[...e[0]||(e[0]=[a("",20)])])}const p=r(i,[["render",n]]);export{u as __pageData,p as default};
import{_ as r,o as t,c as o,ag as a}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"Search Providers","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/search-provider.md","filePath":"getting-started/search-provider.md","lastUpdated":1774787421000}'),i={name:"getting-started/search-provider.md"};function n(s,e,d,l,c,h){return t(),o("div",null,[...e[0]||(e[0]=[a("",20)])])}const p=r(i,[["render",n]]);export{u as __pageData,p as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{_ as s,o as t,c as n,ag as o}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"Sessions","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/sessions.md","filePath":"getting-started/sessions.md","lastUpdated":1774787421000}'),a={name:"getting-started/sessions.md"};function i(r,e,h,l,d,c){return t(),n("div",null,[...e[0]||(e[0]=[o("",34)])])}const b=s(a,[["render",i]]);export{u as __pageData,b as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{_ as t,o as d,c as a,ag as o}from"./chunks/framework.CvgP6Fyv.js";const p=JSON.parse('{"title":"Slash Commands","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/slash-commands.md","filePath":"getting-started/slash-commands.md","lastUpdated":1774787421000}'),s={name:"getting-started/slash-commands.md"};function r(n,e,c,l,i,h){return d(),a("div",null,[...e[0]||(e[0]=[o("",76)])])}const b=t(s,[["render",r]]);export{p as __pageData,b as default};
@@ -1 +0,0 @@
import{_ as e,o as a,c as n,ag as o}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"Bot Subagents","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/subagents.md","filePath":"getting-started/subagents.md","lastUpdated":1772359263000}'),i={name:"getting-started/subagents.md"};function s(r,t,d,l,c,g){return a(),n("div",null,[...t[0]||(t[0]=[o('<h1 id="bot-subagents" tabindex="-1">Bot Subagents <a class="header-anchor" href="#bot-subagents" aria-label="Permalink to &quot;Bot Subagents&quot;"></a></h1><p>Subagents are specialized AI entities with their own independent conversation context. They are managed by the main Bot to delegate complex tasks or focus on specific domains.</p><h2 id="concept-task-specialization" tabindex="-1">Concept: Task Specialization <a class="header-anchor" href="#concept-task-specialization" aria-label="Permalink to &quot;Concept: Task Specialization&quot;"></a></h2><p>A <strong>Subagent</strong> is like a specialized teammate for your Bot. While the main Bot handles general conversation, it can spin up and communicate with a Subagent to perform deep analysis, research, or execution.</p><hr><h2 id="fields" tabindex="-1">Fields <a class="header-anchor" href="#fields" aria-label="Permalink to &quot;Fields&quot;"></a></h2><p>Configure Subagents from the <strong>Subagents</strong> tab in the Bot Detail page.</p><table tabindex="0"><thead><tr><th>Field</th><th>Description</th></tr></thead><tbody><tr><td><strong>Name</strong></td><td>The identifier for the subagent (e.g., &quot;Research Assistant&quot;).</td></tr><tr><td><strong>Description</strong></td><td>A brief explanation of the subagent&#39;s purpose and role.</td></tr><tr><td><strong>Skills</strong></td><td>A list of specific <strong>Skills</strong> assigned from the bot&#39;s container.</td></tr><tr><td><strong>Messages</strong></td><td>The conversation history and context specific to this subagent.</td></tr><tr><td><strong>Usage</strong></td><td>Statistics on token consumption and activity.</td></tr></tbody></table><hr><h2 id="operations" tabindex="-1">Operations <a class="header-anchor" href="#operations" aria-label="Permalink to &quot;Operations&quot;"></a></h2><ul><li><strong>Add Subagent</strong>: Create a new entity by providing a name and description.</li><li><strong>Edit</strong>: Update the name or description of an existing subagent.</li><li><strong>Delete</strong>: Permanently remove a subagent and its independent context.</li><li><strong>View Context</strong>: Open a dialog to inspect the subagent&#39;s conversation history and usage metrics.</li></ul><hr><h2 id="bot-interaction" tabindex="-1">Bot Interaction <a class="header-anchor" href="#bot-interaction" aria-label="Permalink to &quot;Bot Interaction&quot;"></a></h2><ul><li>The main Bot uses the <strong>Subagent Tool</strong> to create, communicate with, and receive results from subagents.</li><li>Subagents inherit the main bot&#39;s container permissions but operate with their own &quot;mental workspace.&quot;</li><li>This modular approach allows for building multi-agent systems within a single Bot&#39;s scope.</li></ul>',14)])])}const p=e(i,[["render",s]]);export{u as __pageData,p as default};
@@ -1 +0,0 @@
import{_ as e,o as a,c as n,ag as o}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"Bot Subagents","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/subagents.md","filePath":"getting-started/subagents.md","lastUpdated":1772359263000}'),i={name:"getting-started/subagents.md"};function s(r,t,d,l,c,g){return a(),n("div",null,[...t[0]||(t[0]=[o("",14)])])}const p=e(i,[["render",s]]);export{u as __pageData,p as default};
-1
View File
@@ -1 +0,0 @@
import{_ as t,o as a,c as o,ag as n}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"Memoh Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1774359244000}'),i={name:"index.md"};function r(s,e,l,m,d,c){return a(),o("div",null,[...e[0]||(e[0]=[n('<h1 id="memoh-documentation" tabindex="-1">Memoh Documentation <a class="header-anchor" href="#memoh-documentation" aria-label="Permalink to &quot;Memoh Documentation&quot;"></a></h1><p>Memoh(/ˈmemoʊ/) is a multi-member, structured long-memory, containerized AI agent system. Create your own AI bots, chat with them via Telegram, Lark (Feishu), or Web. Each bot runs in an isolated container with its own memory system — able to edit files, run commands, and access the network.</p><h2 id="documentation" tabindex="-1">Documentation <a class="header-anchor" href="#documentation" aria-label="Permalink to &quot;Documentation&quot;"></a></h2><ul><li><strong><a href="/about.html">About Memoh</a></strong> — What Memoh is, key features, and installation links.</li><li><strong><a href="/installation/docker.html">Installation</a></strong> — <a href="/installation/docker.html">Docker</a> (recommended) and <a href="/installation/config-toml.html">config.toml</a> reference.</li><li><strong><a href="/getting-started/provider-and-model.html">Getting Started</a></strong> — Step-by-step guide to configure models, bots, and channels.</li><li><strong><a href="/channels/index.html">Channels</a></strong> — Detailed guides for Telegram, Feishu, and Discord.</li></ul>',4)])])}const f=t(i,[["render",r]]);export{u as __pageData,f as default};
-1
View File
@@ -1 +0,0 @@
import{_ as t,o as a,c as o,ag as n}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"Memoh Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1774359244000}'),i={name:"index.md"};function r(s,e,l,m,d,c){return a(),o("div",null,[...e[0]||(e[0]=[n("",4)])])}const f=t(i,[["render",r]]);export{u as __pageData,f as default};
+1
View File
@@ -0,0 +1 @@
import{_ as t,o as a,c as o,ag as n}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"Memoh Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1774787421000}'),i={name:"index.md"};function r(s,e,m,l,d,c){return a(),o("div",null,[...e[0]||(e[0]=[n('<h1 id="memoh-documentation" tabindex="-1">Memoh Documentation <a class="header-anchor" href="#memoh-documentation" aria-label="Permalink to &quot;Memoh Documentation&quot;"></a></h1><p>Memoh(/ˈmemoʊ/) is a multi-member, structured long-memory, containerized AI agent system. Create your own AI bots, chat with them via Telegram, Discord, Lark (Feishu), QQ, Matrix, WeCom, WeChat, Email, or Web. Each bot runs in an isolated container with its own memory system — able to edit files, run commands, and access the network.</p><h2 id="documentation" tabindex="-1">Documentation <a class="header-anchor" href="#documentation" aria-label="Permalink to &quot;Documentation&quot;"></a></h2><ul><li><strong><a href="/about.html">About Memoh</a></strong> — What Memoh is, key features, and installation links.</li><li><strong><a href="/installation/docker.html">Installation</a></strong> — Docker setup (recommended).</li><li><strong><a href="/getting-started/provider-and-model.html">Getting Started</a></strong> — Step-by-step guide to configure models, bots, and channels.</li><li><strong><a href="/channels/index.html">Channels</a></strong> — Detailed guides for Telegram, Feishu, Discord, QQ, Matrix, WeCom, and WeChat.</li></ul>',4)])])}const _=t(i,[["render",r]]);export{u as __pageData,_ as default};
+1
View File
@@ -0,0 +1 @@
import{_ as t,o as a,c as o,ag as n}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"Memoh Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1774787421000}'),i={name:"index.md"};function r(s,e,m,l,d,c){return a(),o("div",null,[...e[0]||(e[0]=[n("",4)])])}const _=t(i,[["render",r]]);export{u as __pageData,_ as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{_ as e,o as i,c as t,ag as a}from"./chunks/framework.CvgP6Fyv.js";const k=JSON.parse('{"title":"Docker Installation","description":"","frontmatter":{},"headers":[],"relativePath":"installation/docker.md","filePath":"installation/docker.md","lastUpdated":1774787421000}'),n={name:"installation/docker.md"};function o(r,s,d,l,h,p){return i(),t("div",null,[...s[0]||(s[0]=[a("",62)])])}const g=e(n,[["render",o]]);export{k as __pageData,g as default};
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
import{_ as i,o as e,c as a,ag as t}from"./chunks/framework.CvgP6Fyv.js";const c=JSON.parse('{"title":"Docker Installation","description":"","frontmatter":{},"headers":[],"relativePath":"installation/docker.md","filePath":"installation/docker.md","lastUpdated":1773818349000}'),n={name:"installation/docker.md"};function o(l,s,r,h,d,p){return e(),a("div",null,[...s[0]||(s[0]=[t("",65)])])}const g=i(n,[["render",o]]);export{c as __pageData,g as default};
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{_ as t,o as i,c as a,ag as s}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"Built-in Memory Provider","description":"","frontmatter":{},"headers":[],"relativePath":"memory-providers/builtin.md","filePath":"memory-providers/builtin.md","lastUpdated":1773501089000}'),r={name:"memory-providers/builtin.md"};function o(n,e,d,l,h,p){return i(),a("div",null,[...e[0]||(e[0]=[s("",41)])])}const m=t(r,[["render",o]]);export{g as __pageData,m as default};
import{_ as t,o as i,c as a,ag as s}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"Built-in Memory Provider","description":"","frontmatter":{},"headers":[],"relativePath":"memory-providers/builtin.md","filePath":"memory-providers/builtin.md","lastUpdated":1774787421000}'),r={name:"memory-providers/builtin.md"};function o(n,e,d,l,h,p){return i(),a("div",null,[...e[0]||(e[0]=[s("",41)])])}const m=t(r,[["render",o]]);export{g as __pageData,m as default};
@@ -1 +0,0 @@
import{_ as r,o,c as a,ag as i}from"./chunks/framework.CvgP6Fyv.js";const v=JSON.parse('{"title":"Memory Providers","description":"","frontmatter":{},"headers":[],"relativePath":"memory-providers/index.md","filePath":"memory-providers/index.md","lastUpdated":1773501089000}'),t={name:"memory-providers/index.md"};function s(m,e,n,l,d,h){return o(),a("div",null,[...e[0]||(e[0]=[i('<h1 id="memory-providers" tabindex="-1">Memory Providers <a class="header-anchor" href="#memory-providers" aria-label="Permalink to &quot;Memory Providers&quot;"></a></h1><p>Memoh uses a <strong>Memory Provider</strong> to define how a bot stores, retrieves, and manages long-term memory. A bot can bind one memory provider in its <strong>Settings</strong> tab, and that provider becomes the backend for memory extraction and memory search.</p><h2 id="available-providers" tabindex="-1">Available Providers <a class="header-anchor" href="#available-providers" aria-label="Permalink to &quot;Available Providers&quot;"></a></h2><p>Memoh supports the following memory providers:</p><ul><li><a href="/memory-providers/builtin.html">Built-in</a>: The default memory system included with Memoh. Supports three modes — off (file-based), sparse (neural sparse vectors), and dense (embedding-based semantic search). Fully self-hosted.</li><li><a href="/memory-providers/mem0.html">Mem0</a>: SaaS memory provider via the Mem0 API. Requires an API key.</li><li><a href="/memory-providers/openviking.html">OpenViking</a>: Self-hosted or SaaS memory provider with its own API.</li></ul><hr><h2 id="basic-flow" tabindex="-1">Basic Flow <a class="header-anchor" href="#basic-flow" aria-label="Permalink to &quot;Basic Flow&quot;"></a></h2><ol><li>Open the <strong>Memory Providers</strong> page from the sidebar.</li><li>Create a provider instance using one of the supported provider types.</li><li>Configure the provider settings.</li><li>Open a bot&#39;s <strong>Settings</strong> tab and assign that provider in <strong>Memory Provider</strong>.</li><li>Manage actual memories from the bot&#39;s <strong>Memory</strong> tab.</li></ol><hr><h2 id="next-steps" tabindex="-1">Next Steps <a class="header-anchor" href="#next-steps" aria-label="Permalink to &quot;Next Steps&quot;"></a></h2><ul><li><a href="/memory-providers/builtin.html">Built-in Memory Provider</a> — Default, self-hosted with three memory modes.</li><li><a href="/memory-providers/mem0.html">Mem0 Memory Provider</a> — SaaS via Mem0 API.</li><li><a href="/memory-providers/openviking.html">OpenViking Memory Provider</a> — Self-hosted or SaaS.</li><li><a href="/getting-started/memory.html">Bot Memory Management</a> — Manage memory entries after the provider is assigned.</li></ul>',11)])])}const f=r(t,[["render",s]]);export{v as __pageData,f as default};
@@ -0,0 +1 @@
import{_ as r,o,c as a,ag as i}from"./chunks/framework.CvgP6Fyv.js";const v=JSON.parse('{"title":"Memory Providers","description":"","frontmatter":{},"headers":[],"relativePath":"memory-providers/index.md","filePath":"memory-providers/index.md","lastUpdated":1774787421000}'),t={name:"memory-providers/index.md"};function s(m,e,n,l,d,h){return o(),a("div",null,[...e[0]||(e[0]=[i('<h1 id="memory-providers" tabindex="-1">Memory Providers <a class="header-anchor" href="#memory-providers" aria-label="Permalink to &quot;Memory Providers&quot;"></a></h1><p>Memoh uses a <strong>Memory Provider</strong> to define how a bot stores, retrieves, and manages long-term memory. A bot can bind one memory provider in its <strong>General</strong> tab, and that provider becomes the backend for memory extraction and memory search.</p><h2 id="available-providers" tabindex="-1">Available Providers <a class="header-anchor" href="#available-providers" aria-label="Permalink to &quot;Available Providers&quot;"></a></h2><p>Memoh supports the following memory providers:</p><ul><li><a href="/memory-providers/builtin.html">Built-in</a>: The default memory system included with Memoh. Supports three modes — off (file-based), sparse (neural sparse vectors), and dense (embedding-based semantic search). Fully self-hosted.</li><li><a href="/memory-providers/mem0.html">Mem0</a>: SaaS memory provider via the Mem0 API. Requires an API key.</li><li><a href="/memory-providers/openviking.html">OpenViking</a>: Self-hosted or SaaS memory provider with its own API.</li></ul><hr><h2 id="basic-flow" tabindex="-1">Basic Flow <a class="header-anchor" href="#basic-flow" aria-label="Permalink to &quot;Basic Flow&quot;"></a></h2><ol><li>Open the <strong>Memory Providers</strong> page from the sidebar.</li><li>Create a provider instance using one of the supported provider types.</li><li>Configure the provider settings.</li><li>Open a bot&#39;s <strong>General</strong> tab and assign that provider in <strong>Memory Provider</strong>.</li><li>Manage actual memories from the bot&#39;s <strong>Memory</strong> tab.</li></ol><hr><h2 id="next-steps" tabindex="-1">Next Steps <a class="header-anchor" href="#next-steps" aria-label="Permalink to &quot;Next Steps&quot;"></a></h2><ul><li><a href="/memory-providers/builtin.html">Built-in Memory Provider</a> — Default, self-hosted with three memory modes.</li><li><a href="/memory-providers/mem0.html">Mem0 Memory Provider</a> — SaaS via Mem0 API.</li><li><a href="/memory-providers/openviking.html">OpenViking Memory Provider</a> — Self-hosted or SaaS.</li><li><a href="/getting-started/memory.html">Bot Memory Management</a> — Manage memory entries after the provider is assigned.</li></ul>',11)])])}const f=r(t,[["render",s]]);export{v as __pageData,f as default};
@@ -1 +1 @@
import{_ as r,o,c as a,ag as i}from"./chunks/framework.CvgP6Fyv.js";const v=JSON.parse('{"title":"Memory Providers","description":"","frontmatter":{},"headers":[],"relativePath":"memory-providers/index.md","filePath":"memory-providers/index.md","lastUpdated":1773501089000}'),t={name:"memory-providers/index.md"};function s(m,e,n,l,d,h){return o(),a("div",null,[...e[0]||(e[0]=[i("",11)])])}const f=r(t,[["render",s]]);export{v as __pageData,f as default};
import{_ as r,o,c as a,ag as i}from"./chunks/framework.CvgP6Fyv.js";const v=JSON.parse('{"title":"Memory Providers","description":"","frontmatter":{},"headers":[],"relativePath":"memory-providers/index.md","filePath":"memory-providers/index.md","lastUpdated":1774787421000}'),t={name:"memory-providers/index.md"};function s(m,e,n,l,d,h){return o(),a("div",null,[...e[0]||(e[0]=[i("",11)])])}const f=r(t,[["render",s]]);export{v as __pageData,f as default};
@@ -1 +1 @@
import{_ as t,o as r,c as o,ag as a}from"./chunks/framework.CvgP6Fyv.js";const c=JSON.parse('{"title":"Mem0 Memory Provider","description":"","frontmatter":{},"headers":[],"relativePath":"memory-providers/mem0.md","filePath":"memory-providers/mem0.md","lastUpdated":1773501089000}'),i={name:"memory-providers/mem0.md"};function n(d,e,s,m,l,g){return r(),o("div",null,[...e[0]||(e[0]=[a('<h1 id="mem0-memory-provider" tabindex="-1">Mem0 Memory Provider <a class="header-anchor" href="#mem0-memory-provider" aria-label="Permalink to &quot;Mem0 Memory Provider&quot;"></a></h1><p>Mem0 is a SaaS memory provider that connects your bot to the <a href="https://mem0.ai" target="_blank" rel="noreferrer">Mem0</a> platform. Instead of managing memory infrastructure yourself, Mem0 handles storage, retrieval, and indexing through its cloud API.</p><hr><h2 id="creating-a-mem0-provider" tabindex="-1">Creating a Mem0 Provider <a class="header-anchor" href="#creating-a-mem0-provider" aria-label="Permalink to &quot;Creating a Mem0 Provider&quot;"></a></h2><ol><li>Navigate to the <strong>Memory Providers</strong> page.</li><li>Click <strong>Add Memory Provider</strong>.</li><li>Fill in the following fields: <ul><li><strong>Name</strong>: A display name for this provider.</li><li><strong>Provider Type</strong>: Select <code>mem0</code>.</li></ul></li><li>Click <strong>Create</strong>.</li></ol><hr><h2 id="configuring-a-mem0-provider" tabindex="-1">Configuring a Mem0 Provider <a class="header-anchor" href="#configuring-a-mem0-provider" aria-label="Permalink to &quot;Configuring a Mem0 Provider&quot;"></a></h2><p>After creating a provider, select it from the list and configure its settings.</p><table tabindex="0"><thead><tr><th>Field</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td><strong>Base URL</strong></td><td>No</td><td>Mem0 API base URL. Defaults to <code>https://api.mem0.ai</code> when empty.</td></tr><tr><td><strong>API Key</strong></td><td>Yes</td><td>API key for Mem0 authentication (stored as a secret).</td></tr><tr><td><strong>Organization ID</strong></td><td>No</td><td>Organization ID for workspace scoping.</td></tr><tr><td><strong>Project ID</strong></td><td>No</td><td>Project ID for workspace scoping.</td></tr></tbody></table><hr><h2 id="assigning-a-mem0-provider-to-a-bot" tabindex="-1">Assigning a Mem0 Provider to a Bot <a class="header-anchor" href="#assigning-a-mem0-provider-to-a-bot" aria-label="Permalink to &quot;Assigning a Mem0 Provider to a Bot&quot;"></a></h2><ol><li>Navigate to the <strong>Bots</strong> page and open your bot.</li><li>Go to the <strong>Settings</strong> tab.</li><li>Find the <strong>Memory Provider</strong> dropdown.</li><li>Select the Mem0 provider you created.</li><li>Click <strong>Save</strong>.</li></ol><hr><h2 id="usage" tabindex="-1">Usage <a class="header-anchor" href="#usage" aria-label="Permalink to &quot;Usage&quot;"></a></h2><p>Once assigned, the bot will use Mem0 as its memory backend. Memory extraction, search, and management operations are routed through the Mem0 API.</p><p>For day-to-day memory operations, see <a href="/getting-started/memory.html">Bot Memory Management</a>.</p>',16)])])}const p=t(i,[["render",n]]);export{c as __pageData,p as default};
import{_ as r,o as t,c as o,ag as a}from"./chunks/framework.CvgP6Fyv.js";const c=JSON.parse('{"title":"Mem0 Memory Provider","description":"","frontmatter":{},"headers":[],"relativePath":"memory-providers/mem0.md","filePath":"memory-providers/mem0.md","lastUpdated":1774787421000}'),i={name:"memory-providers/mem0.md"};function n(d,e,s,m,l,g){return t(),o("div",null,[...e[0]||(e[0]=[a('<h1 id="mem0-memory-provider" tabindex="-1">Mem0 Memory Provider <a class="header-anchor" href="#mem0-memory-provider" aria-label="Permalink to &quot;Mem0 Memory Provider&quot;"></a></h1><p>Mem0 is a SaaS memory provider that connects your bot to the <a href="https://mem0.ai" target="_blank" rel="noreferrer">Mem0</a> platform. Instead of managing memory infrastructure yourself, Mem0 handles storage, retrieval, and indexing through its cloud API.</p><hr><h2 id="creating-a-mem0-provider" tabindex="-1">Creating a Mem0 Provider <a class="header-anchor" href="#creating-a-mem0-provider" aria-label="Permalink to &quot;Creating a Mem0 Provider&quot;"></a></h2><ol><li>Navigate to the <strong>Memory Providers</strong> page.</li><li>Click <strong>Add Memory Provider</strong>.</li><li>Fill in the following fields: <ul><li><strong>Name</strong>: A display name for this provider.</li><li><strong>Provider Type</strong>: Select <code>mem0</code>.</li></ul></li><li>Click <strong>Create</strong>.</li></ol><hr><h2 id="configuring-a-mem0-provider" tabindex="-1">Configuring a Mem0 Provider <a class="header-anchor" href="#configuring-a-mem0-provider" aria-label="Permalink to &quot;Configuring a Mem0 Provider&quot;"></a></h2><p>After creating a provider, select it from the list and configure its settings.</p><table tabindex="0"><thead><tr><th>Field</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td><strong>Base URL</strong></td><td>No</td><td>Mem0 API base URL. Defaults to <code>https://api.mem0.ai</code> when empty.</td></tr><tr><td><strong>API Key</strong></td><td>Yes</td><td>API key for Mem0 authentication (stored as a secret).</td></tr><tr><td><strong>Organization ID</strong></td><td>No</td><td>Organization ID for workspace scoping.</td></tr><tr><td><strong>Project ID</strong></td><td>No</td><td>Project ID for workspace scoping.</td></tr></tbody></table><hr><h2 id="assigning-a-mem0-provider-to-a-bot" tabindex="-1">Assigning a Mem0 Provider to a Bot <a class="header-anchor" href="#assigning-a-mem0-provider-to-a-bot" aria-label="Permalink to &quot;Assigning a Mem0 Provider to a Bot&quot;"></a></h2><ol><li>Navigate to the <strong>Bots</strong> page and open your bot.</li><li>Go to the <strong>General</strong> tab.</li><li>Find the <strong>Memory Provider</strong> dropdown.</li><li>Select the Mem0 provider you created.</li><li>Click <strong>Save</strong>.</li></ol><hr><h2 id="usage" tabindex="-1">Usage <a class="header-anchor" href="#usage" aria-label="Permalink to &quot;Usage&quot;"></a></h2><p>Once assigned, the bot will use Mem0 as its memory backend. Memory extraction, search, and management operations are routed through the Mem0 API.</p><p>For day-to-day memory operations, see <a href="/getting-started/memory.html">Bot Memory Management</a>.</p>',16)])])}const p=r(i,[["render",n]]);export{c as __pageData,p as default};
@@ -0,0 +1 @@
import{_ as r,o as t,c as o,ag as a}from"./chunks/framework.CvgP6Fyv.js";const c=JSON.parse('{"title":"Mem0 Memory Provider","description":"","frontmatter":{},"headers":[],"relativePath":"memory-providers/mem0.md","filePath":"memory-providers/mem0.md","lastUpdated":1774787421000}'),i={name:"memory-providers/mem0.md"};function n(d,e,s,m,l,g){return t(),o("div",null,[...e[0]||(e[0]=[a("",16)])])}const p=r(i,[["render",n]]);export{c as __pageData,p as default};
@@ -1 +0,0 @@
import{_ as t,o as r,c as o,ag as a}from"./chunks/framework.CvgP6Fyv.js";const c=JSON.parse('{"title":"Mem0 Memory Provider","description":"","frontmatter":{},"headers":[],"relativePath":"memory-providers/mem0.md","filePath":"memory-providers/mem0.md","lastUpdated":1773501089000}'),i={name:"memory-providers/mem0.md"};function n(d,e,s,m,l,g){return r(),o("div",null,[...e[0]||(e[0]=[a("",16)])])}const p=t(i,[["render",n]]);export{c as __pageData,p as default};
@@ -1 +1 @@
import{_ as i,o as r,c as t,ag as o}from"./chunks/framework.CvgP6Fyv.js";const c=JSON.parse('{"title":"OpenViking Memory Provider","description":"","frontmatter":{},"headers":[],"relativePath":"memory-providers/openviking.md","filePath":"memory-providers/openviking.md","lastUpdated":1773501089000}'),n={name:"memory-providers/openviking.md"};function a(d,e,s,g,l,p){return r(),t("div",null,[...e[0]||(e[0]=[o('<h1 id="openviking-memory-provider" tabindex="-1">OpenViking Memory Provider <a class="header-anchor" href="#openviking-memory-provider" aria-label="Permalink to &quot;OpenViking Memory Provider&quot;"></a></h1><p>OpenViking is a memory provider that can be self-hosted or used as a SaaS service. It provides an alternative memory backend for bots that need a dedicated memory API.</p><hr><h2 id="creating-an-openviking-provider" tabindex="-1">Creating an OpenViking Provider <a class="header-anchor" href="#creating-an-openviking-provider" aria-label="Permalink to &quot;Creating an OpenViking Provider&quot;"></a></h2><ol><li>Navigate to the <strong>Memory Providers</strong> page.</li><li>Click <strong>Add Memory Provider</strong>.</li><li>Fill in the following fields: <ul><li><strong>Name</strong>: A display name for this provider.</li><li><strong>Provider Type</strong>: Select <code>openviking</code>.</li></ul></li><li>Click <strong>Create</strong>.</li></ol><hr><h2 id="configuring-an-openviking-provider" tabindex="-1">Configuring an OpenViking Provider <a class="header-anchor" href="#configuring-an-openviking-provider" aria-label="Permalink to &quot;Configuring an OpenViking Provider&quot;"></a></h2><p>After creating a provider, select it from the list and configure its settings.</p><table tabindex="0"><thead><tr><th>Field</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td><strong>Base URL</strong></td><td>Yes</td><td>OpenViking API endpoint (e.g. <code>http://openviking:8088</code>).</td></tr><tr><td><strong>API Key</strong></td><td>No</td><td>API key for authentication (stored as a secret).</td></tr></tbody></table><hr><h2 id="assigning-an-openviking-provider-to-a-bot" tabindex="-1">Assigning an OpenViking Provider to a Bot <a class="header-anchor" href="#assigning-an-openviking-provider-to-a-bot" aria-label="Permalink to &quot;Assigning an OpenViking Provider to a Bot&quot;"></a></h2><ol><li>Navigate to the <strong>Bots</strong> page and open your bot.</li><li>Go to the <strong>Settings</strong> tab.</li><li>Find the <strong>Memory Provider</strong> dropdown.</li><li>Select the OpenViking provider you created.</li><li>Click <strong>Save</strong>.</li></ol><hr><h2 id="usage" tabindex="-1">Usage <a class="header-anchor" href="#usage" aria-label="Permalink to &quot;Usage&quot;"></a></h2><p>Once assigned, the bot will use OpenViking as its memory backend. Memory extraction, search, and management operations are routed through the OpenViking API.</p><p>For day-to-day memory operations, see <a href="/getting-started/memory.html">Bot Memory Management</a>.</p>',16)])])}const m=i(n,[["render",a]]);export{c as __pageData,m as default};
import{_ as i,o as r,c as o,ag as t}from"./chunks/framework.CvgP6Fyv.js";const c=JSON.parse('{"title":"OpenViking Memory Provider","description":"","frontmatter":{},"headers":[],"relativePath":"memory-providers/openviking.md","filePath":"memory-providers/openviking.md","lastUpdated":1774787421000}'),n={name:"memory-providers/openviking.md"};function a(d,e,s,g,l,p){return r(),o("div",null,[...e[0]||(e[0]=[t('<h1 id="openviking-memory-provider" tabindex="-1">OpenViking Memory Provider <a class="header-anchor" href="#openviking-memory-provider" aria-label="Permalink to &quot;OpenViking Memory Provider&quot;"></a></h1><p>OpenViking is a memory provider that can be self-hosted or used as a SaaS service. It provides an alternative memory backend for bots that need a dedicated memory API.</p><hr><h2 id="creating-an-openviking-provider" tabindex="-1">Creating an OpenViking Provider <a class="header-anchor" href="#creating-an-openviking-provider" aria-label="Permalink to &quot;Creating an OpenViking Provider&quot;"></a></h2><ol><li>Navigate to the <strong>Memory Providers</strong> page.</li><li>Click <strong>Add Memory Provider</strong>.</li><li>Fill in the following fields: <ul><li><strong>Name</strong>: A display name for this provider.</li><li><strong>Provider Type</strong>: Select <code>openviking</code>.</li></ul></li><li>Click <strong>Create</strong>.</li></ol><hr><h2 id="configuring-an-openviking-provider" tabindex="-1">Configuring an OpenViking Provider <a class="header-anchor" href="#configuring-an-openviking-provider" aria-label="Permalink to &quot;Configuring an OpenViking Provider&quot;"></a></h2><p>After creating a provider, select it from the list and configure its settings.</p><table tabindex="0"><thead><tr><th>Field</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td><strong>Base URL</strong></td><td>Yes</td><td>OpenViking API endpoint (e.g. <code>http://openviking:8088</code>).</td></tr><tr><td><strong>API Key</strong></td><td>No</td><td>API key for authentication (stored as a secret).</td></tr></tbody></table><hr><h2 id="assigning-an-openviking-provider-to-a-bot" tabindex="-1">Assigning an OpenViking Provider to a Bot <a class="header-anchor" href="#assigning-an-openviking-provider-to-a-bot" aria-label="Permalink to &quot;Assigning an OpenViking Provider to a Bot&quot;"></a></h2><ol><li>Navigate to the <strong>Bots</strong> page and open your bot.</li><li>Go to the <strong>General</strong> tab.</li><li>Find the <strong>Memory Provider</strong> dropdown.</li><li>Select the OpenViking provider you created.</li><li>Click <strong>Save</strong>.</li></ol><hr><h2 id="usage" tabindex="-1">Usage <a class="header-anchor" href="#usage" aria-label="Permalink to &quot;Usage&quot;"></a></h2><p>Once assigned, the bot will use OpenViking as its memory backend. Memory extraction, search, and management operations are routed through the OpenViking API.</p><p>For day-to-day memory operations, see <a href="/getting-started/memory.html">Bot Memory Management</a>.</p>',16)])])}const m=i(n,[["render",a]]);export{c as __pageData,m as default};
@@ -0,0 +1 @@
import{_ as i,o as r,c as o,ag as t}from"./chunks/framework.CvgP6Fyv.js";const c=JSON.parse('{"title":"OpenViking Memory Provider","description":"","frontmatter":{},"headers":[],"relativePath":"memory-providers/openviking.md","filePath":"memory-providers/openviking.md","lastUpdated":1774787421000}'),n={name:"memory-providers/openviking.md"};function a(d,e,s,g,l,p){return r(),o("div",null,[...e[0]||(e[0]=[t("",16)])])}const m=i(n,[["render",a]]);export{c as __pageData,m as default};
@@ -1 +0,0 @@
import{_ as i,o as r,c as t,ag as o}from"./chunks/framework.CvgP6Fyv.js";const c=JSON.parse('{"title":"OpenViking Memory Provider","description":"","frontmatter":{},"headers":[],"relativePath":"memory-providers/openviking.md","filePath":"memory-providers/openviking.md","lastUpdated":1773501089000}'),n={name:"memory-providers/openviking.md"};function a(d,e,s,g,l,p){return r(),t("div",null,[...e[0]||(e[0]=[o("",16)])])}const m=i(n,[["render",a]]);export{c as __pageData,m as default};
@@ -1 +0,0 @@
import{_ as t,o,c as a,ag as d}from"./chunks/framework.CvgP6Fyv.js";const p=JSON.parse('{"title":"Edge TTS","description":"","frontmatter":{},"headers":[],"relativePath":"tts-providers/edge.md","filePath":"tts-providers/edge.md","lastUpdated":1773501089000}'),i={name:"tts-providers/edge.md"};function r(s,e,n,l,c,g){return o(),a("div",null,[...e[0]||(e[0]=[d("",17)])])}const u=t(i,[["render",r]]);export{p as __pageData,u as default};
@@ -1 +1 @@
import{_ as t,o,c as a,ag as d}from"./chunks/framework.CvgP6Fyv.js";const p=JSON.parse('{"title":"Edge TTS","description":"","frontmatter":{},"headers":[],"relativePath":"tts-providers/edge.md","filePath":"tts-providers/edge.md","lastUpdated":1773501089000}'),i={name:"tts-providers/edge.md"};function r(s,e,n,l,c,g){return o(),a("div",null,[...e[0]||(e[0]=[d('<h1 id="edge-tts" tabindex="-1">Edge TTS <a class="header-anchor" href="#edge-tts" aria-label="Permalink to &quot;Edge TTS&quot;"></a></h1><p>Edge TTS uses Microsoft Edge&#39;s public read-aloud API for speech synthesis. It is free, requires no API key, and supports 256+ voices across 50+ languages.</p><hr><h2 id="creating-an-edge-tts-provider" tabindex="-1">Creating an Edge TTS Provider <a class="header-anchor" href="#creating-an-edge-tts-provider" aria-label="Permalink to &quot;Creating an Edge TTS Provider&quot;"></a></h2><ol><li>Navigate to the <strong>TTS Providers</strong> page.</li><li>Click <strong>Add</strong>.</li><li>Select <code>edge</code> as the provider type.</li><li>Click <strong>Create</strong>.</li></ol><p>The default model <code>edge-read-aloud</code> is automatically imported when the provider is created.</p><hr><h2 id="configuring-the-model" tabindex="-1">Configuring the Model <a class="header-anchor" href="#configuring-the-model" aria-label="Permalink to &quot;Configuring the Model&quot;"></a></h2><p>Click the <code>edge-read-aloud</code> model to configure its settings.</p><table tabindex="0"><thead><tr><th>Field</th><th>Description</th></tr></thead><tbody><tr><td><strong>Voice</strong></td><td>Language + voice ID. Default: <code>en-US-EmmaMultilingualNeural</code>. Over 256 voices available across 50+ languages.</td></tr><tr><td><strong>Format</strong></td><td>Audio output format. Options: <code>audio-24khz-48kbitrate-mono-mp3</code> (default), <code>audio-24khz-96kbitrate-mono-mp3</code>, <code>webm-24khz-16bit-mono-opus</code>.</td></tr><tr><td><strong>Speed</strong></td><td>Playback speed. Options: <code>0.5</code>, <code>1.0</code> (default), <code>2.0</code>, <code>3.0</code>.</td></tr><tr><td><strong>Pitch</strong></td><td>Voice pitch adjustment. Range: <code>-100</code> to <code>+100</code>, default <code>0</code>.</td></tr></tbody></table><hr><h2 id="assigning-to-a-bot" tabindex="-1">Assigning to a Bot <a class="header-anchor" href="#assigning-to-a-bot" aria-label="Permalink to &quot;Assigning to a Bot&quot;"></a></h2><ol><li>Open a bot&#39;s <strong>Settings</strong> tab.</li><li>Find the <strong>TTS Model</strong> dropdown.</li><li>Select the configured Edge TTS model.</li><li>Click <strong>Save</strong>.</li></ol><p>The bot can now synthesize speech using Edge TTS.</p><hr><h2 id="testing" tabindex="-1">Testing <a class="header-anchor" href="#testing" aria-label="Permalink to &quot;Testing&quot;"></a></h2><p>Use the built-in synthesis test button on the model configuration page to preview how the selected voice, format, speed, and pitch sound before assigning to a bot.</p>',17)])])}const u=t(i,[["render",r]]);export{p as __pageData,u as default};
import{_ as t,o,c as a,ag as d}from"./chunks/framework.CvgP6Fyv.js";const p=JSON.parse('{"title":"Edge TTS","description":"","frontmatter":{},"headers":[],"relativePath":"tts-providers/edge.md","filePath":"tts-providers/edge.md","lastUpdated":1774787421000}'),r={name:"tts-providers/edge.md"};function i(n,e,s,l,c,g){return o(),a("div",null,[...e[0]||(e[0]=[d('<h1 id="edge-tts" tabindex="-1">Edge TTS <a class="header-anchor" href="#edge-tts" aria-label="Permalink to &quot;Edge TTS&quot;"></a></h1><p>Edge TTS uses Microsoft Edge&#39;s public read-aloud API for speech synthesis. It is free, requires no API key, and supports 256+ voices across 50+ languages.</p><hr><h2 id="creating-an-edge-tts-provider" tabindex="-1">Creating an Edge TTS Provider <a class="header-anchor" href="#creating-an-edge-tts-provider" aria-label="Permalink to &quot;Creating an Edge TTS Provider&quot;"></a></h2><ol><li>Navigate to the <strong>TTS Providers</strong> page.</li><li>Click <strong>Add</strong>.</li><li>Select <code>edge</code> as the provider type.</li><li>Click <strong>Create</strong>.</li></ol><p>The default model <code>edge-read-aloud</code> is automatically imported when the provider is created.</p><hr><h2 id="configuring-the-model" tabindex="-1">Configuring the Model <a class="header-anchor" href="#configuring-the-model" aria-label="Permalink to &quot;Configuring the Model&quot;"></a></h2><p>Click the <code>edge-read-aloud</code> model to configure its settings.</p><table tabindex="0"><thead><tr><th>Field</th><th>Description</th></tr></thead><tbody><tr><td><strong>Voice</strong></td><td>Language + voice ID. Default: <code>en-US-EmmaMultilingualNeural</code>. Over 256 voices available across 50+ languages.</td></tr><tr><td><strong>Format</strong></td><td>Audio output format. Options: <code>audio-24khz-48kbitrate-mono-mp3</code> (default), <code>audio-24khz-96kbitrate-mono-mp3</code>, <code>webm-24khz-16bit-mono-opus</code>.</td></tr><tr><td><strong>Speed</strong></td><td>Playback speed. Options: <code>0.5</code>, <code>1.0</code> (default), <code>2.0</code>, <code>3.0</code>.</td></tr><tr><td><strong>Pitch</strong></td><td>Voice pitch adjustment. Range: <code>-100</code> to <code>+100</code>, default <code>0</code>.</td></tr></tbody></table><hr><h2 id="assigning-to-a-bot" tabindex="-1">Assigning to a Bot <a class="header-anchor" href="#assigning-to-a-bot" aria-label="Permalink to &quot;Assigning to a Bot&quot;"></a></h2><ol><li>Open a bot&#39;s <strong>General</strong> tab.</li><li>Find the <strong>TTS Model</strong> dropdown.</li><li>Select the configured Edge TTS model.</li><li>Click <strong>Save</strong>.</li></ol><p>The bot can now synthesize speech using Edge TTS.</p><hr><h2 id="testing" tabindex="-1">Testing <a class="header-anchor" href="#testing" aria-label="Permalink to &quot;Testing&quot;"></a></h2><p>Use the built-in synthesis test button on the model configuration page to preview how the selected voice, format, speed, and pitch sound before assigning to a bot.</p>',17)])])}const u=t(r,[["render",i]]);export{p as __pageData,u as default};
@@ -0,0 +1 @@
import{_ as t,o,c as a,ag as d}from"./chunks/framework.CvgP6Fyv.js";const p=JSON.parse('{"title":"Edge TTS","description":"","frontmatter":{},"headers":[],"relativePath":"tts-providers/edge.md","filePath":"tts-providers/edge.md","lastUpdated":1774787421000}'),r={name:"tts-providers/edge.md"};function i(n,e,s,l,c,g){return o(),a("div",null,[...e[0]||(e[0]=[d("",17)])])}const u=t(r,[["render",i]]);export{p as __pageData,u as default};
@@ -1 +1 @@
import{_ as t,o as r,c as o,ag as a}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"TTS Providers","description":"","frontmatter":{},"headers":[],"relativePath":"tts-providers/index.md","filePath":"tts-providers/index.md","lastUpdated":1773501089000}'),i={name:"tts-providers/index.md"};function s(d,e,l,n,c,h){return r(),o("div",null,[...e[0]||(e[0]=[a('<h1 id="tts-providers" tabindex="-1">TTS Providers <a class="header-anchor" href="#tts-providers" aria-label="Permalink to &quot;TTS Providers&quot;"></a></h1><p>Memoh supports <strong>Text-to-Speech (TTS)</strong> so bots can synthesize spoken audio from text. The TTS system is organized into three layers:</p><ul><li><strong>TTS Provider</strong>: A service type (e.g. Edge TTS). You create named provider instances from the TTS Providers page.</li><li><strong>TTS Model</strong>: A specific voice/model under a provider (e.g. <code>edge-read-aloud</code>). Models have configurable voice, format, speed, and pitch settings.</li><li><strong>Bot Assignment</strong>: In Bot Settings, select a TTS Model. The bot can then synthesize speech in conversations.</li></ul><hr><h2 id="basic-flow" tabindex="-1">Basic Flow <a class="header-anchor" href="#basic-flow" aria-label="Permalink to &quot;Basic Flow&quot;"></a></h2><ol><li>Navigate to the <strong>TTS Providers</strong> page from the sidebar.</li><li>Click <strong>Add</strong> and select a provider type (e.g. <code>edge</code>).</li><li>Click <strong>Create</strong> — the provider&#39;s default model is auto-imported.</li><li>Click the model to configure voice, format, speed, and pitch.</li><li>Test synthesis with the built-in test button.</li><li>Open a bot&#39;s <strong>Settings</strong> tab and select the TTS Model.</li><li>Save — the bot can now synthesize speech.</li></ol><hr><h2 id="available-providers" tabindex="-1">Available Providers <a class="header-anchor" href="#available-providers" aria-label="Permalink to &quot;Available Providers&quot;"></a></h2><table tabindex="0"><thead><tr><th>Provider</th><th>Description</th></tr></thead><tbody><tr><td><a href="/tts-providers/edge.html">Edge TTS</a></td><td>Free, uses Microsoft Edge&#39;s public read-aloud API. 256+ voices across 50+ languages. No API key required.</td></tr></tbody></table><hr><h2 id="next-steps" tabindex="-1">Next Steps <a class="header-anchor" href="#next-steps" aria-label="Permalink to &quot;Next Steps&quot;"></a></h2><ul><li>To set up the currently available provider, continue with <a href="/tts-providers/edge.html">Edge TTS</a>.</li></ul>',12)])])}const v=t(i,[["render",s]]);export{g as __pageData,v as default};
import{_ as t,o as r,c as o,ag as a}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"TTS Providers","description":"","frontmatter":{},"headers":[],"relativePath":"tts-providers/index.md","filePath":"tts-providers/index.md","lastUpdated":1774787421000}'),i={name:"tts-providers/index.md"};function s(d,e,l,n,c,h){return r(),o("div",null,[...e[0]||(e[0]=[a('<h1 id="tts-providers" tabindex="-1">TTS Providers <a class="header-anchor" href="#tts-providers" aria-label="Permalink to &quot;TTS Providers&quot;"></a></h1><p>Memoh supports <strong>Text-to-Speech (TTS)</strong> so bots can synthesize spoken audio from text. The TTS system is organized into three layers:</p><ul><li><strong>TTS Provider</strong>: A service type (e.g. Edge TTS). You create named provider instances from the TTS Providers page.</li><li><strong>TTS Model</strong>: A specific voice/model under a provider (e.g. <code>edge-read-aloud</code>). Models have configurable voice, format, speed, and pitch settings.</li><li><strong>Bot Assignment</strong>: In Bot Settings, select a TTS Model. The bot can then synthesize speech in conversations.</li></ul><hr><h2 id="basic-flow" tabindex="-1">Basic Flow <a class="header-anchor" href="#basic-flow" aria-label="Permalink to &quot;Basic Flow&quot;"></a></h2><ol><li>Navigate to the <strong>TTS Providers</strong> page from the sidebar.</li><li>Click <strong>Add</strong> and select a provider type (e.g. <code>edge</code>).</li><li>Click <strong>Create</strong> — the provider&#39;s default model is auto-imported.</li><li>Click the model to configure voice, format, speed, and pitch.</li><li>Test synthesis with the built-in test button.</li><li>Open a bot&#39;s <strong>General</strong> tab and select the TTS Model.</li><li>Save — the bot can now synthesize speech.</li></ol><hr><h2 id="available-providers" tabindex="-1">Available Providers <a class="header-anchor" href="#available-providers" aria-label="Permalink to &quot;Available Providers&quot;"></a></h2><table tabindex="0"><thead><tr><th>Provider</th><th>Description</th></tr></thead><tbody><tr><td><a href="/tts-providers/edge.html">Edge TTS</a></td><td>Free, uses Microsoft Edge&#39;s public read-aloud API. 256+ voices across 50+ languages. No API key required.</td></tr></tbody></table><hr><h2 id="next-steps" tabindex="-1">Next Steps <a class="header-anchor" href="#next-steps" aria-label="Permalink to &quot;Next Steps&quot;"></a></h2><ul><li>To set up the currently available provider, continue with <a href="/tts-providers/edge.html">Edge TTS</a>.</li></ul>',12)])])}const v=t(i,[["render",s]]);export{g as __pageData,v as default};
@@ -1 +1 @@
import{_ as t,o as r,c as o,ag as a}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"TTS Providers","description":"","frontmatter":{},"headers":[],"relativePath":"tts-providers/index.md","filePath":"tts-providers/index.md","lastUpdated":1773501089000}'),i={name:"tts-providers/index.md"};function s(d,e,l,n,c,h){return r(),o("div",null,[...e[0]||(e[0]=[a("",12)])])}const v=t(i,[["render",s]]);export{g as __pageData,v as default};
import{_ as t,o as r,c as o,ag as a}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"TTS Providers","description":"","frontmatter":{},"headers":[],"relativePath":"tts-providers/index.md","filePath":"tts-providers/index.md","lastUpdated":1774787421000}'),i={name:"tts-providers/index.md"};function s(d,e,l,n,c,h){return r(),o("div",null,[...e[0]||(e[0]=[a("",12)])])}const v=t(i,[["render",s]]);export{g as __pageData,v as default};
File diff suppressed because one or more lines are too long
+3 -3
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+5 -5
View File
File diff suppressed because one or more lines are too long
+5 -5
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+5 -5
View File
File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More