mirror of
https://github.com/memohai/Memoh.git
synced 2026-04-25 07:00:48 +09:00
deploy: a91d6304c6
This commit is contained in:
+7
-7
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +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};
|
||||
import{_ as t,o as a,c as o,ag as i}from"./chunks/framework.DXGyWiRo.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};
|
||||
@@ -1 +1 @@
|
||||
import{t as p}from"./chunks/theme.CrSynxcK.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.BY8ac8ik.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.DXGyWiRo.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};
|
||||
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
||||
import{_ as t,o as a,c as o,ag as n}from"./chunks/framework.CvgP6Fyv.js";const r="/blogs/2026-02-16/01-multi-bots.png",i="/blogs/2026-02-16/02-containerized.png",s="/blogs/2026-02-16/03-memory-engineering.png",y=JSON.parse('{"title":"Introduction to Memoh - The Case for an Always-On, Containerized Home Agent","description":"","frontmatter":{"title":"Introduction to Memoh - The Case for an Always-On, Containerized Home Agent","author":"Team Memoh"},"headers":[],"relativePath":"blogs/2026-02-16.md","filePath":"blogs/2026-02-16.md","lastUpdated":1771238980000}'),l={name:"blogs/2026-02-16.md"};function h(c,e,d,u,m,p){return a(),o("div",null,[...e[0]||(e[0]=[n("",33)])])}const f=t(l,[["render",h]]);export{y as __pageData,f as default};
|
||||
import{_ as t,o as a,c as o,ag as n}from"./chunks/framework.DXGyWiRo.js";const r="/blogs/2026-02-16/01-multi-bots.png",i="/blogs/2026-02-16/02-containerized.png",s="/blogs/2026-02-16/03-memory-engineering.png",y=JSON.parse('{"title":"Introduction to Memoh - The Case for an Always-On, Containerized Home Agent","description":"","frontmatter":{"title":"Introduction to Memoh - The Case for an Always-On, Containerized Home Agent","author":"Team Memoh"},"headers":[],"relativePath":"blogs/2026-02-16.md","filePath":"blogs/2026-02-16.md","lastUpdated":1771238980000}'),l={name:"blogs/2026-02-16.md"};function h(c,e,d,u,m,p){return a(),o("div",null,[...e[0]||(e[0]=[n("",33)])])}const f=t(l,[["render",h]]);export{y as __pageData,f as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as a,o,c as s,j as e,a as l}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"Blogs","description":"","frontmatter":{},"headers":[],"relativePath":"blogs/index.md","filePath":"blogs/index.md","lastUpdated":1771238299000}'),n={name:"blogs/index.md"};function r(i,t,d,c,p,m){return o(),s("div",null,[...t[0]||(t[0]=[e("h1",{id:"blogs",tabindex:"-1"},[l("Blogs "),e("a",{class:"header-anchor",href:"#blogs","aria-label":'Permalink to "Blogs"'},"")],-1),e("p",null,"This section contains the latest blogs about Memoh.",-1),e("ul",null,[e("li",null,[e("a",{href:"/blogs/2026-02-16.html"},"Introduction (Feb 2026)")])],-1)])])}const h=a(n,[["render",r]]);export{g as __pageData,h as default};
|
||||
import{_ as a,o,c as s,j as e,a as l}from"./chunks/framework.DXGyWiRo.js";const g=JSON.parse('{"title":"Blogs","description":"","frontmatter":{},"headers":[],"relativePath":"blogs/index.md","filePath":"blogs/index.md","lastUpdated":1771238299000}'),n={name:"blogs/index.md"};function r(i,t,d,c,p,m){return o(),s("div",null,[...t[0]||(t[0]=[e("h1",{id:"blogs",tabindex:"-1"},[l("Blogs "),e("a",{class:"header-anchor",href:"#blogs","aria-label":'Permalink to "Blogs"'},"")],-1),e("p",null,"This section contains the latest blogs about Memoh.",-1),e("ul",null,[e("li",null,[e("a",{href:"/blogs/2026-02-16.html"},"Introduction (Feb 2026)")])],-1)])])}const h=a(n,[["render",r]]);export{g as __pageData,h as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as a,o,c as s,j as e,a as l}from"./chunks/framework.CvgP6Fyv.js";const g=JSON.parse('{"title":"Blogs","description":"","frontmatter":{},"headers":[],"relativePath":"blogs/index.md","filePath":"blogs/index.md","lastUpdated":1771238299000}'),n={name:"blogs/index.md"};function r(i,t,d,c,p,m){return o(),s("div",null,[...t[0]||(t[0]=[e("h1",{id:"blogs",tabindex:"-1"},[l("Blogs "),e("a",{class:"header-anchor",href:"#blogs","aria-label":'Permalink to "Blogs"'},"")],-1),e("p",null,"This section contains the latest blogs about Memoh.",-1),e("ul",null,[e("li",null,[e("a",{href:"/blogs/2026-02-16.html"},"Introduction (Feb 2026)")])],-1)])])}const h=a(n,[["render",r]]);export{g as __pageData,h as default};
|
||||
import{_ as a,o,c as s,j as e,a as l}from"./chunks/framework.DXGyWiRo.js";const g=JSON.parse('{"title":"Blogs","description":"","frontmatter":{},"headers":[],"relativePath":"blogs/index.md","filePath":"blogs/index.md","lastUpdated":1771238299000}'),n={name:"blogs/index.md"};function r(i,t,d,c,p,m){return o(),s("div",null,[...t[0]||(t[0]=[e("h1",{id:"blogs",tabindex:"-1"},[l("Blogs "),e("a",{class:"header-anchor",href:"#blogs","aria-label":'Permalink to "Blogs"'},"")],-1),e("p",null,"This section contains the latest blogs about Memoh.",-1),e("ul",null,[e("li",null,[e("a",{href:"/blogs/2026-02-16.html"},"Introduction (Feb 2026)")])],-1)])])}const h=a(n,[["render",r]]);export{g as __pageData,h 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":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 "Discord Channel Configuration""></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 "Step 1: Create a Discord Application""></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 "Step 2: Configure Bot Settings""></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 "Step 3: Invite the Bot to Your Server""></a></h2><ol><li>Go to <strong>OAuth2</strong> > <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 "Step 4: Configure Memoh""></a></h2><ol><li>Go to your Bot'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 "Features Supported""></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'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.DXGyWiRo.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 "Discord Channel Configuration""></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 "Step 1: Create a Discord Application""></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 "Step 2: Configure Bot Settings""></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 "Step 3: Invite the Bot to Your Server""></a></h2><ol><li>Go to <strong>OAuth2</strong> > <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 "Step 4: Configure Memoh""></a></h2><ol><li>Go to your Bot'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 "Features Supported""></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'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
@@ -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":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};
|
||||
import{_ as t,o,c as r,ag as a}from"./chunks/framework.DXGyWiRo.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":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 "Feishu (Lark) Channel Configuration""></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 "Step 1: Create a Feishu App""></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> > <strong>Credentials & 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 "Step 2: Enable Bot Capability""></a></h2><ol><li>In the Feishu Developer Console, go to <strong>Capabilities</strong> > <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 "Step 3: Configure Permissions""></a></h2><ol><li>Go to <strong>Capabilities</strong> > <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 "Step 4: Configure Events (Webhook Mode)""></a></h2><ol><li>In Memoh, go to your Bot'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> > <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 "Step 5: Publish Your App""></a></h2><ol><li>In the Feishu Console, go to <strong>App Release</strong> > <strong>Version Management & 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.DXGyWiRo.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 "Feishu (Lark) Channel Configuration""></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 "Step 1: Create a Feishu App""></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> > <strong>Credentials & 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 "Step 2: Enable Bot Capability""></a></h2><ol><li>In the Feishu Developer Console, go to <strong>Capabilities</strong> > <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 "Step 3: Configure Permissions""></a></h2><ol><li>Go to <strong>Capabilities</strong> > <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 "Step 4: Configure Events (Webhook Mode)""></a></h2><ol><li>In Memoh, go to your Bot'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> > <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 "Step 5: Publish Your App""></a></h2><ol><li>In the Feishu Console, go to <strong>App Release</strong> > <strong>Version Management & 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
@@ -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":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};
|
||||
import{_ as o,o as t,c as i,ag as a}from"./chunks/framework.DXGyWiRo.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 +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 "Channels Overview""></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 "General Setup Flow""></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'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};
|
||||
import{_ as t,o as r,c as a,ag as o}from"./chunks/framework.DXGyWiRo.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 "Channels Overview""></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 "General Setup Flow""></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'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};
|
||||
+1
-1
@@ -1 +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};
|
||||
import{_ as t,o as r,c as a,ag as o}from"./chunks/framework.DXGyWiRo.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,4 +1,4 @@
|
||||
import{_ as e,o as a,c as i,ag as s}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"Matrix Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/matrix.md","filePath":"channels/matrix.md","lastUpdated":1774790782000}'),o={name:"channels/matrix.md"};function n(r,t,l,h,d,c){return a(),i("div",null,[...t[0]||(t[0]=[s(`<h1 id="matrix-channel-configuration" tabindex="-1">Matrix Channel Configuration <a class="header-anchor" href="#matrix-channel-configuration" aria-label="Permalink to "Matrix Channel Configuration""></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 "Step 1: Create a Matrix Bot Account""></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:</li></ol><ul><li>Option A: Using the Matrix Client Login API</li></ul><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "https://<homeserver>/_matrix/client/v3/login"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||||
import{_ as e,o as a,c as i,ag as s}from"./chunks/framework.DXGyWiRo.js";const u=JSON.parse('{"title":"Matrix Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/matrix.md","filePath":"channels/matrix.md","lastUpdated":1774790782000}'),o={name:"channels/matrix.md"};function n(r,t,l,h,d,c){return a(),i("div",null,[...t[0]||(t[0]=[s(`<h1 id="matrix-channel-configuration" tabindex="-1">Matrix Channel Configuration <a class="header-anchor" href="#matrix-channel-configuration" aria-label="Permalink to "Matrix Channel Configuration""></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 "Step 1: Create a Matrix Bot Account""></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:</li></ol><ul><li>Option A: Using the Matrix Client Login API</li></ul><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -X</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> POST</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "https://<homeserver>/_matrix/client/v3/login"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -H</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "Content-Type: application/json"</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '{</span></span>
|
||||
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> "type": "m.login.password",</span></span>
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{_ as e,o as a,c as i,ag as s}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"Matrix Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/matrix.md","filePath":"channels/matrix.md","lastUpdated":1774790782000}'),o={name:"channels/matrix.md"};function n(r,t,l,h,d,c){return a(),i("div",null,[...t[0]||(t[0]=[s("",18)])])}const g=e(o,[["render",n]]);export{u as __pageData,g as default};
|
||||
import{_ as e,o as a,c as i,ag as s}from"./chunks/framework.DXGyWiRo.js";const u=JSON.parse('{"title":"Matrix Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/matrix.md","filePath":"channels/matrix.md","lastUpdated":1774790782000}'),o={name:"channels/matrix.md"};function n(r,t,l,h,d,c){return a(),i("div",null,[...t[0]||(t[0]=[s("",18)])])}const g=e(o,[["render",n]]);export{u as __pageData,g 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":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 "QQ Channel Configuration""></a></h1><p>Connecting your Memoh Bot to QQ allows it to interact with users through QQ'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 "Step 1: Create a QQ Bot""></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 "Step 2: Configure Memoh""></a></h2><ol><li>Go to your Bot'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 "Step 3: Bind Your Identity (Optional)""></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> > <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 "Features Supported""></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 "Official Resources""></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};
|
||||
import{_ as e,o,c as a,ag as n}from"./chunks/framework.DXGyWiRo.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 "QQ Channel Configuration""></a></h1><p>Connecting your Memoh Bot to QQ allows it to interact with users through QQ'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 "Step 1: Create a QQ Bot""></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 "Step 2: Configure Memoh""></a></h2><ol><li>Go to your Bot'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 "Step 3: Bind Your Identity (Optional)""></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> > <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 "Features Supported""></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 "Official Resources""></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":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};
|
||||
import{_ as e,o,c as a,ag as n}from"./chunks/framework.DXGyWiRo.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 +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":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 "Telegram Channel Configuration""></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 "Step 1: Create a Telegram Bot""></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 "Step 2: Configure Memoh""></a></h2><ol><li>Go to your Bot'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 "Step 3: Bind Your Identity (Optional)""></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> > <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 "Features Supported""></a></h2><ul><li><strong>Streaming</strong>: Responses appear as the bot "thinks."</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};
|
||||
import{_ as t,o,c as a,ag as n}from"./chunks/framework.DXGyWiRo.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 "Telegram Channel Configuration""></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 "Step 1: Create a Telegram Bot""></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 "Step 2: Configure Memoh""></a></h2><ol><li>Go to your Bot'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 "Step 3: Bind Your Identity (Optional)""></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> > <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 "Features Supported""></a></h2><ul><li><strong>Streaming</strong>: Responses appear as the bot "thinks."</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
@@ -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":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};
|
||||
import{_ as t,o,c as a,ag as n}from"./chunks/framework.DXGyWiRo.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 +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 "WeCom (WeWork) Channel Configuration""></a></h1><p>Connecting your Memoh Bot to WeCom (企业微信) allows it to interact with users within your organization'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 "Step 1: Create a WeCom Bot""></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> > <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 "Step 2: Configure Memoh""></a></h2><ol><li>Go to your Bot'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'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 "Step 3: Start Chatting""></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 "Features Supported""></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 "Official Resources""></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};
|
||||
import{_ as t,o,c as a,ag as r}from"./chunks/framework.DXGyWiRo.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 "WeCom (WeWork) Channel Configuration""></a></h1><p>Connecting your Memoh Bot to WeCom (企业微信) allows it to interact with users within your organization'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 "Step 1: Create a WeCom Bot""></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> > <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 "Step 2: Configure Memoh""></a></h2><ol><li>Go to your Bot'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'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 "Step 3: Start Chatting""></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 "Features Supported""></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 "Official Resources""></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};
|
||||
+1
-1
@@ -1 +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};
|
||||
import{_ as t,o,c as a,ag as r}from"./chunks/framework.DXGyWiRo.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 +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 "WeChat Channel Configuration""></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 "Step 1: Add WeChat Channel in Memoh""></a></h2><ol><li>Go to your Bot'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 "Step 2: Scan the QR Code""></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 "Step 3: Start Chatting""></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 "Optional Settings""></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 "Features Supported""></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};
|
||||
import{_ as t,o as a,c as n,ag as o}from"./chunks/framework.DXGyWiRo.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 "WeChat Channel Configuration""></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 "Step 1: Add WeChat Channel in Memoh""></a></h2><ol><li>Go to your Bot'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 "Step 2: Scan the QR Code""></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 "Step 3: Start Chatting""></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 "Optional Settings""></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 "Features Supported""></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};
|
||||
+1
-1
@@ -1 +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};
|
||||
import{_ as t,o as a,c as n,ag as o}from"./chunks/framework.DXGyWiRo.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
+2
-2
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
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +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};
|
||||
import{_ as t,o,c as a,ag as r}from"./chunks/framework.DXGyWiRo.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};
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +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};
|
||||
import{_ as e,o as r,c as o,ag as a}from"./chunks/framework.DXGyWiRo.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};
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +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};
|
||||
import{_ as e,o,c as r,ag as a}from"./chunks/framework.DXGyWiRo.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
-1
@@ -1 +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 "Bot Channels""></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 "Concept: Unified Communication""></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 "Supported Channels""></a></h2><p>Configure your bot'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 "Platform Guides""></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 "Configuration Flow""></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 "1. Adding a Channel""></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 "2. Common Fields""></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 "3. Special Case: Feishu Webhook""></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'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 "4. Special Case: WeChat QR Code""></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 "Operations""></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's active status.</li><li><strong>Delete</strong>: Permanently remove a channel's configuration.</li></ul>',25)])])}const f=a(i,[["render",r]]);export{u as __pageData,f as default};
|
||||
import{_ as a,o as t,c as n,ag as o}from"./chunks/framework.DXGyWiRo.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 "Bot Channels""></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 "Concept: Unified Communication""></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 "Supported Channels""></a></h2><p>Configure your bot'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 "Platform Guides""></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 "Configuration Flow""></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 "1. Adding a Channel""></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 "2. Common Fields""></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 "3. Special Case: Feishu Webhook""></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'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 "4. Special Case: WeChat QR Code""></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 "Operations""></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's active status.</li><li><strong>Delete</strong>: Permanently remove a channel's configuration.</li></ul>',25)])])}const f=a(i,[["render",r]]);export{u as __pageData,f as default};
|
||||
+1
-1
@@ -1 +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("",25)])])}const f=a(i,[["render",r]]);export{u as __pageData,f as default};
|
||||
import{_ as a,o as t,c as n,ag as o}from"./chunks/framework.DXGyWiRo.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};
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +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};
|
||||
import{_ as o,o as t,c as a,ag as r}from"./chunks/framework.DXGyWiRo.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
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -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":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};
|
||||
import{_ as e,o as a,c as n,ag as o}from"./chunks/framework.DXGyWiRo.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
-1
@@ -1 +1 @@
|
||||
import{_ as i,o as a,c as o,ag as t}from"./chunks/framework.CvgP6Fyv.js";const m=JSON.parse('{"title":"Email Providers and Bindings","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/email.md","filePath":"getting-started/email.md","lastUpdated":1772359263000}'),n={name:"getting-started/email.md"};function r(l,e,s,d,g,c){return a(),o("div",null,[...e[0]||(e[0]=[t('<h1 id="email-providers-and-bindings" tabindex="-1">Email Providers and Bindings <a class="header-anchor" href="#email-providers-and-bindings" aria-label="Permalink to "Email Providers and Bindings""></a></h1><p>Memoh allows your Bot to send and receive emails, providing another powerful channel for communication and task management.</p><h2 id="concept-email-as-a-bot-channel" tabindex="-1">Concept: Email as a Bot Channel <a class="header-anchor" href="#concept-email-as-a-bot-channel" aria-label="Permalink to "Concept: Email as a Bot Channel""></a></h2><p>Connecting email to your Bot involves two steps:</p><ol><li><strong>Email Provider</strong>: Configure a connection to an email service (like Mailgun or a generic SMTP server).</li><li><strong>Email Binding</strong>: Link a specific email address from a provider to a Bot.</li></ol><hr><h2 id="email-provider" tabindex="-1">Email Provider <a class="header-anchor" href="#email-provider" aria-label="Permalink to "Email Provider""></a></h2><p>Manage your email service connections from the <strong>Email Provider</strong> page in the sidebar.</p><h3 id="creating-a-provider" tabindex="-1">Creating a Provider <a class="header-anchor" href="#creating-a-provider" aria-label="Permalink to "Creating a Provider""></a></h3><ol><li>Navigate to the <strong>Email Provider</strong> page from the sidebar.</li><li>Click <strong>Add Email Provider</strong>.</li><li>Choose the provider type: <ul><li><strong>Mailgun</strong>: For high-volume delivery.</li><li><strong>Generic SMTP</strong>: For traditional email servers.</li></ul></li><li>Fill in the required fields (e.g., <code>domain</code>, <code>api_key</code>, <code>host</code>, <code>port</code>, <code>username</code>, <code>password</code>).</li><li>Click <strong>Create</strong>.</li></ol><hr><h2 id="bot-email-bindings" tabindex="-1">Bot Email Bindings <a class="header-anchor" href="#bot-email-bindings" aria-label="Permalink to "Bot Email Bindings""></a></h2><p>Configure your bot's email capabilities from the <strong>Email</strong> tab in the Bot Detail page.</p><h3 id="adding-a-binding" tabindex="-1">Adding a Binding <a class="header-anchor" href="#adding-a-binding" aria-label="Permalink to "Adding a Binding""></a></h3><ol><li>Click <strong>Add Binding</strong>.</li><li>Select the <strong>Email Provider</strong> you created.</li><li>Provide the <strong>Email Address</strong> to be associated with the bot.</li><li>Set the bot's permissions: <ul><li><strong>Can Read</strong>: If enabled, the bot can check and process incoming emails.</li><li><strong>Can Write</strong>: If enabled, the bot can compose and send outgoing emails.</li><li><strong>Can Delete</strong>: If enabled, the bot can manage its own email inbox.</li></ul></li><li>Click <strong>Create</strong>.</li></ol><hr><h2 id="outbox-and-history" tabindex="-1">Outbox and History <a class="header-anchor" href="#outbox-and-history" aria-label="Permalink to "Outbox and History""></a></h2><p>The <strong>Email</strong> tab also provides an <strong>Outbox</strong> showing an audit log of all emails sent by the bot:</p><ul><li><strong>To</strong>: The recipient's email address.</li><li><strong>Subject</strong>: The email's subject line.</li><li><strong>Status</strong>: Whether the email was sent successfully.</li><li><strong>Sent At</strong>: The timestamp of the email delivery.</li></ul><hr><h2 id="bot-interaction" tabindex="-1">Bot Interaction <a class="header-anchor" href="#bot-interaction" aria-label="Permalink to "Bot Interaction""></a></h2><ul><li>The bot can use its email permissions to <strong>send reports</strong>, <strong>respond to user inquiries</strong>, or <strong>trigger actions</strong> based on incoming mail.</li><li>Outgoing emails are tracked in the outbox for monitoring and troubleshooting.</li><li>The bot handles email in a structured way, allowing it to "converse" via email just as it does via chat.</li></ul>',22)])])}const u=i(n,[["render",r]]);export{m as __pageData,u as default};
|
||||
import{_ as i,o as a,c as o,ag as t}from"./chunks/framework.DXGyWiRo.js";const m=JSON.parse('{"title":"Email Providers and Bindings","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/email.md","filePath":"getting-started/email.md","lastUpdated":1772359263000}'),n={name:"getting-started/email.md"};function r(l,e,s,d,g,c){return a(),o("div",null,[...e[0]||(e[0]=[t('<h1 id="email-providers-and-bindings" tabindex="-1">Email Providers and Bindings <a class="header-anchor" href="#email-providers-and-bindings" aria-label="Permalink to "Email Providers and Bindings""></a></h1><p>Memoh allows your Bot to send and receive emails, providing another powerful channel for communication and task management.</p><h2 id="concept-email-as-a-bot-channel" tabindex="-1">Concept: Email as a Bot Channel <a class="header-anchor" href="#concept-email-as-a-bot-channel" aria-label="Permalink to "Concept: Email as a Bot Channel""></a></h2><p>Connecting email to your Bot involves two steps:</p><ol><li><strong>Email Provider</strong>: Configure a connection to an email service (like Mailgun or a generic SMTP server).</li><li><strong>Email Binding</strong>: Link a specific email address from a provider to a Bot.</li></ol><hr><h2 id="email-provider" tabindex="-1">Email Provider <a class="header-anchor" href="#email-provider" aria-label="Permalink to "Email Provider""></a></h2><p>Manage your email service connections from the <strong>Email Provider</strong> page in the sidebar.</p><h3 id="creating-a-provider" tabindex="-1">Creating a Provider <a class="header-anchor" href="#creating-a-provider" aria-label="Permalink to "Creating a Provider""></a></h3><ol><li>Navigate to the <strong>Email Provider</strong> page from the sidebar.</li><li>Click <strong>Add Email Provider</strong>.</li><li>Choose the provider type: <ul><li><strong>Mailgun</strong>: For high-volume delivery.</li><li><strong>Generic SMTP</strong>: For traditional email servers.</li></ul></li><li>Fill in the required fields (e.g., <code>domain</code>, <code>api_key</code>, <code>host</code>, <code>port</code>, <code>username</code>, <code>password</code>).</li><li>Click <strong>Create</strong>.</li></ol><hr><h2 id="bot-email-bindings" tabindex="-1">Bot Email Bindings <a class="header-anchor" href="#bot-email-bindings" aria-label="Permalink to "Bot Email Bindings""></a></h2><p>Configure your bot's email capabilities from the <strong>Email</strong> tab in the Bot Detail page.</p><h3 id="adding-a-binding" tabindex="-1">Adding a Binding <a class="header-anchor" href="#adding-a-binding" aria-label="Permalink to "Adding a Binding""></a></h3><ol><li>Click <strong>Add Binding</strong>.</li><li>Select the <strong>Email Provider</strong> you created.</li><li>Provide the <strong>Email Address</strong> to be associated with the bot.</li><li>Set the bot's permissions: <ul><li><strong>Can Read</strong>: If enabled, the bot can check and process incoming emails.</li><li><strong>Can Write</strong>: If enabled, the bot can compose and send outgoing emails.</li><li><strong>Can Delete</strong>: If enabled, the bot can manage its own email inbox.</li></ul></li><li>Click <strong>Create</strong>.</li></ol><hr><h2 id="outbox-and-history" tabindex="-1">Outbox and History <a class="header-anchor" href="#outbox-and-history" aria-label="Permalink to "Outbox and History""></a></h2><p>The <strong>Email</strong> tab also provides an <strong>Outbox</strong> showing an audit log of all emails sent by the bot:</p><ul><li><strong>To</strong>: The recipient's email address.</li><li><strong>Subject</strong>: The email's subject line.</li><li><strong>Status</strong>: Whether the email was sent successfully.</li><li><strong>Sent At</strong>: The timestamp of the email delivery.</li></ul><hr><h2 id="bot-interaction" tabindex="-1">Bot Interaction <a class="header-anchor" href="#bot-interaction" aria-label="Permalink to "Bot Interaction""></a></h2><ul><li>The bot can use its email permissions to <strong>send reports</strong>, <strong>respond to user inquiries</strong>, or <strong>trigger actions</strong> based on incoming mail.</li><li>Outgoing emails are tracked in the outbox for monitoring and troubleshooting.</li><li>The bot handles email in a structured way, allowing it to "converse" via email just as it does via chat.</li></ul>',22)])])}const u=i(n,[["render",r]]);export{m as __pageData,u as default};
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{_ as i,o as a,c as o,ag as t}from"./chunks/framework.CvgP6Fyv.js";const m=JSON.parse('{"title":"Email Providers and Bindings","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/email.md","filePath":"getting-started/email.md","lastUpdated":1772359263000}'),n={name:"getting-started/email.md"};function r(l,e,s,d,g,c){return a(),o("div",null,[...e[0]||(e[0]=[t("",22)])])}const u=i(n,[["render",r]]);export{m as __pageData,u as default};
|
||||
import{_ as i,o as a,c as o,ag as t}from"./chunks/framework.DXGyWiRo.js";const m=JSON.parse('{"title":"Email Providers and Bindings","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/email.md","filePath":"getting-started/email.md","lastUpdated":1772359263000}'),n={name:"getting-started/email.md"};function r(l,e,s,d,g,c){return a(),o("div",null,[...e[0]||(e[0]=[t("",22)])])}const u=i(n,[["render",r]]);export{m as __pageData,u as default};
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{_ as t,o as i,c as a,ag as o}from"./chunks/framework.CvgP6Fyv.js";const m=JSON.parse('{"title":"Bot Files Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/files.md","filePath":"getting-started/files.md","lastUpdated":1772359263000}'),n={name:"getting-started/files.md"};function r(s,e,l,g,d,h){return i(),a("div",null,[...e[0]||(e[0]=[o('<h1 id="bot-files-management" tabindex="-1">Bot Files Management <a class="header-anchor" href="#bot-files-management" aria-label="Permalink to "Bot Files Management""></a></h1><p>Every Memoh Bot has its own dedicated filesystem inside its isolated container. You can manage this filesystem directly from the <strong>Files</strong> tab in the Bot Detail page.</p><hr><h2 id="operations" tabindex="-1">Operations <a class="header-anchor" href="#operations" aria-label="Permalink to "Operations""></a></h2><p>The <strong>FileManager</strong> component provides a familiar file-browsing experience with a toolbar, directory tree, and integrated editor.</p><h3 id="browsing-and-navigation" tabindex="-1">Browsing and Navigation <a class="header-anchor" href="#browsing-and-navigation" aria-label="Permalink to "Browsing and Navigation""></a></h3><ul><li><strong>Breadcrumb Navigation</strong>: Quickly move between parent directories.</li><li><strong>Refresh</strong>: Reload the file list to see the latest changes (e.g., files created by the bot).</li><li><strong>New Folder</strong>: Create a directory within the current path.</li></ul><h3 id="managing-files" tabindex="-1">Managing Files <a class="header-anchor" href="#managing-files" aria-label="Permalink to "Managing Files""></a></h3><ul><li><strong>Upload</strong>: Select files from your local computer to transfer them into the bot's container.</li><li><strong>Rename</strong>: Click on a file or folder and use the rename action to update its identifier.</li><li><strong>Delete</strong>: Remove files or folders (with recursive support for directories).</li><li><strong>Download</strong>: Retrieve a file from the bot's container back to your local machine.</li></ul><hr><h2 id="viewing-and-editing" tabindex="-1">Viewing and Editing <a class="header-anchor" href="#viewing-and-editing" aria-label="Permalink to "Viewing and Editing""></a></h2><p>The integrated <strong>FileViewer</strong> allows you to interact with the bot's files without leaving the web UI.</p><h3 id="text-files" tabindex="-1">Text Files <a class="header-anchor" href="#text-files" aria-label="Permalink to "Text Files""></a></h3><ul><li><strong>Read/Edit</strong>: Click a text file (e.g., <code>.md</code>, <code>.js</code>, <code>.py</code>, <code>.toml</code>) to open it in the built-in <strong>Monaco Editor</strong>.</li><li><strong>Syntax Highlighting</strong>: Supports common programming languages and configuration formats.</li><li><strong>Save</strong>: Modify the file's content and click <strong>Save</strong> to apply the changes to the bot's filesystem.</li></ul><h3 id="images" tabindex="-1">Images <a class="header-anchor" href="#images" aria-label="Permalink to "Images""></a></h3><ul><li><strong>Preview</strong>: Click an image file (e.g., <code>.png</code>, <code>.jpg</code>, <code>.webp</code>) to see a visual preview directly in the file manager.</li></ul><hr><h2 id="bot-interaction-with-files" tabindex="-1">Bot Interaction with Files <a class="header-anchor" href="#bot-interaction-with-files" aria-label="Permalink to "Bot Interaction with Files""></a></h2><p>Remember that the bot itself can also perform these operations:</p><ul><li>Use its <strong>Skills</strong> or <strong>MCP tools</strong> to read, write, and manage its own files.</li><li>The <strong>Files</strong> tab is your portal to monitor and manually intervene in the bot's workspace.</li></ul>',20)])])}const f=t(n,[["render",r]]);export{m as __pageData,f as default};
|
||||
import{_ as t,o as i,c as a,ag as o}from"./chunks/framework.DXGyWiRo.js";const m=JSON.parse('{"title":"Bot Files Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/files.md","filePath":"getting-started/files.md","lastUpdated":1772359263000}'),n={name:"getting-started/files.md"};function r(s,e,l,g,d,h){return i(),a("div",null,[...e[0]||(e[0]=[o('<h1 id="bot-files-management" tabindex="-1">Bot Files Management <a class="header-anchor" href="#bot-files-management" aria-label="Permalink to "Bot Files Management""></a></h1><p>Every Memoh Bot has its own dedicated filesystem inside its isolated container. You can manage this filesystem directly from the <strong>Files</strong> tab in the Bot Detail page.</p><hr><h2 id="operations" tabindex="-1">Operations <a class="header-anchor" href="#operations" aria-label="Permalink to "Operations""></a></h2><p>The <strong>FileManager</strong> component provides a familiar file-browsing experience with a toolbar, directory tree, and integrated editor.</p><h3 id="browsing-and-navigation" tabindex="-1">Browsing and Navigation <a class="header-anchor" href="#browsing-and-navigation" aria-label="Permalink to "Browsing and Navigation""></a></h3><ul><li><strong>Breadcrumb Navigation</strong>: Quickly move between parent directories.</li><li><strong>Refresh</strong>: Reload the file list to see the latest changes (e.g., files created by the bot).</li><li><strong>New Folder</strong>: Create a directory within the current path.</li></ul><h3 id="managing-files" tabindex="-1">Managing Files <a class="header-anchor" href="#managing-files" aria-label="Permalink to "Managing Files""></a></h3><ul><li><strong>Upload</strong>: Select files from your local computer to transfer them into the bot's container.</li><li><strong>Rename</strong>: Click on a file or folder and use the rename action to update its identifier.</li><li><strong>Delete</strong>: Remove files or folders (with recursive support for directories).</li><li><strong>Download</strong>: Retrieve a file from the bot's container back to your local machine.</li></ul><hr><h2 id="viewing-and-editing" tabindex="-1">Viewing and Editing <a class="header-anchor" href="#viewing-and-editing" aria-label="Permalink to "Viewing and Editing""></a></h2><p>The integrated <strong>FileViewer</strong> allows you to interact with the bot's files without leaving the web UI.</p><h3 id="text-files" tabindex="-1">Text Files <a class="header-anchor" href="#text-files" aria-label="Permalink to "Text Files""></a></h3><ul><li><strong>Read/Edit</strong>: Click a text file (e.g., <code>.md</code>, <code>.js</code>, <code>.py</code>, <code>.toml</code>) to open it in the built-in <strong>Monaco Editor</strong>.</li><li><strong>Syntax Highlighting</strong>: Supports common programming languages and configuration formats.</li><li><strong>Save</strong>: Modify the file's content and click <strong>Save</strong> to apply the changes to the bot's filesystem.</li></ul><h3 id="images" tabindex="-1">Images <a class="header-anchor" href="#images" aria-label="Permalink to "Images""></a></h3><ul><li><strong>Preview</strong>: Click an image file (e.g., <code>.png</code>, <code>.jpg</code>, <code>.webp</code>) to see a visual preview directly in the file manager.</li></ul><hr><h2 id="bot-interaction-with-files" tabindex="-1">Bot Interaction with Files <a class="header-anchor" href="#bot-interaction-with-files" aria-label="Permalink to "Bot Interaction with Files""></a></h2><p>Remember that the bot itself can also perform these operations:</p><ul><li>Use its <strong>Skills</strong> or <strong>MCP tools</strong> to read, write, and manage its own files.</li><li>The <strong>Files</strong> tab is your portal to monitor and manually intervene in the bot's workspace.</li></ul>',20)])])}const f=t(n,[["render",r]]);export{m as __pageData,f as default};
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{_ as t,o as i,c as a,ag as o}from"./chunks/framework.CvgP6Fyv.js";const m=JSON.parse('{"title":"Bot Files Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/files.md","filePath":"getting-started/files.md","lastUpdated":1772359263000}'),n={name:"getting-started/files.md"};function r(s,e,l,g,d,h){return i(),a("div",null,[...e[0]||(e[0]=[o("",20)])])}const f=t(n,[["render",r]]);export{m as __pageData,f as default};
|
||||
import{_ as t,o as i,c as a,ag as o}from"./chunks/framework.DXGyWiRo.js";const m=JSON.parse('{"title":"Bot Files Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/files.md","filePath":"getting-started/files.md","lastUpdated":1772359263000}'),n={name:"getting-started/files.md"};function r(s,e,l,g,d,h){return i(),a("div",null,[...e[0]||(e[0]=[o("",20)])])}const f=t(n,[["render",r]]);export{m as __pageData,f as default};
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{_ as e,o,c as a,ag as r}from"./chunks/framework.CvgP6Fyv.js";const c=JSON.parse('{"title":"Bot Heartbeat","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/heartbeat.md","filePath":"getting-started/heartbeat.md","lastUpdated":1772359263000}'),n={name:"getting-started/heartbeat.md"};function i(s,t,l,h,d,g){return o(),a("div",null,[...t[0]||(t[0]=[r('<h1 id="bot-heartbeat" tabindex="-1">Bot Heartbeat <a class="header-anchor" href="#bot-heartbeat" aria-label="Permalink to "Bot Heartbeat""></a></h1><p>The <strong>Heartbeat</strong> feature allows you to schedule periodic tasks for your Bot, enabling it to perform autonomous actions even when you aren't chatting with it.</p><h2 id="concept-scheduled-autonomy" tabindex="-1">Concept: Scheduled Autonomy <a class="header-anchor" href="#concept-scheduled-autonomy" aria-label="Permalink to "Concept: Scheduled Autonomy""></a></h2><p>A <strong>Heartbeat</strong> is a recurring trigger that prompts the bot to "think" and execute its skills or tools at a set interval. This is useful for:</p><ul><li>Periodic status checks</li><li>Automatic data collection</li><li>Cleaning up the filesystem</li><li>Sending scheduled notifications</li></ul><hr><h2 id="configuration" tabindex="-1">Configuration <a class="header-anchor" href="#configuration" aria-label="Permalink to "Configuration""></a></h2><p>Configure the heartbeat from the <strong>Heartbeat</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>Enabled</strong></td><td>Toggle the heartbeat on or off.</td></tr><tr><td><strong>Interval</strong></td><td>How often (in minutes) the heartbeat should trigger. The default is <strong>30 minutes</strong>.</td></tr><tr><td><strong>Model</strong></td><td>The LLM used to execute the heartbeat task. This can be different from the main chat model.</td></tr></tbody></table><hr><h2 id="logs-and-monitoring" tabindex="-1">Logs and Monitoring <a class="header-anchor" href="#logs-and-monitoring" aria-label="Permalink to "Logs and Monitoring""></a></h2><p>The Heartbeat tab provides a detailed audit log of every execution:</p><ul><li><strong>Status</strong>: Whether the heartbeat completed successfully (<code>ok</code>), encountered an issue (<code>alert</code>), or failed (<code>error</code>).</li><li><strong>Time</strong>: When the heartbeat was triggered.</li><li><strong>Duration</strong>: How long the bot took to process the task.</li><li><strong>Result</strong>: A summary of the bot's action or response during that heartbeat.</li></ul><h3 id="managing-logs" tabindex="-1">Managing Logs <a class="header-anchor" href="#managing-logs" aria-label="Permalink to "Managing Logs""></a></h3><ul><li><strong>Filter by Status</strong>: Quickly find errors or alerts.</li><li><strong>Refresh</strong>: Load the latest log entries.</li><li><strong>Clear Logs</strong>: Remove old heartbeat records to keep the interface clean.</li><li><strong>Load More</strong>: View older history.</li></ul><hr><h2 id="bot-interaction" tabindex="-1">Bot Interaction <a class="header-anchor" href="#bot-interaction" aria-label="Permalink to "Bot Interaction""></a></h2><ul><li>During a heartbeat, the bot receives a special system prompt that it should perform its "routine" tasks.</li><li>The bot can use any of its assigned <strong>Skills</strong> or <strong>MCP tools</strong> during a heartbeat.</li><li>Heartbeat logs provide the "memory" of the bot's autonomous activities.</li></ul>',18)])])}const b=e(n,[["render",i]]);export{c as __pageData,b as default};
|
||||
import{_ as e,o,c as a,ag as r}from"./chunks/framework.DXGyWiRo.js";const c=JSON.parse('{"title":"Bot Heartbeat","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/heartbeat.md","filePath":"getting-started/heartbeat.md","lastUpdated":1772359263000}'),n={name:"getting-started/heartbeat.md"};function i(s,t,l,h,d,g){return o(),a("div",null,[...t[0]||(t[0]=[r('<h1 id="bot-heartbeat" tabindex="-1">Bot Heartbeat <a class="header-anchor" href="#bot-heartbeat" aria-label="Permalink to "Bot Heartbeat""></a></h1><p>The <strong>Heartbeat</strong> feature allows you to schedule periodic tasks for your Bot, enabling it to perform autonomous actions even when you aren't chatting with it.</p><h2 id="concept-scheduled-autonomy" tabindex="-1">Concept: Scheduled Autonomy <a class="header-anchor" href="#concept-scheduled-autonomy" aria-label="Permalink to "Concept: Scheduled Autonomy""></a></h2><p>A <strong>Heartbeat</strong> is a recurring trigger that prompts the bot to "think" and execute its skills or tools at a set interval. This is useful for:</p><ul><li>Periodic status checks</li><li>Automatic data collection</li><li>Cleaning up the filesystem</li><li>Sending scheduled notifications</li></ul><hr><h2 id="configuration" tabindex="-1">Configuration <a class="header-anchor" href="#configuration" aria-label="Permalink to "Configuration""></a></h2><p>Configure the heartbeat from the <strong>Heartbeat</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>Enabled</strong></td><td>Toggle the heartbeat on or off.</td></tr><tr><td><strong>Interval</strong></td><td>How often (in minutes) the heartbeat should trigger. The default is <strong>30 minutes</strong>.</td></tr><tr><td><strong>Model</strong></td><td>The LLM used to execute the heartbeat task. This can be different from the main chat model.</td></tr></tbody></table><hr><h2 id="logs-and-monitoring" tabindex="-1">Logs and Monitoring <a class="header-anchor" href="#logs-and-monitoring" aria-label="Permalink to "Logs and Monitoring""></a></h2><p>The Heartbeat tab provides a detailed audit log of every execution:</p><ul><li><strong>Status</strong>: Whether the heartbeat completed successfully (<code>ok</code>), encountered an issue (<code>alert</code>), or failed (<code>error</code>).</li><li><strong>Time</strong>: When the heartbeat was triggered.</li><li><strong>Duration</strong>: How long the bot took to process the task.</li><li><strong>Result</strong>: A summary of the bot's action or response during that heartbeat.</li></ul><h3 id="managing-logs" tabindex="-1">Managing Logs <a class="header-anchor" href="#managing-logs" aria-label="Permalink to "Managing Logs""></a></h3><ul><li><strong>Filter by Status</strong>: Quickly find errors or alerts.</li><li><strong>Refresh</strong>: Load the latest log entries.</li><li><strong>Clear Logs</strong>: Remove old heartbeat records to keep the interface clean.</li><li><strong>Load More</strong>: View older history.</li></ul><hr><h2 id="bot-interaction" tabindex="-1">Bot Interaction <a class="header-anchor" href="#bot-interaction" aria-label="Permalink to "Bot Interaction""></a></h2><ul><li>During a heartbeat, the bot receives a special system prompt that it should perform its "routine" tasks.</li><li>The bot can use any of its assigned <strong>Skills</strong> or <strong>MCP tools</strong> during a heartbeat.</li><li>Heartbeat logs provide the "memory" of the bot's autonomous activities.</li></ul>',18)])])}const b=e(n,[["render",i]]);export{c as __pageData,b as default};
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{_ as e,o,c as a,ag as r}from"./chunks/framework.CvgP6Fyv.js";const c=JSON.parse('{"title":"Bot Heartbeat","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/heartbeat.md","filePath":"getting-started/heartbeat.md","lastUpdated":1772359263000}'),n={name:"getting-started/heartbeat.md"};function i(s,t,l,h,d,g){return o(),a("div",null,[...t[0]||(t[0]=[r("",18)])])}const b=e(n,[["render",i]]);export{c as __pageData,b as default};
|
||||
import{_ as e,o,c as a,ag as r}from"./chunks/framework.DXGyWiRo.js";const c=JSON.parse('{"title":"Bot Heartbeat","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/heartbeat.md","filePath":"getting-started/heartbeat.md","lastUpdated":1772359263000}'),n={name:"getting-started/heartbeat.md"};function i(s,t,l,h,d,g){return o(),a("div",null,[...t[0]||(t[0]=[r("",18)])])}const b=e(n,[["render",i]]);export{c as __pageData,b as default};
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +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};
|
||||
import{_ as e,o,c as n,ag as r}from"./chunks/framework.DXGyWiRo.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};
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +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};
|
||||
import{_ as t,o,c as r,ag as a}from"./chunks/framework.DXGyWiRo.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};
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +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};
|
||||
import{_ as t,o,c as r,ag as i}from"./chunks/framework.DXGyWiRo.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
-1
@@ -1,4 +1,4 @@
|
||||
import{_ as t,o as a,c as s,ag as n}from"./chunks/framework.CvgP6Fyv.js";const p=JSON.parse('{"title":"Scheduled Tasks","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/schedule.md","filePath":"getting-started/schedule.md","lastUpdated":1774459922000}'),i={name:"getting-started/schedule.md"};function o(r,e,d,l,h,c){return a(),s("div",null,[...e[0]||(e[0]=[n(`<h1 id="scheduled-tasks" tabindex="-1">Scheduled Tasks <a class="header-anchor" href="#scheduled-tasks" aria-label="Permalink to "Scheduled Tasks""></a></h1><p>Scheduled Tasks allow you to automate recurring bot actions using cron expressions. This is useful for sending periodic reports, checking external data, performing maintenance, or triggering any routine task without manual intervention.</p><h2 id="concept-cron-based-automation" tabindex="-1">Concept: Cron-Based Automation <a class="header-anchor" href="#concept-cron-based-automation" aria-label="Permalink to "Concept: Cron-Based Automation""></a></h2><p>A <strong>Schedule</strong> is a cron-triggered rule bound to a specific bot. When a schedule fires, it sends a command to the agent, which executes it using its available tools, skills, and context. The bot can then deliver results to any connected channel.</p><hr><h2 id="schedule-fields" tabindex="-1">Schedule Fields <a class="header-anchor" href="#schedule-fields" aria-label="Permalink to "Schedule Fields""></a></h2><table tabindex="0"><thead><tr><th>Field</th><th>Description</th></tr></thead><tbody><tr><td><strong>Name</strong></td><td>A display name for the task (e.g., "Morning News Summary").</td></tr><tr><td><strong>Description</strong></td><td>A brief explanation of what the task does.</td></tr><tr><td><strong>Pattern</strong></td><td>A cron expression that defines when the task runs (e.g., <code>0 9 * * *</code> for daily at 9:00 AM).</td></tr><tr><td><strong>Command</strong></td><td>The natural-language instruction sent to the agent when the schedule triggers (e.g., "Summarize today's top tech news and send it to the Telegram channel").</td></tr><tr><td><strong>Enabled</strong></td><td>Whether the schedule is currently active.</td></tr><tr><td><strong>Max Calls</strong></td><td>Optional limit on the total number of executions. Leave empty for unlimited.</td></tr><tr><td><strong>Current Calls</strong></td><td>The number of times this schedule has already fired.</td></tr></tbody></table><hr><h2 id="cron-pattern-reference" tabindex="-1">Cron Pattern Reference <a class="header-anchor" href="#cron-pattern-reference" aria-label="Permalink to "Cron Pattern Reference""></a></h2><p>The <code>pattern</code> field uses standard cron syntax with five fields. It is evaluated in the server's configured timezone. By default, Memoh uses <code>UTC</code>, and you can change it with the top-level <code>timezone</code> config value.</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>┌───────────── minute (0–59)</span></span>
|
||||
import{_ as t,o as a,c as s,ag as n}from"./chunks/framework.DXGyWiRo.js";const p=JSON.parse('{"title":"Scheduled Tasks","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/schedule.md","filePath":"getting-started/schedule.md","lastUpdated":1774459922000}'),i={name:"getting-started/schedule.md"};function o(r,e,d,l,h,c){return a(),s("div",null,[...e[0]||(e[0]=[n(`<h1 id="scheduled-tasks" tabindex="-1">Scheduled Tasks <a class="header-anchor" href="#scheduled-tasks" aria-label="Permalink to "Scheduled Tasks""></a></h1><p>Scheduled Tasks allow you to automate recurring bot actions using cron expressions. This is useful for sending periodic reports, checking external data, performing maintenance, or triggering any routine task without manual intervention.</p><h2 id="concept-cron-based-automation" tabindex="-1">Concept: Cron-Based Automation <a class="header-anchor" href="#concept-cron-based-automation" aria-label="Permalink to "Concept: Cron-Based Automation""></a></h2><p>A <strong>Schedule</strong> is a cron-triggered rule bound to a specific bot. When a schedule fires, it sends a command to the agent, which executes it using its available tools, skills, and context. The bot can then deliver results to any connected channel.</p><hr><h2 id="schedule-fields" tabindex="-1">Schedule Fields <a class="header-anchor" href="#schedule-fields" aria-label="Permalink to "Schedule Fields""></a></h2><table tabindex="0"><thead><tr><th>Field</th><th>Description</th></tr></thead><tbody><tr><td><strong>Name</strong></td><td>A display name for the task (e.g., "Morning News Summary").</td></tr><tr><td><strong>Description</strong></td><td>A brief explanation of what the task does.</td></tr><tr><td><strong>Pattern</strong></td><td>A cron expression that defines when the task runs (e.g., <code>0 9 * * *</code> for daily at 9:00 AM).</td></tr><tr><td><strong>Command</strong></td><td>The natural-language instruction sent to the agent when the schedule triggers (e.g., "Summarize today's top tech news and send it to the Telegram channel").</td></tr><tr><td><strong>Enabled</strong></td><td>Whether the schedule is currently active.</td></tr><tr><td><strong>Max Calls</strong></td><td>Optional limit on the total number of executions. Leave empty for unlimited.</td></tr><tr><td><strong>Current Calls</strong></td><td>The number of times this schedule has already fired.</td></tr></tbody></table><hr><h2 id="cron-pattern-reference" tabindex="-1">Cron Pattern Reference <a class="header-anchor" href="#cron-pattern-reference" aria-label="Permalink to "Cron Pattern Reference""></a></h2><p>The <code>pattern</code> field uses standard cron syntax with five fields. It is evaluated in the server's configured timezone. By default, Memoh uses <code>UTC</code>, and you can change it with the top-level <code>timezone</code> config value.</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>┌───────────── minute (0–59)</span></span>
|
||||
<span class="line"><span>│ ┌───────────── hour (0–23)</span></span>
|
||||
<span class="line"><span>│ │ ┌───────────── day of month (1–31)</span></span>
|
||||
<span class="line"><span>│ │ │ ┌───────────── month (1–12)</span></span>
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{_ as t,o as a,c as s,ag as n}from"./chunks/framework.CvgP6Fyv.js";const p=JSON.parse('{"title":"Scheduled Tasks","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/schedule.md","filePath":"getting-started/schedule.md","lastUpdated":1774459922000}'),i={name:"getting-started/schedule.md"};function o(r,e,d,l,h,c){return a(),s("div",null,[...e[0]||(e[0]=[n("",35)])])}const g=t(i,[["render",o]]);export{p as __pageData,g as default};
|
||||
import{_ as t,o as a,c as s,ag as n}from"./chunks/framework.DXGyWiRo.js";const p=JSON.parse('{"title":"Scheduled Tasks","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/schedule.md","filePath":"getting-started/schedule.md","lastUpdated":1774459922000}'),i={name:"getting-started/schedule.md"};function o(r,e,d,l,h,c){return a(),s("div",null,[...e[0]||(e[0]=[n("",35)])])}const g=t(i,[["render",o]]);export{p as __pageData,g as default};
|
||||
+1
-1
@@ -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":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 "Search Providers""></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 "Concept: Real-Time Knowledge""></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 "Supported Search Engines""></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 "Configuration Flow""></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 "1. Adding a Search Provider""></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., "My Brave Search").</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 "2. Managing Providers""></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 "Assigning a Search Provider to a Bot""></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 "Bot Interaction""></a></h2><ul><li>When a user'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.DXGyWiRo.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 "Search Providers""></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 "Concept: Real-Time Knowledge""></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 "Supported Search Engines""></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 "Configuration Flow""></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 "1. Adding a Search Provider""></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., "My Brave Search").</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 "2. Managing Providers""></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 "Assigning a Search Provider to a Bot""></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 "Bot Interaction""></a></h2><ul><li>When a user'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
@@ -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":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};
|
||||
import{_ as r,o as t,c as o,ag as a}from"./chunks/framework.DXGyWiRo.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};
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +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};
|
||||
import{_ as s,o as t,c as n,ag as o}from"./chunks/framework.DXGyWiRo.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};
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
import{_ as s,o as i,c as t,ag as e}from"./chunks/framework.CvgP6Fyv.js";const c=JSON.parse('{"title":"Bot Skills","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/skills.md","filePath":"getting-started/skills.md","lastUpdated":1772359263000}'),l={name:"getting-started/skills.md"};function n(o,a,r,d,h,k){return i(),t("div",null,[...a[0]||(a[0]=[e(`<h1 id="bot-skills" tabindex="-1">Bot Skills <a class="header-anchor" href="#bot-skills" aria-label="Permalink to "Bot Skills""></a></h1><p>Skills are the "personality" and "capabilities" of a Memoh Bot. They define how the bot should behave and what tools it can use.</p><h2 id="concept-skills-as-markdown" tabindex="-1">Concept: Skills as Markdown <a class="header-anchor" href="#concept-skills-as-markdown" aria-label="Permalink to "Concept: Skills as Markdown""></a></h2><p>A <strong>Skill</strong> is represented as a Markdown document with YAML frontmatter. These files are stored within the bot's container and parsed into tools and personality traits.</p><h3 id="example-skill-structure" tabindex="-1">Example Skill Structure <a class="header-anchor" href="#example-skill-structure" aria-label="Permalink to "Example Skill Structure""></a></h3><div class="language-yaml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">---</span></span>
|
||||
import{_ as s,o as i,c as t,ag as e}from"./chunks/framework.DXGyWiRo.js";const c=JSON.parse('{"title":"Bot Skills","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/skills.md","filePath":"getting-started/skills.md","lastUpdated":1772359263000}'),l={name:"getting-started/skills.md"};function n(o,a,r,d,h,k){return i(),t("div",null,[...a[0]||(a[0]=[e(`<h1 id="bot-skills" tabindex="-1">Bot Skills <a class="header-anchor" href="#bot-skills" aria-label="Permalink to "Bot Skills""></a></h1><p>Skills are the "personality" and "capabilities" of a Memoh Bot. They define how the bot should behave and what tools it can use.</p><h2 id="concept-skills-as-markdown" tabindex="-1">Concept: Skills as Markdown <a class="header-anchor" href="#concept-skills-as-markdown" aria-label="Permalink to "Concept: Skills as Markdown""></a></h2><p>A <strong>Skill</strong> is represented as a Markdown document with YAML frontmatter. These files are stored within the bot's container and parsed into tools and personality traits.</p><h3 id="example-skill-structure" tabindex="-1">Example Skill Structure <a class="header-anchor" href="#example-skill-structure" aria-label="Permalink to "Example Skill Structure""></a></h3><div class="language-yaml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">---</span></span>
|
||||
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">coder-skill</span></span>
|
||||
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">description</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">Enables advanced coding capabilities and tool use.</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">---</span></span>
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{_ as s,o as i,c as t,ag as e}from"./chunks/framework.CvgP6Fyv.js";const c=JSON.parse('{"title":"Bot Skills","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/skills.md","filePath":"getting-started/skills.md","lastUpdated":1772359263000}'),l={name:"getting-started/skills.md"};function n(o,a,r,d,h,k){return i(),t("div",null,[...a[0]||(a[0]=[e("",16)])])}const g=s(l,[["render",n]]);export{c as __pageData,g as default};
|
||||
import{_ as s,o as i,c as t,ag as e}from"./chunks/framework.DXGyWiRo.js";const c=JSON.parse('{"title":"Bot Skills","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/skills.md","filePath":"getting-started/skills.md","lastUpdated":1772359263000}'),l={name:"getting-started/skills.md"};function n(o,a,r,d,h,k){return i(),t("div",null,[...a[0]||(a[0]=[e("",16)])])}const g=s(l,[["render",n]]);export{c as __pageData,g as default};
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +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};
|
||||
import{_ as t,o as d,c as a,ag as o}from"./chunks/framework.DXGyWiRo.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 +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 "Memoh Documentation""></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 "Documentation""></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};
|
||||
import{_ as t,o as a,c as o,ag as n}from"./chunks/framework.DXGyWiRo.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 "Memoh Documentation""></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 "Documentation""></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 +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};
|
||||
import{_ as t,o as a,c as o,ag as n}from"./chunks/framework.DXGyWiRo.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};
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +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};
|
||||
import{_ as e,o as i,c as t,ag as a}from"./chunks/framework.DXGyWiRo.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};
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -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":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};
|
||||
import{_ as t,o as i,c as a,ag as s}from"./chunks/framework.DXGyWiRo.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
-1
@@ -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":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 "Memory Providers""></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 "Available Providers""></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 "Basic Flow""></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's <strong>General</strong> tab and assign that provider in <strong>Memory Provider</strong>.</li><li>Manage actual memories from the bot'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 "Next Steps""></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};
|
||||
import{_ as r,o,c as a,ag as i}from"./chunks/framework.DXGyWiRo.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 "Memory Providers""></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 "Available Providers""></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 "Basic Flow""></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's <strong>General</strong> tab and assign that provider in <strong>Memory Provider</strong>.</li><li>Manage actual memories from the bot'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 "Next Steps""></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
@@ -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":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};
|
||||
import{_ as r,o,c as a,ag as i}from"./chunks/framework.DXGyWiRo.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
@@ -1 +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('<h1 id="mem0-memory-provider" tabindex="-1">Mem0 Memory Provider <a class="header-anchor" href="#mem0-memory-provider" aria-label="Permalink to "Mem0 Memory Provider""></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 "Creating a Mem0 Provider""></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 "Configuring a Mem0 Provider""></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 "Assigning a Mem0 Provider to a Bot""></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 "Usage""></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};
|
||||
import{_ as r,o as t,c as o,ag as a}from"./chunks/framework.DXGyWiRo.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 "Mem0 Memory Provider""></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 "Creating a Mem0 Provider""></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 "Configuring a Mem0 Provider""></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 "Assigning a Mem0 Provider to a Bot""></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 "Usage""></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};
|
||||
+1
-1
@@ -1 +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};
|
||||
import{_ as r,o as t,c as o,ag as a}from"./chunks/framework.DXGyWiRo.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
-1
@@ -1 +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('<h1 id="openviking-memory-provider" tabindex="-1">OpenViking Memory Provider <a class="header-anchor" href="#openviking-memory-provider" aria-label="Permalink to "OpenViking Memory Provider""></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 "Creating an OpenViking Provider""></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 "Configuring an OpenViking Provider""></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 "Assigning an OpenViking Provider to a Bot""></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 "Usage""></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.DXGyWiRo.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 "OpenViking Memory Provider""></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 "Creating an OpenViking Provider""></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 "Configuring an OpenViking Provider""></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 "Assigning an OpenViking Provider to a Bot""></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 "Usage""></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};
|
||||
+1
-1
@@ -1 +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};
|
||||
import{_ as i,o as r,c as o,ag as t}from"./chunks/framework.DXGyWiRo.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};
|
||||
File diff suppressed because one or more lines are too long
@@ -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":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 "Edge TTS""></a></h1><p>Edge TTS uses Microsoft Edge'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 "Creating an Edge TTS Provider""></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 "Configuring the Model""></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 "Assigning to a Bot""></a></h2><ol><li>Open a bot'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 "Testing""></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};
|
||||
import{_ as t,o,c as a,ag as d}from"./chunks/framework.DXGyWiRo.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 "Edge TTS""></a></h1><p>Edge TTS uses Microsoft Edge'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 "Creating an Edge TTS Provider""></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 "Configuring the Model""></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 "Assigning to a Bot""></a></h2><ol><li>Open a bot'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 "Testing""></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};
|
||||
+1
-1
@@ -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":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};
|
||||
import{_ as t,o,c as a,ag as d}from"./chunks/framework.DXGyWiRo.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
@@ -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":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 "TTS Providers""></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 "Basic Flow""></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'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'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 "Available Providers""></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'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 "Next Steps""></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.DXGyWiRo.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 "TTS Providers""></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 "Basic Flow""></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'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'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 "Available Providers""></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'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 "Next Steps""></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
@@ -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":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};
|
||||
import{_ as t,o as r,c as o,ag as a}from"./chunks/framework.DXGyWiRo.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};
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{_ as o,o as e,c as a,ag as i}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"账号模型与绑定","description":"","frontmatter":{},"headers":[],"relativePath":"zh/concepts/identity-and-binding.md","filePath":"zh/concepts/identity-and-binding.md","lastUpdated":1770887583000}'),l={name:"zh/concepts/identity-and-binding.md"};function n(r,t,d,s,c,h){return e(),a("div",null,[...t[0]||(t[0]=[i('<h1 id="账号模型与绑定" tabindex="-1">账号模型与绑定 <a class="header-anchor" href="#账号模型与绑定" aria-label="Permalink to "账号模型与绑定""></a></h1><h2 id="账号模型" tabindex="-1">账号模型 <a class="header-anchor" href="#账号模型" aria-label="Permalink to "账号模型""></a></h2><p>Memoh 将平台账号与系统账号视为两类不同实体:</p><ul><li><strong>平台账号(<code>ChannelIdentity</code>)</strong> 是用户在外部接入平台上的账号(例如飞书账号),不是 Memoh 内部账号。</li><li><strong>系统账号(<code>User</code>)</strong> 是 Memoh 系统内账号。</li></ul><p>平台账号在初始阶段可以不绑定系统账号。<br><code>bind</code> 的职责是完成这两类账号的关联。</p><h2 id="接入平台与-bot" tabindex="-1">接入平台与 Bot <a class="header-anchor" href="#接入平台与-bot" aria-label="Permalink to "接入平台与 Bot""></a></h2><ul><li><strong>接入平台(<code>channel</code>)</strong> 是入站消息来源。</li><li><strong>Bot</strong> 是系统内的授权与资源边界。</li></ul><p>Bot 由系统账号管理,入站消息由平台账号产生。</p><h2 id="为什么账号绑定是账号作用域" tabindex="-1">为什么账号绑定是账号作用域 <a class="header-anchor" href="#为什么账号绑定是账号作用域" aria-label="Permalink to "为什么账号绑定是账号作用域""></a></h2><p>账号绑定的目标是建立账号归属关系,而不是直接发放 bot 资源权限:</p><ul><li>它只负责平台账号与系统账号的绑定;</li><li>不把账号绑定与成员管理语义耦合在一起;</li><li>让 bot 访问控制保持独立、可演进。</li></ul><h2 id="账号绑定流程-当前共识" tabindex="-1">账号绑定流程(当前共识) <a class="header-anchor" href="#账号绑定流程-当前共识" aria-label="Permalink to "账号绑定流程(当前共识)""></a></h2><ol><li>用户以自己的系统账号申请 bind code;</li><li>平台账号在支持的接入平台会话中发送 code;</li><li>系统校验 code,完成平台账号到系统账号的绑定;</li><li>bot 成员与授权由独立流程处理。</li></ol><h2 id="bot-类型语义" tabindex="-1">Bot 类型语义 <a class="header-anchor" href="#bot-类型语义" aria-label="Permalink to "Bot 类型语义""></a></h2><ul><li><strong>Public bot</strong>:支持成员协作语义。</li><li><strong>Personal bot</strong>:语义上应为单 owner,不应依赖成员机制。</li></ul><blockquote><p>注:本文档记录的是产品语义与共识方向。<br> 部分运行时细节仍可能处于收敛阶段。</p></blockquote>',16)])])}const p=o(l,[["render",n]]);export{u as __pageData,p as default};
|
||||
import{_ as o,o as e,c as a,ag as i}from"./chunks/framework.DXGyWiRo.js";const u=JSON.parse('{"title":"账号模型与绑定","description":"","frontmatter":{},"headers":[],"relativePath":"zh/concepts/identity-and-binding.md","filePath":"zh/concepts/identity-and-binding.md","lastUpdated":1770887583000}'),l={name:"zh/concepts/identity-and-binding.md"};function n(r,t,d,s,c,h){return e(),a("div",null,[...t[0]||(t[0]=[i('<h1 id="账号模型与绑定" tabindex="-1">账号模型与绑定 <a class="header-anchor" href="#账号模型与绑定" aria-label="Permalink to "账号模型与绑定""></a></h1><h2 id="账号模型" tabindex="-1">账号模型 <a class="header-anchor" href="#账号模型" aria-label="Permalink to "账号模型""></a></h2><p>Memoh 将平台账号与系统账号视为两类不同实体:</p><ul><li><strong>平台账号(<code>ChannelIdentity</code>)</strong> 是用户在外部接入平台上的账号(例如飞书账号),不是 Memoh 内部账号。</li><li><strong>系统账号(<code>User</code>)</strong> 是 Memoh 系统内账号。</li></ul><p>平台账号在初始阶段可以不绑定系统账号。<br><code>bind</code> 的职责是完成这两类账号的关联。</p><h2 id="接入平台与-bot" tabindex="-1">接入平台与 Bot <a class="header-anchor" href="#接入平台与-bot" aria-label="Permalink to "接入平台与 Bot""></a></h2><ul><li><strong>接入平台(<code>channel</code>)</strong> 是入站消息来源。</li><li><strong>Bot</strong> 是系统内的授权与资源边界。</li></ul><p>Bot 由系统账号管理,入站消息由平台账号产生。</p><h2 id="为什么账号绑定是账号作用域" tabindex="-1">为什么账号绑定是账号作用域 <a class="header-anchor" href="#为什么账号绑定是账号作用域" aria-label="Permalink to "为什么账号绑定是账号作用域""></a></h2><p>账号绑定的目标是建立账号归属关系,而不是直接发放 bot 资源权限:</p><ul><li>它只负责平台账号与系统账号的绑定;</li><li>不把账号绑定与成员管理语义耦合在一起;</li><li>让 bot 访问控制保持独立、可演进。</li></ul><h2 id="账号绑定流程-当前共识" tabindex="-1">账号绑定流程(当前共识) <a class="header-anchor" href="#账号绑定流程-当前共识" aria-label="Permalink to "账号绑定流程(当前共识)""></a></h2><ol><li>用户以自己的系统账号申请 bind code;</li><li>平台账号在支持的接入平台会话中发送 code;</li><li>系统校验 code,完成平台账号到系统账号的绑定;</li><li>bot 成员与授权由独立流程处理。</li></ol><h2 id="bot-类型语义" tabindex="-1">Bot 类型语义 <a class="header-anchor" href="#bot-类型语义" aria-label="Permalink to "Bot 类型语义""></a></h2><ul><li><strong>Public bot</strong>:支持成员协作语义。</li><li><strong>Personal bot</strong>:语义上应为单 owner,不应依赖成员机制。</li></ul><blockquote><p>注:本文档记录的是产品语义与共识方向。<br> 部分运行时细节仍可能处于收敛阶段。</p></blockquote>',16)])])}const p=o(l,[["render",n]]);export{u as __pageData,p as default};
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{_ as o,o as e,c as a,ag as i}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"账号模型与绑定","description":"","frontmatter":{},"headers":[],"relativePath":"zh/concepts/identity-and-binding.md","filePath":"zh/concepts/identity-and-binding.md","lastUpdated":1770887583000}'),l={name:"zh/concepts/identity-and-binding.md"};function n(r,t,d,s,c,h){return e(),a("div",null,[...t[0]||(t[0]=[i("",16)])])}const p=o(l,[["render",n]]);export{u as __pageData,p as default};
|
||||
import{_ as o,o as e,c as a,ag as i}from"./chunks/framework.DXGyWiRo.js";const u=JSON.parse('{"title":"账号模型与绑定","description":"","frontmatter":{},"headers":[],"relativePath":"zh/concepts/identity-and-binding.md","filePath":"zh/concepts/identity-and-binding.md","lastUpdated":1770887583000}'),l={name:"zh/concepts/identity-and-binding.md"};function n(r,t,d,s,c,h){return e(),a("div",null,[...t[0]||(t[0]=[i("",16)])])}const p=o(l,[["render",n]]);export{u as __pageData,p as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as a,o as t,c as o,ag as n}from"./chunks/framework.CvgP6Fyv.js";const _=JSON.parse('{"title":"核心概念","description":"","frontmatter":{},"headers":[],"relativePath":"zh/concepts/index.md","filePath":"zh/concepts/index.md","lastUpdated":1770887583000}'),r={name:"zh/concepts/index.md"};function i(l,e,d,s,c,h){return t(),o("div",null,[...e[0]||(e[0]=[n('<h1 id="核心概念" tabindex="-1">核心概念 <a class="header-anchor" href="#核心概念" aria-label="Permalink to "核心概念""></a></h1><p>本章节用于定义 Memoh 的核心账号与访问概念。</p><h2 id="概念图" tabindex="-1">概念图 <a class="header-anchor" href="#概念图" aria-label="Permalink to "概念图""></a></h2><ul><li><strong>系统账号(<code>User</code>)</strong>:Memoh 系统内账号。</li><li><strong>平台账号(<code>ChannelIdentity</code>)</strong>:用户在外部接入平台上的账号,不是 Memoh 系统内账号(例如用户的飞书账号)。</li><li><strong>Bot</strong>:由系统账号管理的资源与访问边界。</li><li><strong>账号绑定(<code>bind</code>)</strong>:把平台账号关联到系统账号的过程。</li></ul><h2 id="为什么重要" tabindex="-1">为什么重要 <a class="header-anchor" href="#为什么重要" aria-label="Permalink to "为什么重要""></a></h2><p>Memoh 需要同时处理外部接入平台消息与系统内权限控制。<br> 因此我们明确区分平台账号与系统账号,并将 bot 授权与账号绑定解耦。</p><p>术语说明:文档中的“平台账号”统一指用户在对应平台上的真实账号(如飞书账号),不指本项目内部账号。</p><h2 id="本章内容" tabindex="-1">本章内容 <a class="header-anchor" href="#本章内容" aria-label="Permalink to "本章内容""></a></h2><ul><li><a href="/zh/concepts/identity-and-binding.html">账号模型与绑定</a></li></ul>',9)])])}const m=a(r,[["render",i]]);export{_ as __pageData,m as default};
|
||||
import{_ as a,o as t,c as o,ag as n}from"./chunks/framework.DXGyWiRo.js";const _=JSON.parse('{"title":"核心概念","description":"","frontmatter":{},"headers":[],"relativePath":"zh/concepts/index.md","filePath":"zh/concepts/index.md","lastUpdated":1770887583000}'),r={name:"zh/concepts/index.md"};function i(l,e,d,s,c,h){return t(),o("div",null,[...e[0]||(e[0]=[n('<h1 id="核心概念" tabindex="-1">核心概念 <a class="header-anchor" href="#核心概念" aria-label="Permalink to "核心概念""></a></h1><p>本章节用于定义 Memoh 的核心账号与访问概念。</p><h2 id="概念图" tabindex="-1">概念图 <a class="header-anchor" href="#概念图" aria-label="Permalink to "概念图""></a></h2><ul><li><strong>系统账号(<code>User</code>)</strong>:Memoh 系统内账号。</li><li><strong>平台账号(<code>ChannelIdentity</code>)</strong>:用户在外部接入平台上的账号,不是 Memoh 系统内账号(例如用户的飞书账号)。</li><li><strong>Bot</strong>:由系统账号管理的资源与访问边界。</li><li><strong>账号绑定(<code>bind</code>)</strong>:把平台账号关联到系统账号的过程。</li></ul><h2 id="为什么重要" tabindex="-1">为什么重要 <a class="header-anchor" href="#为什么重要" aria-label="Permalink to "为什么重要""></a></h2><p>Memoh 需要同时处理外部接入平台消息与系统内权限控制。<br> 因此我们明确区分平台账号与系统账号,并将 bot 授权与账号绑定解耦。</p><p>术语说明:文档中的“平台账号”统一指用户在对应平台上的真实账号(如飞书账号),不指本项目内部账号。</p><h2 id="本章内容" tabindex="-1">本章内容 <a class="header-anchor" href="#本章内容" aria-label="Permalink to "本章内容""></a></h2><ul><li><a href="/zh/concepts/identity-and-binding.html">账号模型与绑定</a></li></ul>',9)])])}const m=a(r,[["render",i]]);export{_ as __pageData,m as default};
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{_ as a,o as t,c as o,ag as n}from"./chunks/framework.CvgP6Fyv.js";const _=JSON.parse('{"title":"核心概念","description":"","frontmatter":{},"headers":[],"relativePath":"zh/concepts/index.md","filePath":"zh/concepts/index.md","lastUpdated":1770887583000}'),r={name:"zh/concepts/index.md"};function i(l,e,d,s,c,h){return t(),o("div",null,[...e[0]||(e[0]=[n("",9)])])}const m=a(r,[["render",i]]);export{_ as __pageData,m as default};
|
||||
import{_ as a,o as t,c as o,ag as n}from"./chunks/framework.DXGyWiRo.js";const _=JSON.parse('{"title":"核心概念","description":"","frontmatter":{},"headers":[],"relativePath":"zh/concepts/index.md","filePath":"zh/concepts/index.md","lastUpdated":1770887583000}'),r={name:"zh/concepts/index.md"};function i(l,e,d,s,c,h){return t(),o("div",null,[...e[0]||(e[0]=[n("",9)])])}const m=a(r,[["render",i]]);export{_ as __pageData,m as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as a,o as t,c as l,ag as i}from"./chunks/framework.CvgP6Fyv.js";const _=JSON.parse('{"title":"Memoh 文档","description":"","frontmatter":{},"headers":[],"relativePath":"zh/index.md","filePath":"zh/index.md","lastUpdated":1770887583000}'),o={name:"zh/index.md"};function r(h,e,n,d,s,m){return t(),l("div",null,[...e[0]||(e[0]=[i('<h1 id="memoh-文档" tabindex="-1">Memoh 文档 <a class="header-anchor" href="#memoh-文档" aria-label="Permalink to "Memoh 文档""></a></h1><p>Memoh 是一个多成员、长记忆、容器化的 AI Agent 系统。</p><h2 id="文档章节" tabindex="-1">文档章节 <a class="header-anchor" href="#文档章节" aria-label="Permalink to "文档章节""></a></h2><ul><li><a href="/getting-started.html">快速开始</a></li><li><a href="/zh/concepts/">核心概念</a></li></ul><h2 id="面向文档贡献者" tabindex="-1">面向文档贡献者 <a class="header-anchor" href="#面向文档贡献者" aria-label="Permalink to "面向文档贡献者""></a></h2><ul><li><a href="/zh/style/terminology.html">术语规范</a></li></ul><h2 id="当前维护范围" tabindex="-1">当前维护范围 <a class="header-anchor" href="#当前维护范围" aria-label="Permalink to "当前维护范围""></a></h2><p>当前文档先聚焦账号语义与访问控制:</p><ul><li>区分系统账号与平台账号</li><li>解释为什么账号绑定是账号作用域</li><li>说明账号绑定与 bot 访问控制之间的关系</li></ul><p>说明:“平台账号”指用户在外部平台上的真实账号(例如飞书账号),不是 Memoh 系统账号。</p>',10)])])}const p=a(o,[["render",r]]);export{_ as __pageData,p as default};
|
||||
import{_ as a,o as t,c as l,ag as i}from"./chunks/framework.DXGyWiRo.js";const _=JSON.parse('{"title":"Memoh 文档","description":"","frontmatter":{},"headers":[],"relativePath":"zh/index.md","filePath":"zh/index.md","lastUpdated":1770887583000}'),o={name:"zh/index.md"};function r(h,e,n,d,s,m){return t(),l("div",null,[...e[0]||(e[0]=[i('<h1 id="memoh-文档" tabindex="-1">Memoh 文档 <a class="header-anchor" href="#memoh-文档" aria-label="Permalink to "Memoh 文档""></a></h1><p>Memoh 是一个多成员、长记忆、容器化的 AI Agent 系统。</p><h2 id="文档章节" tabindex="-1">文档章节 <a class="header-anchor" href="#文档章节" aria-label="Permalink to "文档章节""></a></h2><ul><li><a href="/getting-started.html">快速开始</a></li><li><a href="/zh/concepts/">核心概念</a></li></ul><h2 id="面向文档贡献者" tabindex="-1">面向文档贡献者 <a class="header-anchor" href="#面向文档贡献者" aria-label="Permalink to "面向文档贡献者""></a></h2><ul><li><a href="/zh/style/terminology.html">术语规范</a></li></ul><h2 id="当前维护范围" tabindex="-1">当前维护范围 <a class="header-anchor" href="#当前维护范围" aria-label="Permalink to "当前维护范围""></a></h2><p>当前文档先聚焦账号语义与访问控制:</p><ul><li>区分系统账号与平台账号</li><li>解释为什么账号绑定是账号作用域</li><li>说明账号绑定与 bot 访问控制之间的关系</li></ul><p>说明:“平台账号”指用户在外部平台上的真实账号(例如飞书账号),不是 Memoh 系统账号。</p>',10)])])}const p=a(o,[["render",r]]);export{_ as __pageData,p as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as a,o as t,c as l,ag as i}from"./chunks/framework.CvgP6Fyv.js";const _=JSON.parse('{"title":"Memoh 文档","description":"","frontmatter":{},"headers":[],"relativePath":"zh/index.md","filePath":"zh/index.md","lastUpdated":1770887583000}'),o={name:"zh/index.md"};function r(h,e,n,d,s,m){return t(),l("div",null,[...e[0]||(e[0]=[i("",10)])])}const p=a(o,[["render",r]]);export{_ as __pageData,p as default};
|
||||
import{_ as a,o as t,c as l,ag as i}from"./chunks/framework.DXGyWiRo.js";const _=JSON.parse('{"title":"Memoh 文档","description":"","frontmatter":{},"headers":[],"relativePath":"zh/index.md","filePath":"zh/index.md","lastUpdated":1770887583000}'),o={name:"zh/index.md"};function r(h,e,n,d,s,m){return t(),l("div",null,[...e[0]||(e[0]=[i("",10)])])}const p=a(o,[["render",r]]);export{_ as __pageData,p as default};
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{_ as e,o as l,c as t,ag as a}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"术语规范","description":"","frontmatter":{},"headers":[],"relativePath":"zh/style/terminology.md","filePath":"zh/style/terminology.md","lastUpdated":1770887583000}'),i={name:"zh/style/terminology.md"};function r(n,o,s,d,c,h){return l(),t("div",null,[...o[0]||(o[0]=[a('<h1 id="术语规范" tabindex="-1">术语规范 <a class="header-anchor" href="#术语规范" aria-label="Permalink to "术语规范""></a></h1><blockquote><p>适用对象:文档编写者与维护者。 本页用于统一写作语义,不是面向最终用户的功能说明。</p></blockquote><h2 id="规范术语" tabindex="-1">规范术语 <a class="header-anchor" href="#规范术语" aria-label="Permalink to "规范术语""></a></h2><ul><li><strong>系统账号(<code>User</code>)</strong>:Memoh 系统内账号。</li><li><strong>平台账号(<code>ChannelIdentity</code>)</strong>:用户在外部接入平台上的账号,不是 Memoh 内账号。</li><li><strong>接入平台(<code>channel</code>)</strong>:承载入站消息的外部平台。</li><li><strong>账号绑定(<code>bind</code>)</strong>:把平台账号关联到系统账号的过程。</li><li><strong>绑定码(Bind Code)</strong>:用于账号绑定的一次性代码。</li><li><strong>Bot</strong>:由系统账号管理的资源与授权边界。</li></ul><h2 id="推荐写法" tabindex="-1">推荐写法 <a class="header-anchor" href="#推荐写法" aria-label="Permalink to "推荐写法""></a></h2><ul><li>面向产品语义时,优先写 <strong>“平台账号”</strong>,不要直接写 actor。</li><li>描述业务行为时,优先写 <strong>“接入平台”</strong>,不要直接写 channel。</li><li>首次出现保留技术别名,后续可只用中文术语: <ul><li>平台账号(<code>ChannelIdentity</code>)</li><li>系统账号(<code>User</code>)</li><li>账号绑定(<code>bind</code>)</li></ul></li></ul><h2 id="禁用或不推荐写法" tabindex="-1">禁用或不推荐写法 <a class="header-anchor" href="#禁用或不推荐写法" aria-label="Permalink to "禁用或不推荐写法""></a></h2><ul><li>在概念文档中直接使用 <strong>actor</strong>(除非明确引用代码符号)。</li><li>使用含糊表述如 <strong>“平台用户”</strong>(未区分系统账号与平台账号)。</li><li>写出“平台账号是 Memoh 内部账号”这类错误语义。</li></ul><h2 id="示例" tabindex="-1">示例 <a class="header-anchor" href="#示例" aria-label="Permalink to "示例""></a></h2><ul><li>正确:<strong>“平台账号是用户在飞书上的账号,不是 Memoh 系统账号。”</strong></li><li>正确:<strong>“账号绑定用于把平台账号关联到系统账号。”</strong></li><li>错误:<strong>“Actor 是 Memoh 里的用户。”</strong></li></ul><h2 id="自检清单" tabindex="-1">自检清单 <a class="header-anchor" href="#自检清单" aria-label="Permalink to "自检清单""></a></h2><ul><li>是否明确区分了系统账号与平台账号?</li><li>叙述中是否将 channel 表述为接入平台?</li><li>是否仅在首处保留技术别名?</li></ul>',12)])])}const m=e(i,[["render",r]]);export{u as __pageData,m as default};
|
||||
import{_ as e,o as l,c as t,ag as a}from"./chunks/framework.DXGyWiRo.js";const u=JSON.parse('{"title":"术语规范","description":"","frontmatter":{},"headers":[],"relativePath":"zh/style/terminology.md","filePath":"zh/style/terminology.md","lastUpdated":1770887583000}'),i={name:"zh/style/terminology.md"};function r(n,o,s,d,c,h){return l(),t("div",null,[...o[0]||(o[0]=[a('<h1 id="术语规范" tabindex="-1">术语规范 <a class="header-anchor" href="#术语规范" aria-label="Permalink to "术语规范""></a></h1><blockquote><p>适用对象:文档编写者与维护者。 本页用于统一写作语义,不是面向最终用户的功能说明。</p></blockquote><h2 id="规范术语" tabindex="-1">规范术语 <a class="header-anchor" href="#规范术语" aria-label="Permalink to "规范术语""></a></h2><ul><li><strong>系统账号(<code>User</code>)</strong>:Memoh 系统内账号。</li><li><strong>平台账号(<code>ChannelIdentity</code>)</strong>:用户在外部接入平台上的账号,不是 Memoh 内账号。</li><li><strong>接入平台(<code>channel</code>)</strong>:承载入站消息的外部平台。</li><li><strong>账号绑定(<code>bind</code>)</strong>:把平台账号关联到系统账号的过程。</li><li><strong>绑定码(Bind Code)</strong>:用于账号绑定的一次性代码。</li><li><strong>Bot</strong>:由系统账号管理的资源与授权边界。</li></ul><h2 id="推荐写法" tabindex="-1">推荐写法 <a class="header-anchor" href="#推荐写法" aria-label="Permalink to "推荐写法""></a></h2><ul><li>面向产品语义时,优先写 <strong>“平台账号”</strong>,不要直接写 actor。</li><li>描述业务行为时,优先写 <strong>“接入平台”</strong>,不要直接写 channel。</li><li>首次出现保留技术别名,后续可只用中文术语: <ul><li>平台账号(<code>ChannelIdentity</code>)</li><li>系统账号(<code>User</code>)</li><li>账号绑定(<code>bind</code>)</li></ul></li></ul><h2 id="禁用或不推荐写法" tabindex="-1">禁用或不推荐写法 <a class="header-anchor" href="#禁用或不推荐写法" aria-label="Permalink to "禁用或不推荐写法""></a></h2><ul><li>在概念文档中直接使用 <strong>actor</strong>(除非明确引用代码符号)。</li><li>使用含糊表述如 <strong>“平台用户”</strong>(未区分系统账号与平台账号)。</li><li>写出“平台账号是 Memoh 内部账号”这类错误语义。</li></ul><h2 id="示例" tabindex="-1">示例 <a class="header-anchor" href="#示例" aria-label="Permalink to "示例""></a></h2><ul><li>正确:<strong>“平台账号是用户在飞书上的账号,不是 Memoh 系统账号。”</strong></li><li>正确:<strong>“账号绑定用于把平台账号关联到系统账号。”</strong></li><li>错误:<strong>“Actor 是 Memoh 里的用户。”</strong></li></ul><h2 id="自检清单" tabindex="-1">自检清单 <a class="header-anchor" href="#自检清单" aria-label="Permalink to "自检清单""></a></h2><ul><li>是否明确区分了系统账号与平台账号?</li><li>叙述中是否将 channel 表述为接入平台?</li><li>是否仅在首处保留技术别名?</li></ul>',12)])])}const m=e(i,[["render",r]]);export{u as __pageData,m as default};
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{_ as e,o as l,c as t,ag as a}from"./chunks/framework.CvgP6Fyv.js";const u=JSON.parse('{"title":"术语规范","description":"","frontmatter":{},"headers":[],"relativePath":"zh/style/terminology.md","filePath":"zh/style/terminology.md","lastUpdated":1770887583000}'),i={name:"zh/style/terminology.md"};function r(n,o,s,d,c,h){return l(),t("div",null,[...o[0]||(o[0]=[a("",12)])])}const m=e(i,[["render",r]]);export{u as __pageData,m as default};
|
||||
import{_ as e,o as l,c as t,ag as a}from"./chunks/framework.DXGyWiRo.js";const u=JSON.parse('{"title":"术语规范","description":"","frontmatter":{},"headers":[],"relativePath":"zh/style/terminology.md","filePath":"zh/style/terminology.md","lastUpdated":1770887583000}'),i={name:"zh/style/terminology.md"};function r(n,o,s,d,c,h){return l(),t("div",null,[...o[0]||(o[0]=[a("",12)])])}const m=e(i,[["render",r]]);export{u as __pageData,m as default};
|
||||
File diff suppressed because one or more lines are too long
+7
-7
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
+7
-7
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+7
-7
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+7
-7
File diff suppressed because one or more lines are too long
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
Reference in New Issue
Block a user