From 32228d4e5bc6a391a6cea1b10a55f781ff1adb58 Mon Sep 17 00:00:00 2001 From: ZhaoYongChao <16632301768@163.com> Date: Fri, 24 May 2024 22:59:15 +0800 Subject: [PATCH 1/7] feat: email registration Signed-off-by: ZhaoYongChao <16632301768@163.com> --- README.md | 37 +++++------ .../quick-start/components/CreateCallgent.tsx | 36 +++++++--- docs/quick-start/components/email.tsx | 5 +- docs/quick-start/components/index.module.css | 65 ++++++++++++++----- src/store/slices/userSlice.ts | 9 +-- src/store/thunk/user/index.ts | 19 +++++- src/util/axios/index.ts | 9 +-- 7 files changed, 116 insertions(+), 64 deletions(-) diff --git a/README.md b/README.md index 90b9b50..9df0b5f 100644 --- a/README.md +++ b/README.md @@ -25,31 +25,30 @@ This is the portal website of [Callgent](https://callgent.com), gratefully forke 1. "node": ">=18.17.0" 2. checkout the repository: - ```bash - - ``` - + ```bash + + ``` + 3. rename `.env.example` to `.env` 4. Start the Service - - Development Environment + - Development Environment - ```bash - # Modify the API_SITE_URL on line 7 of your package.json file to set your development server. - npm i -g pnpm - pnpm install - pnpm run start - ``` + ```bash + # Modify the API_SITE_URL on line 7 of your package.json file to set your development server. + npm i -g pnpm + pnpm install + pnpm run start + ``` - - Production Environment + - Production Environment - ```bash - # Modify the API_SITE_URL in your .env file to set your production environment server. - pnpm install - pnpm run build - pnpm run serve - ``` - + ```bash + # Modify the API_SITE_URL in your .env file to set your production environment server. + pnpm install + pnpm run build + pnpm run serve + ``` ## Contributing diff --git a/docs/quick-start/components/CreateCallgent.tsx b/docs/quick-start/components/CreateCallgent.tsx index cecee35..1ee11ec 100644 --- a/docs/quick-start/components/CreateCallgent.tsx +++ b/docs/quick-start/components/CreateCallgent.tsx @@ -10,17 +10,17 @@ const CreateCallgent = () => { if (!isBrowser) { return null; } - const { fetchCreateCallgent } = require('@site/src/store/thunk'); + const { fetchCreateCallgent, sendConfirmEmail } = require('@site/src/store/thunk'); const { setStatus } = require('@site/src/store/slices/userSlice'); const { siteConfig } = useDocusaurusContext(); - // 控制显示隐藏 + const myElementRef = useRef(null); const [state, setState] = useState(false) const { status, token } = useSelector( (state: DocType) => state.user ); const dispatch = useDispatch(); - // 表单提交 + const [lastSubmitTime, setLastSubmitTime] = useState(0); const onFormSubmit = (event: React.FormEvent) => { event.preventDefault(); @@ -29,7 +29,7 @@ const CreateCallgent = () => { return; } if (!token) { - myElementRef.current.style.display = 'block'; // 显示模态框 + myElementRef.current.style.display = 'block'; return; } const formData = new FormData(event.currentTarget); @@ -47,15 +47,33 @@ const CreateCallgent = () => { const handleContentClick = (event: { stopPropagation: () => void; }) => { event.stopPropagation(); }; + const onEmailSubmit = (event: React.FormEvent) => { + event.preventDefault(); + const formData = new FormData(event.currentTarget); + const email = formData.get('email') as string; + dispatch(sendConfirmEmail({ email })) + .then((req) => { + if (req.payload !== "Failed to send confirmation email") { + closeModel(); + } + }); + }; return ( <>
-

- Please  - Sign In -  first. -

+
onEmailSubmit(e)} className={styles.resForm}> + + +
diff --git a/docs/quick-start/components/email.tsx b/docs/quick-start/components/email.tsx index 65bb6c7..be956d7 100644 --- a/docs/quick-start/components/email.tsx +++ b/docs/quick-start/components/email.tsx @@ -4,7 +4,7 @@ import { DocType } from '@site/src/types/user'; import React, { useEffect, useRef, useState } from 'react'; import { useSelector, useDispatch } from 'react-redux'; const Email = () => { - // 打包之后必须使用@docusaurus/useIsBrowser来限制浏览器渲染 + const isBrowser = useIsBrowser(); if (!isBrowser) { return null; @@ -17,12 +17,11 @@ const Email = () => { useEffect(() => { // dispatch(setCallgent()); }, []) - // 邮件操作 + // Mail Operations const pushRouter = () => { if (callgent?.uuid) { window.location.href = `mailto:callgent+${callgent.uuid}@c.callgent.com`; } else { - // 元素在mdx中,无法使用ref const element = document.querySelector('#create-the-callgent'); if (element instanceof HTMLElement) { window.scrollTo({ diff --git a/docs/quick-start/components/index.module.css b/docs/quick-start/components/index.module.css index 73e3eab..71ae50c 100644 --- a/docs/quick-start/components/index.module.css +++ b/docs/quick-start/components/index.module.css @@ -1,11 +1,17 @@ /* CreateCallgent */ -.form{ +.form { display: flex; flex-wrap: wrap; } + @keyframes fadeInBackground { - from {opacity: 0;} - to {opacity: 1;} + from { + opacity: 0; + } + + to { + opacity: 1; + } } .modal { @@ -16,62 +22,85 @@ top: 0; width: 100%; height: 100%; - background-color: rgb(0,0,0); - background-color: rgba(0,0,0,0.4); - /* 添加动画 */ + background-color: rgb(0, 0, 0); + background-color: rgba(0, 0, 0, 0.4); animation: fadeInBackground 0.2s forwards; } + @keyframes fadeIn { - from {opacity: 0;} - to {opacity: 1;} + from { + opacity: 0; + } + + to { + opacity: 1; + } } + @keyframes shake { - 0%, 100% { + + 0%, + 100% { transform: translateX(0); } + 25% { transform: translateX(-5px); } + 75% { transform: translateX(5px); } } -.please{ + +.please { color: red; line-height: 50px; margin-left: 20px; animation: shake 0.3s ease-in-out 2; } + .modalContent { - width: 270px; - height: 80px; + width: 260px; + height: 100px; line-height: 80px; border-radius: 10px; background-color: #fefefe; color: black; - margin: 200px auto; /* 位于页面中心 */ + margin: 200px auto; border: 1px solid #888; text-align: center; user-select: none; - /* 添加动画 */ animation: fadeIn 0.2s forwards; } + +.resForm { + display: flex; + flex-direction: column; + justify-content: space-around; + padding: 10px; +} + /* RestApi */ -.copy{ +.copy { color: green; } -.pre{ + +.pre { position: relative; } -.copyButton{ + +.copyButton { position: absolute; right: 15px; cursor: pointer; } + /* email */ -.emailSvg{ +.emailSvg { margin-bottom: -5px; } + .emailPush { color: #428555; cursor: pointer; diff --git a/src/store/slices/userSlice.ts b/src/store/slices/userSlice.ts index 4cb89f1..5da132c 100644 --- a/src/store/slices/userSlice.ts +++ b/src/store/slices/userSlice.ts @@ -9,7 +9,7 @@ const userSlice = createSlice({ userData: {}, callgent: {}, status: {}, - token: getCookie('jwt'), + token: getCookie('x-callgent-jwt'), fetchState: {}, } as userSliceType, reducers: { @@ -26,22 +26,17 @@ const userSlice = createSlice({ }, }, extraReducers: (builder) => { - // 注册接口 builder.addCase(fetchCreateCallgent.fulfilled, (state, action) => { - // console.log(action.payload.data); - state.callgent = action.payload.data }); builder.addCase(fetchCreateCallgent.pending, (state, action) => { // state.loading = true; }); - // 用户详情 builder.addCase(fetchUserInfo.fulfilled, (state, action) => { - // console.log('用户详情', action); }); }, }); -export const { setStatus, setCallgent,setFetchState } = userSlice.actions; +export const { setStatus, setCallgent, setFetchState } = userSlice.actions; export default userSlice.reducer; \ No newline at end of file diff --git a/src/store/thunk/user/index.ts b/src/store/thunk/user/index.ts index 668876a..20a43ec 100644 --- a/src/store/thunk/user/index.ts +++ b/src/store/thunk/user/index.ts @@ -20,12 +20,12 @@ export const fetchCreateCallgent = createAsyncThunk>( 'users/fetchUserInfo', async (user, thunkAPI) => { try { - + const { data } = await axios.get('/api/users/info'); if (data?.data) { localStorage.setItem('userinfo', JSON.stringify(data.data)); @@ -38,3 +38,18 @@ export const fetchUserInfo = createAsyncThunk>( } } ); + +// Send a confirmation email +export const sendConfirmEmail = createAsyncThunk, { email: string }>( + 'users/sendConfirmEmail', + async (emailData, thunkAPI) => { + try { + const { data } = await axios.post('/api/users/send-confirm-email', { + email: emailData.email + }); + return data; + } catch (error) { + return thunkAPI.rejectWithValue('Failed to send confirmation email'); + } + } +); \ No newline at end of file diff --git a/src/util/axios/index.ts b/src/util/axios/index.ts index b5f2354..c8df514 100644 --- a/src/util/axios/index.ts +++ b/src/util/axios/index.ts @@ -10,14 +10,14 @@ const axios = axioshead.create({ }); axios.interceptors.request.use( (config) => { - const token = getCookie('jwt'); + const token = getCookie('x-callgent-jwt'); if (token) { config.headers.Authorization = 'Bearer ' + token; } return config; }, (error) => { - console.error('错误:', error); + console.error('error', error); return error }, ); @@ -27,11 +27,8 @@ axios.interceptors.response.use( }, async error => { if (error.response && error.response.status === 401) { - deleteCookie('jwt') - console.error('401错误:请重新登录。'); - // window.location.href = '/login'; + deleteCookie('x-callgent-jwt') } else { - console.error('其他错误:', error); } return Promise.reject(error); } From fa82a3e5acc8501d86b916119300c6a43de90b05 Mon Sep 17 00:00:00 2001 From: ZhaoYongChao <16632301768@163.com> Date: Sat, 25 May 2024 10:23:41 +0800 Subject: [PATCH 2/7] feat: add register Signed-off-by: ZhaoYongChao <16632301768@163.com> --- .../quick-start/components/CreateCallgent.tsx | 6 +-- docs/quick-start/components/register.tsx | 45 +++++++++++++++++++ docs/quick-start/register-an-account.mdx | 13 ++---- 3 files changed, 52 insertions(+), 12 deletions(-) create mode 100644 docs/quick-start/components/register.tsx diff --git a/docs/quick-start/components/CreateCallgent.tsx b/docs/quick-start/components/CreateCallgent.tsx index 1ee11ec..2a150c3 100644 --- a/docs/quick-start/components/CreateCallgent.tsx +++ b/docs/quick-start/components/CreateCallgent.tsx @@ -13,14 +13,14 @@ const CreateCallgent = () => { const { fetchCreateCallgent, sendConfirmEmail } = require('@site/src/store/thunk'); const { setStatus } = require('@site/src/store/slices/userSlice'); const { siteConfig } = useDocusaurusContext(); - + const myElementRef = useRef(null); const [state, setState] = useState(false) const { status, token } = useSelector( (state: DocType) => state.user ); const dispatch = useDispatch(); - + const [lastSubmitTime, setLastSubmitTime] = useState(0); const onFormSubmit = (event: React.FormEvent) => { event.preventDefault(); @@ -70,7 +70,7 @@ const CreateCallgent = () => { placeholder="Enter your email to register" className='input col table-of-contents' /> - diff --git a/docs/quick-start/components/register.tsx b/docs/quick-start/components/register.tsx new file mode 100644 index 0000000..5dd7c93 --- /dev/null +++ b/docs/quick-start/components/register.tsx @@ -0,0 +1,45 @@ +import useIsBrowser from '@docusaurus/useIsBrowser'; +import styles from './index.module.css'; +import { DocType } from '@site/src/types/user'; +import React, { useRef, useState } from 'react'; +import { useSelector, useDispatch } from 'react-redux'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; + +const CreateCallgent = () => { + const isBrowser = useIsBrowser(); + if (!isBrowser) { + return null; + } + const { sendConfirmEmail } = require('@site/src/store/thunk'); + const [state, setState] = useState(false); + const dispatch = useDispatch(); + const onEmailSubmit = (event: React.FormEvent) => { + event.preventDefault(); + const formData = new FormData(event.currentTarget); + const email = formData.get('email') as string; + dispatch(sendConfirmEmail({ email })) + .then((req) => { + if (req.payload !== "Failed to send confirmation email") { + setState(true); + } + }); + }; + return ( + <> +
onEmailSubmit(e)} className={styles.form}> + + +
+ {state &&
Please go to your email to set up your account!
} + + ); +}; +export default CreateCallgent; \ No newline at end of file diff --git a/docs/quick-start/register-an-account.mdx b/docs/quick-start/register-an-account.mdx index 268dd07..c085a2b 100644 --- a/docs/quick-start/register-an-account.mdx +++ b/docs/quick-start/register-an-account.mdx @@ -4,15 +4,10 @@ sidebar_position: 1 # Register an Account -import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import IconExternalLink from '@theme/Icon/ExternalLink'; -export const SignupLink = () => { - const { siteConfig } = useDocusaurusContext(); - return ( - sign-up page - ); -}; +import App from "@site/docs/app" +import SignupLink from "./components/register" -Firstly register an account from the . +Firstly register an Account +
 
Once you have registered, you can go to [Create the First Callgent](create-a-new-callgent) page. From 2ad28a1b88c47f13d6801c06bae0b47e6b0a7a09 Mon Sep 17 00:00:00 2001 From: ZhaoYongChao <16632301768@163.com> Date: Sat, 25 May 2024 10:26:44 +0800 Subject: [PATCH 3/7] style: send email button Signed-off-by: ZhaoYongChao <16632301768@163.com> --- docs/quick-start/components/register.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/quick-start/components/register.tsx b/docs/quick-start/components/register.tsx index 5dd7c93..c7999ab 100644 --- a/docs/quick-start/components/register.tsx +++ b/docs/quick-start/components/register.tsx @@ -34,7 +34,7 @@ const CreateCallgent = () => { placeholder="Enter your email to register" className='input col col--4 margin--sm table-of-contents' /> - From 4e99b8fa7aa67b9d261835fc96b38b503afed09e Mon Sep 17 00:00:00 2001 From: ZhaoYongChao <16632301768@163.com> Date: Sat, 25 May 2024 11:36:46 +0800 Subject: [PATCH 4/7] fix: email sending failed error message Signed-off-by: ZhaoYongChao <16632301768@163.com> --- docs/quick-start/call-the-callgent.mdx | 2 +- ...CreateCallgent.tsx => create-callgent.tsx} | 36 +++++-------------- docs/quick-start/components/index.module.css | 4 +-- docs/quick-start/components/register.tsx | 10 +++--- docs/quick-start/create-a-new-callgent.mdx | 2 +- src/store/thunk/user/index.ts | 4 ++- 6 files changed, 22 insertions(+), 36 deletions(-) rename docs/quick-start/components/{CreateCallgent.tsx => create-callgent.tsx} (69%) diff --git a/docs/quick-start/call-the-callgent.mdx b/docs/quick-start/call-the-callgent.mdx index 73fc8be..a487c98 100644 --- a/docs/quick-start/call-the-callgent.mdx +++ b/docs/quick-start/call-the-callgent.mdx @@ -7,7 +7,7 @@ tags: [Demo, Getting started] # Call the Callgent import App from "@site/docs/app" -import CreateCallgent from "./components/CreateCallgent" +import CreateCallgent from "./components/create-callgent" import Email from "./components/email" import RestApi from "./components/restApi" diff --git a/docs/quick-start/components/CreateCallgent.tsx b/docs/quick-start/components/create-callgent.tsx similarity index 69% rename from docs/quick-start/components/CreateCallgent.tsx rename to docs/quick-start/components/create-callgent.tsx index 2a150c3..1d01c61 100644 --- a/docs/quick-start/components/CreateCallgent.tsx +++ b/docs/quick-start/components/create-callgent.tsx @@ -10,17 +10,17 @@ const CreateCallgent = () => { if (!isBrowser) { return null; } - const { fetchCreateCallgent, sendConfirmEmail } = require('@site/src/store/thunk'); + const { fetchCreateCallgent } = require('@site/src/store/thunk'); const { setStatus } = require('@site/src/store/slices/userSlice'); const { siteConfig } = useDocusaurusContext(); - + // 控制显示隐藏 const myElementRef = useRef(null); const [state, setState] = useState(false) const { status, token } = useSelector( (state: DocType) => state.user ); const dispatch = useDispatch(); - + // 表单提交 const [lastSubmitTime, setLastSubmitTime] = useState(0); const onFormSubmit = (event: React.FormEvent) => { event.preventDefault(); @@ -29,7 +29,7 @@ const CreateCallgent = () => { return; } if (!token) { - myElementRef.current.style.display = 'block'; + myElementRef.current.style.display = 'block'; // 显示模态框 return; } const formData = new FormData(event.currentTarget); @@ -47,33 +47,15 @@ const CreateCallgent = () => { const handleContentClick = (event: { stopPropagation: () => void; }) => { event.stopPropagation(); }; - const onEmailSubmit = (event: React.FormEvent) => { - event.preventDefault(); - const formData = new FormData(event.currentTarget); - const email = formData.get('email') as string; - dispatch(sendConfirmEmail({ email })) - .then((req) => { - if (req.payload !== "Failed to send confirmation email") { - closeModel(); - } - }); - }; return ( <>
-
onEmailSubmit(e)} className={styles.resForm}> - - -
+

+ Please  + Sign up +  first. +

diff --git a/docs/quick-start/components/index.module.css b/docs/quick-start/components/index.module.css index 71ae50c..90163a6 100644 --- a/docs/quick-start/components/index.module.css +++ b/docs/quick-start/components/index.module.css @@ -61,8 +61,8 @@ } .modalContent { - width: 260px; - height: 100px; + width: 270px; + height: 80px; line-height: 80px; border-radius: 10px; background-color: #fefefe; diff --git a/docs/quick-start/components/register.tsx b/docs/quick-start/components/register.tsx index c7999ab..d532e21 100644 --- a/docs/quick-start/components/register.tsx +++ b/docs/quick-start/components/register.tsx @@ -3,7 +3,6 @@ import styles from './index.module.css'; import { DocType } from '@site/src/types/user'; import React, { useRef, useState } from 'react'; import { useSelector, useDispatch } from 'react-redux'; -import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; const CreateCallgent = () => { const isBrowser = useIsBrowser(); @@ -11,7 +10,7 @@ const CreateCallgent = () => { return null; } const { sendConfirmEmail } = require('@site/src/store/thunk'); - const [state, setState] = useState(false); + const [state, setState] = useState(null); const dispatch = useDispatch(); const onEmailSubmit = (event: React.FormEvent) => { event.preventDefault(); @@ -20,7 +19,9 @@ const CreateCallgent = () => { dispatch(sendConfirmEmail({ email })) .then((req) => { if (req.payload !== "Failed to send confirmation email") { - setState(true); + setState('success'); + } else { + setState('error'); } }); }; @@ -38,7 +39,8 @@ const CreateCallgent = () => { Send Email - {state &&
Please go to your email to set up your account!
} + {state === 'success' &&
Please go to your email to set up your account!
} + {state === 'error' &&
Failed to send confirmation email. Please try again later.
} ); }; diff --git a/docs/quick-start/create-a-new-callgent.mdx b/docs/quick-start/create-a-new-callgent.mdx index 04923cd..ed49ff8 100644 --- a/docs/quick-start/create-a-new-callgent.mdx +++ b/docs/quick-start/create-a-new-callgent.mdx @@ -7,7 +7,7 @@ tags: [Demo, Getting started] # Create a New Callgent import App from "@site/docs/app" -import CreateCallgent from "./components/CreateCallgent" +import CreateCallgent from "./components/create-callgent" Now you can create your own callgents, to encapsulate any of your system serivces, and embed them into any scenarios. diff --git a/src/store/thunk/user/index.ts b/src/store/thunk/user/index.ts index 20a43ec..14e7bba 100644 --- a/src/store/thunk/user/index.ts +++ b/src/store/thunk/user/index.ts @@ -45,7 +45,9 @@ export const sendConfirmEmail = createAsyncThunk, { email: stri async (emailData, thunkAPI) => { try { const { data } = await axios.post('/api/users/send-confirm-email', { - email: emailData.email + email: emailData.email, + create: true, + resetPwd: true, }); return data; } catch (error) { From ac4a089eb3aa5675a73cc5c82b11f007a04f3621 Mon Sep 17 00:00:00 2001 From: jamesp Date: Sat, 25 May 2024 11:51:08 +0800 Subject: [PATCH 5/7] docs: confirm-email Signed-off-by: jamesp --- docs/quick-start/components/register.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/quick-start/components/register.tsx b/docs/quick-start/components/register.tsx index d532e21..7c49ed6 100644 --- a/docs/quick-start/components/register.tsx +++ b/docs/quick-start/components/register.tsx @@ -39,7 +39,7 @@ const CreateCallgent = () => { Send Email - {state === 'success' &&
Please go to your email to set up your account!
} + {state === 'success' &&
Please check your email to confirm registration!
} {state === 'error' &&
Failed to send confirmation email. Please try again later.
} ); From 529853733e7e84bb783526a16d3fe7a5b80c084a Mon Sep 17 00:00:00 2001 From: dev-callgent Date: Mon, 27 May 2024 17:17:37 +0800 Subject: [PATCH 6/7] docs: add section - user as a service Signed-off-by: dev-callgent --- docs/advanced-topics/_category_.json | 2 +- docs/developers/_category_.json | 2 +- docs/user-as-a-service/_category_.json | 8 ++++++++ docs/user-as-a-service/define-user-api.md | 6 ++++++ docs/user-as-a-service/import-user-api-into-callgent.md | 6 ++++++ .../user-as-a-service/invoke-user-callgent-by-rest-api.md | 6 ++++++ .../user-responds-through-other-channels.md | 6 ++++++ 7 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 docs/user-as-a-service/_category_.json create mode 100644 docs/user-as-a-service/define-user-api.md create mode 100644 docs/user-as-a-service/import-user-api-into-callgent.md create mode 100644 docs/user-as-a-service/invoke-user-callgent-by-rest-api.md create mode 100644 docs/user-as-a-service/user-responds-through-other-channels.md diff --git a/docs/advanced-topics/_category_.json b/docs/advanced-topics/_category_.json index 5110fa4..9984c54 100644 --- a/docs/advanced-topics/_category_.json +++ b/docs/advanced-topics/_category_.json @@ -1,6 +1,6 @@ { "label": "Advanced Topics", - "position": 3, + "position": 4, "link": { "type": "generated-index" } diff --git a/docs/developers/_category_.json b/docs/developers/_category_.json index 15e31ca..3668aba 100644 --- a/docs/developers/_category_.json +++ b/docs/developers/_category_.json @@ -1,6 +1,6 @@ { "label": "Developers Guide", - "position": 4, + "position": 5, "link": { "type": "generated-index", "description": "Service as a Callable Agent. Encapsulate every user and system service the same way as a Callgent, seamlessly integrate them anywhere." diff --git a/docs/user-as-a-service/_category_.json b/docs/user-as-a-service/_category_.json new file mode 100644 index 0000000..c329b5a --- /dev/null +++ b/docs/user-as-a-service/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "User as a Service", + "position": 3, + "link": { + "type": "generated-index", + "description": "Now, let's encapsulate a user as a REST-API service. By default, the user may respond to invocations by email. And user can respond from Slack channels and other scenarios easily." + } +} diff --git a/docs/user-as-a-service/define-user-api.md b/docs/user-as-a-service/define-user-api.md new file mode 100644 index 0000000..768177c --- /dev/null +++ b/docs/user-as-a-service/define-user-api.md @@ -0,0 +1,6 @@ +--- +sidebar_position: 1 +title: Define the user API +description: Callgent is yet another AI programming tool besides Copilot, UI generator, and bug fixer, etc. +keywords: [Callgent function-calling technique, integrate AI with email and Slack, Callgent vs Zapier functionality, Callgent for no-code automation, progressive function calling in AI, Callgent API integration examples, Callgent user-system orchestration, copilot, code generator, v0.dev, SWE-bench, iPaaS] +--- diff --git a/docs/user-as-a-service/import-user-api-into-callgent.md b/docs/user-as-a-service/import-user-api-into-callgent.md new file mode 100644 index 0000000..049c771 --- /dev/null +++ b/docs/user-as-a-service/import-user-api-into-callgent.md @@ -0,0 +1,6 @@ +--- +sidebar_position: 2 +title: Import API definition into Callgent +description: . +keywords: [] +--- diff --git a/docs/user-as-a-service/invoke-user-callgent-by-rest-api.md b/docs/user-as-a-service/invoke-user-callgent-by-rest-api.md new file mode 100644 index 0000000..d491021 --- /dev/null +++ b/docs/user-as-a-service/invoke-user-callgent-by-rest-api.md @@ -0,0 +1,6 @@ +--- +sidebar_position: 3 +title: Invoke the User Callgent by REST API +description: . +keywords: [] +--- diff --git a/docs/user-as-a-service/user-responds-through-other-channels.md b/docs/user-as-a-service/user-responds-through-other-channels.md new file mode 100644 index 0000000..88d814c --- /dev/null +++ b/docs/user-as-a-service/user-responds-through-other-channels.md @@ -0,0 +1,6 @@ +--- +sidebar_position: 4 +title: User responds through other channels +description: . +keywords: [] +--- From af10b6b70f6fd8aec2c1bc86d1ac99edae060798 Mon Sep 17 00:00:00 2001 From: dev-callgent Date: Mon, 27 May 2024 17:26:17 +0800 Subject: [PATCH 7/7] docs: add section - user as a service Signed-off-by: dev-callgent --- docs/user-as-a-service/define-user-api.md | 2 +- docs/user-as-a-service/import-user-api-into-callgent.md | 2 +- docs/user-as-a-service/invoke-user-callgent-by-rest-api.md | 2 +- docs/user-as-a-service/user-responds-through-other-channels.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/user-as-a-service/define-user-api.md b/docs/user-as-a-service/define-user-api.md index 768177c..130c69e 100644 --- a/docs/user-as-a-service/define-user-api.md +++ b/docs/user-as-a-service/define-user-api.md @@ -2,5 +2,5 @@ sidebar_position: 1 title: Define the user API description: Callgent is yet another AI programming tool besides Copilot, UI generator, and bug fixer, etc. -keywords: [Callgent function-calling technique, integrate AI with email and Slack, Callgent vs Zapier functionality, Callgent for no-code automation, progressive function calling in AI, Callgent API integration examples, Callgent user-system orchestration, copilot, code generator, v0.dev, SWE-bench, iPaaS] +keywords: [user as a service] --- diff --git a/docs/user-as-a-service/import-user-api-into-callgent.md b/docs/user-as-a-service/import-user-api-into-callgent.md index 049c771..3045922 100644 --- a/docs/user-as-a-service/import-user-api-into-callgent.md +++ b/docs/user-as-a-service/import-user-api-into-callgent.md @@ -2,5 +2,5 @@ sidebar_position: 2 title: Import API definition into Callgent description: . -keywords: [] +keywords: [user as a service] --- diff --git a/docs/user-as-a-service/invoke-user-callgent-by-rest-api.md b/docs/user-as-a-service/invoke-user-callgent-by-rest-api.md index d491021..bc0c484 100644 --- a/docs/user-as-a-service/invoke-user-callgent-by-rest-api.md +++ b/docs/user-as-a-service/invoke-user-callgent-by-rest-api.md @@ -2,5 +2,5 @@ sidebar_position: 3 title: Invoke the User Callgent by REST API description: . -keywords: [] +keywords: [user as a service] --- diff --git a/docs/user-as-a-service/user-responds-through-other-channels.md b/docs/user-as-a-service/user-responds-through-other-channels.md index 88d814c..07876c5 100644 --- a/docs/user-as-a-service/user-responds-through-other-channels.md +++ b/docs/user-as-a-service/user-responds-through-other-channels.md @@ -2,5 +2,5 @@ sidebar_position: 4 title: User responds through other channels description: . -keywords: [] +keywords: [user as a service] ---