├── .gitignore ├── LICENSE ├── README.md ├── achieves ├── Feishu天气查询机器人 │ ├── README.md │ ├── bot.conversations.zip │ ├── conversations │ │ ├── index.json │ │ ├── plugin.js │ │ └── zh_CN.weather.ms │ └── images │ │ ├── screenshot_20240620091344.png │ │ ├── screenshot_20240620091358.png │ │ ├── screenshot_20240620091558.png │ │ ├── screenshot_20240620091615.png │ │ ├── screenshot_20240620091629.png │ │ ├── screenshot_20240620091642.png │ │ ├── screenshot_20240620091705.png │ │ ├── screenshot_20240620091716.png │ │ ├── screenshot_20240620091731.png │ │ ├── screenshot_20240620091750.png │ │ ├── screenshot_20240620091811.png │ │ └── screenshot_20240620091830.png ├── GitHub工单机器人 │ ├── README.md │ ├── bot.conversations.c66 │ ├── bot.dicts.json │ ├── bot.faqs.json │ ├── bot.intents.json │ └── conversations │ │ ├── index.json │ │ ├── plugin.js │ │ ├── zh_CN.__post__.ms │ │ ├── zh_CN.greetings.ms │ │ └── zh_CN.issues.ms ├── README.md ├── 保健品 │ ├── .gitkeep │ ├── README.MD │ ├── bot.conversations.c66 │ ├── bot.faqs.json │ └── flow.xlsx ├── 信用卡 │ ├── .gitkeep │ ├── README.MD │ ├── bot.conversations.c66 │ ├── bot.faqs.json │ └── flow.xlsx ├── 回访 │ ├── .gitkeep │ ├── README.md │ ├── bot.conversations.c66 │ ├── bot.faqs.json │ └── flow.xlsx ├── 天气查询 │ ├── .gitignore │ ├── README.md │ ├── bot.conversations.c66 │ └── bot.faqs.json ├── 房产 │ ├── .gitkeep │ ├── README.MD │ ├── bot.faqs.json │ └── flow.xlsx ├── 教育培训 │ ├── .gitkeep │ ├── README.MD │ ├── bot.conversations.c66 │ ├── bot.faqs.json │ └── flow.xlsx ├── 法律服务 │ ├── .gitkeep │ ├── README.MD │ ├── bot.conversations.c66 │ ├── bot.faqs.json │ └── flow.xlsx ├── 活动通知 │ ├── .gitignore │ ├── README.md │ ├── bot.conversations.c66 │ ├── bot.faqs.json │ ├── flow.mdj │ └── flow.xlsx ├── 理财 │ ├── .gitkeep │ ├── README.MD │ ├── bot.conversations.c66 │ ├── bot.faqs.json │ └── flow.xlsx ├── 财税 │ ├── .gitkeep │ ├── README.md │ ├── bot.conversations.c66 │ ├── bot.faqs.json │ └── flow.xlsx ├── 酒水 │ ├── .gitkeep │ ├── README.MD │ ├── bot.conversations.c66 │ ├── bot.faqs.json │ └── flow.xlsx └── 闲聊 │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── assets │ └── 1.png │ ├── bot.conversations.c66 │ └── bot.faqs.json ├── assets ├── 1.jpg ├── 10.jpg ├── 11.jpg ├── 12.jpg ├── 2.png ├── 3.jpg ├── 4.jpg ├── 5.jpg ├── 6.png ├── 7.jpg ├── 8.png ├── 9.jpg ├── WechatIMG4918.jpeg ├── demo-contact.json ├── image-2021-05-14-095741.png ├── images │ ├── screenshot_20240620093658.png │ ├── screenshot_20240627135527.png │ └── screenshot_20240627135732.png ├── sample.sh └── tpls │ ├── .gitignore │ ├── LICENSE │ ├── README.ap │ ├── botarchive │ ├── index.json │ ├── plugin.js │ └── zh_CN.greetings.ms │ ├── package.json │ ├── sample.env │ └── scripts │ ├── archive.sh │ ├── bot │ ├── chat.sh │ ├── deploy.sh │ ├── install.sh │ └── trace.sh ├── bin ├── commit.sh ├── export.sh ├── import.sh └── package.sh ├── docs ├── development_cde.md ├── development_nodejs.md └── import_bot_to_cloud.md └── projects ├── GuessNumberBot ├── .gitignore ├── README.md ├── assets │ ├── screenshot_20240627153349.png │ └── screenshot_20240627154900.png ├── bot.conversations.c66 ├── bot.dicts.json ├── bot.faqs.json ├── bot.intents.json └── conversations │ ├── en_US.greetings.ms │ ├── en_US.guess_the_number.ms │ ├── index.json │ └── plugin.js ├── README.md ├── 冰箱报修服务机器人 ├── .env ├── README.md ├── assets │ ├── screenshot_20240627161133.png │ └── screenshot_20240628102540.png ├── bot.conversations.c66 ├── bot.dicts.json ├── bot.faqs.json ├── bot.intents.json └── conversations │ ├── index.json │ ├── plugin.js │ └── zh_CN.greetings.ms ├── 招聘面试机器人 ├── .env ├── README.md ├── assets │ ├── 1.png │ ├── 2.png │ ├── 3.png │ ├── 4.png │ ├── 5.png │ ├── 6.png │ ├── 7.png │ └── screenshot_20240627151920.png ├── bot.conversations.c66 ├── bot.faqs.json └── conversations │ ├── index.json │ ├── plugin.js │ ├── zh_CN.background.ms │ ├── zh_CN.basic.ms │ ├── zh_CN.close.ms │ ├── zh_CN.greetings.ms │ ├── zh_CN.mental.ms │ ├── zh_CN.nlp.ms │ └── zh_CN.nodejs.ms ├── 讲笑话机器人 ├── .gitignore ├── LICENSE ├── README.md ├── assets │ ├── 1.png │ ├── jokes.json │ └── screenshot_20240627141615.png ├── bot.conversations.c66 ├── bot.dicts.json ├── bot.faqs.json ├── bot.intents.json └── conversations │ ├── index.json │ ├── plugin.js │ ├── zh_CN.give_me_joke.ms │ └── zh_CN.greetings.ms └── 预定机票机器人 ├── .gitignore ├── README.md ├── assets └── screenshot_20240627140852.png ├── bot.conversations.c66 ├── bot.dicts.json ├── bot.faqs.json ├── bot.intents.json ├── conversations ├── index.json ├── plugin.js ├── zh_CN.__pre__.ms ├── zh_CN.greetings.ms └── zh_CN.intents.ms └── sample.env /.gitignore: -------------------------------------------------------------------------------- 1 | *.swp 2 | *.swo 3 | *.sublime-* 4 | *.pyc 5 | jmeter.log 6 | __pycache__ 7 | tmp/ 8 | node_modules/ 9 | sftp-config.json 10 | .DS_Store 11 | *.iml 12 | *.ipr 13 | *.iws 14 | *.idea 15 | ~$*.xls* 16 | ~$*.ppt* 17 | ~$*.doc* 18 | localrc 19 | workarea 20 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (2018-2024) Chatopera Inc. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 | [Chatopera 云服务](https://bot.chatopera.com/) | [入门教程](https://docs.chatopera.com/products/chatbot-platform/tutorials/index.html) | [文档中心](https://docs.chatopera.com/index.html) 4 | 5 |
6 | 7 | # Chatopera 示例程序 8 | 9 | [GitHub](https://github.com/chatopera/chatbot-samples/) | [Gitee](https://gitee.com/chatopera/chatbot-samples) 10 | 11 | 本源码库提供多个示例程序项目,基于这些项目,您可以: 12 | 13 | - 快速掌握 Chatopera 对话机器人开发,实现智能问答,智能客服等应用; 14 | - 以对话模板为脚手架,学习最佳实践,开发多轮对话; 15 | - 快速掌握 Chatopera 机器人的系统集成。 16 | 17 | ## 开始阅读前 18 | 19 | * 请完成入门教程,[查看文档](https://docs.chatopera.com/products/chatbot-platform/tutorials/index.html) 20 | * 本文面向开发者撰写,有命令行工具或编程语言经验:Bash(或 PowerShell), Git, JavaScript 21 | 22 | ## 工单 23 | 24 | 有关 [chatopera/chatbot-samples](https://github.com/chatopera/chatbot-samples) 的工单,提交到 - 25 | 26 | [https://github.com/chatopera/docs/issues?q=label%3ASamples](https://github.com/chatopera/docs/issues?q=label%3ASamples) 27 | 28 | ## 安装 CLI 29 | 30 | [CLI 命令行工具](https://docs.chatopera.com/products/chatbot-platform/references/cli.html)是自动化的脚本命令,使用 CLI 命令行工具可快速的导入或导出机器人语料。使用 CLI 工具,需要先安装依赖: 31 | 32 | * Git - [Windows 安装指南](https://gitforwindows.org/) | [macOS](https://git-scm.com/download/mac) | [Linux](https://git-scm.com/downloads) 33 | * Node.js - [安装指南](https://nodejs.org/zh-cn) 34 | 35 | CLI 同时依赖操作系统的命令行终端,如 PowerShell, CMD Prompt, Bash Shell, etc. 36 | 37 | 打开命令行中断,比如 PowerShell,执行 `npm --version`,确认可以看到类似的输出。 38 | 39 | ![Alt text](assets/images/screenshot_20240627135527.png) 40 | 41 | 证明 nodejs 已经安装成功。然后,执行: 42 | 43 | ``` 44 | npm install -g @chatopera/sdk 45 | ``` 46 | 47 | 进行安装 CLI,上述命令执行后,在命令行执行 ``,确认可以看到类似这样的输出。 48 | 49 | ![Alt text](assets/images/screenshot_20240627135732.png) 50 | 51 | ## 克隆代码 52 | 53 | ``` 54 | git clone https://github.com/chatopera/chatbot-samples.git 55 | cd chatbot-samples 56 | pwd # 得到代码路径 ROOT_PATH 57 | ls projects # projects 目录内存放多个示例项目 58 | ``` 59 | 60 | `{{ROOT_PATH}}` 是项目 [https://github.com/chatopera/chatbot-samples](https://github.com/chatopera/chatbot-samples) 存放的路径, 比如 `/c/Users/Administrator/chatbot-samples`。 61 | 62 | ## 使用 CLI 导入示例程序 63 | 64 | 首先,[安装 CLI 和克隆代码](https://github.com/chatopera/chatbot-samples?tab=readme-ov-file#%E5%AE%89%E8%A3%85-cli),然后执行下面的步骤。 65 | 66 | ### 导入语料 67 | 将某个示例程序,导入到一个已有的聊天机器人。假设已经在 [https://bot.chatopera.com/dashboard](https://bot.chatopera.com/dashboard) 创建了一个聊天机器人,并获得了 ClientID 和 Secret 信息。 68 | 69 | 接着**按照顺序,执行下面的命令**: 70 | 71 | ``` 72 | #cd {{ROOT_PATH}}/projects/{{PROJECT_NAME}} # 使用哪个示例项目,就进入哪个文件夹 73 | cd {{ROOT_PATH}}/projects/GitHub工单机器人 # 比如,进入【GitHub工单机器人】 74 | bot env # 自动生成 .env 文件,然后更新 .env 文件中的 BOT_CLIENT_ID 和 BOT_CLIENT_SECRET 75 | bot dicts --action import -f bot.dicts.json # 导出词典 76 | bot faq --action import -f bot.faqs.json # 导出知识库 77 | bot intents --action import -f bot.intents.json # 导出意图识别 78 | bot conversation --action import -f bot.conversations.c66 # 导出多轮对话 79 | ``` 80 | 81 | 这样,就可以访问机器人了,比如从 H5 聊天控件,和机器人对话。 82 | 83 | ### 导出语料 84 | 将目前 `.env` 文件中的机器人的语料导出为本地的语料文件。 85 | 86 | ``` 87 | cd {{ROOT_PATH}}/projects/GitHub工单机器人 # 使用哪个示例项目,就进入哪个文件夹 88 | bot dicts --action export -f bot.dicts.json # 假设已经创建了 .env 文件,并设定 BOT_CLIENT_ID 和 BOT_CLIENT_SECRET 89 | bot faq --action export -f bot.faqs.json 90 | bot intents --action export -f bot.intents.json 91 | bot conversation --action export -f bot.conversations.c66 92 | ``` 93 | 94 | 这样,就完成了机器人对话技能的备份。 95 | 96 | **导入和导出中,文件格式是一样的。** 97 | 98 | ## 更多说明 99 | 100 | ### 示例程序目录 101 | 102 | 查看[示例程序目录](./projects)。 103 | 104 | [![Alt text](assets/images/screenshot_20240620093658.png)](./projects) 105 | 106 | 每个**示例程序**按照如下的结构组织。 107 | 108 | ``` 109 | 根目录 110 | ├── README.md # 该项目的使用说明,必读 111 | ├── bot.dicts.json # 词典导入文件,包括引用词典、词汇表词典和正则表达式词典 112 | ├── bot.faqs.json # 知识库导入文件,包括标准问、扩展问、分类等 113 | ├── bot.intents.json # 意图识别导入文件,包含意图、说法、槽位等 114 | ├── bot.conversations.c66 # 多轮对话导入文件,包含脚本、函数等 115 | ├── conversations # 多轮对话文件解压后的内容,.c66 文件是 zip 压缩包 116 | ├── flow.mdj # UML 对话流程文件,描述对话流程,可能有 117 | └── flow.xlsx # Excel 话术文件,描述对话流程,可能有 118 | ``` 119 | 120 | ### 语料导入导出的更多介绍 121 | 122 | 了解导入导出语料,[查看文档](https://docs.chatopera.com/products/chatbot-platform/howto-guides/integration/cli-export-import.html) 123 | 124 | ### 设置命令快捷方式 125 | 126 | 在 shell profile 中设置如下命令, 比如 `~/.zshrc` or `~/.bashrc`。 127 | 128 | ``` 129 | export CHATBOT_SAMPLES={{ROOT_PATH}} 130 | # export bot files into current work dir 131 | alias botexport="$CHATBOT_SAMPLES/bin/export.sh" 132 | # import bot files under current work dir 133 | alias botimport="$CHATBOT_SAMPLES/bin/import.sh" 134 | # package conversations folder as bot.conversations.c66 135 | alias botconpac="$CHATBOT_SAMPLES/bin/conversation.package.sh" 136 | ``` 137 | 138 | 现在,使用命令 `botimport` 和 `botexport` 完成导入 BOT 和导出 BOT 的操作,比如: 139 | 140 | ``` 141 | cd projects/GitHub工单机器人 142 | botimport # 导入语料到聊天机器人 143 | botexport # 导出聊天机器人到语料 144 | ``` 145 | 146 | # LICENSE 147 | 148 | [Apache 2.0](./LICENSE) 149 | 150 | [![chatoper banner][co-banner-image]][co-url] 151 | 152 | [co-banner-image]: ./assets/8.png 153 | [co-url]: https://www.chatopera.com 154 | -------------------------------------------------------------------------------- /achieves/Feishu天气查询机器人/README.md: -------------------------------------------------------------------------------- 1 | # Feishu天气查询机器人 2 | 3 | ## 智能对话机器人让办公更智能 4 | 5 | 飞书是字节跳动旗下企业协作平台,整合即时沟通、视频会议、日历、云文档、OKR、企业邮箱、服务台等功能于一体,成就组织和个人,更高效、更愉悦。 6 | 7 | Chatopera 飞书应用可以帮助企业快速定制知识库和多轮对话,让办公更智能! 8 | 9 | 比如,我是企业的 HR,我怎么样让同事们可以在飞书上快速获得公司的开会制度、休假制度和绩效考核制度的相关信息?我是企业的软件服务研发人员,我怎么样在飞书上实现基于人机自然语言交互的 ChatOps 服务 ... 10 | 11 | **只需要在飞书应用目录中安装 Chatopera 应用,就可以增加丰富的技能,而且是通过无代码或低代码的方式。** 12 | 13 | **Chatopera 机器人平台是开发 BOT 服务的工具,而飞书是上线 BOT 服务的渠道。** 14 | 15 | 这个定制化 BOT 和上线的过程是非常简单的,本文的主要目的就是展示这个过程,我们一起来实现一个能查询天气的 BOT! 16 | 17 | ## 创建 Chatopera 机器人 18 | 19 | 登陆 Chatopera 云服务([https://bot.chatopera.com](https://bot.chatopera.com)) ,在管理控制台,点击【创建机器人】,这次我们创建的机器人的名字是 【FeishuWeatherBot】,描述是【飞书天气查询机器人示例】。 20 | 21 | ![Alt text](images/screenshot_20240620091344.png) 22 | 23 | 成功创建后进入【设置】页面查看 Client Id,在飞书私聊或群聊中,绑定 Chatopera 应用对应的机器人时需要使用。 24 | 25 | 26 | ![Alt text](images/screenshot_20240620091358.png) 27 | 28 | 29 | ## 上传 Chatopera 机器人多轮对话脚本 30 | 31 | 多轮对话是 Chatopera 机器人中,对话管理的一个模块,多轮对话的特点是通过脚本语法设计对话,并通过函数满足更灵活的需求,多轮对话使用多轮对话设计器开发,支持导入导出操作,在不同的机器人之间可以复用。现在您不需要了解更多,只需要按照下面的操作点击完成现成的对话的导入,在本文的最后,通过延伸阅读的资源链接掌握详细的使用。 32 | 33 | 首先,通过链接下载天气查询多轮对话(地址1:[https://dwz.chatopera.com/8Iv25H](https://dwz.chatopera.com/8Iv25H) 地址2:[https://dwz.chatopera.com/4J0q7l](https://dwz.chatopera.com/4J0q7l)),该下载文件以 c66 结尾,该后缀代表是 Chatopera 多轮对话的封装的文件。 34 | 35 | 然后,进入 Chatopera 机器人【多轮对话】模块,点击【导入】按钮上传刚下载的 c66 文件。 36 | 37 | ![Alt text](images/screenshot_20240620091558.png) 38 | 39 | 测试对话,进入 Chatopera 测试页面。比如,发送【今天天津天气怎么样】,得到回复如【现在天津天气多云】。 40 | 41 | ![Alt text](images/screenshot_20240620091615.png) 42 | 43 | 那么,为什么会得到这样的回复?本文后续内容将会简单的介绍工作原理,我们继续看如何在飞书上使用。 44 | 45 | ## 飞书绑定机器人 46 | 飞书内使用 Chatopera 机器人,需要组织管理员先安装 Chatopera 应用,然后该应用就会出现在飞书客户端的工作台 Workplace,管理员安装 Chatopera 应用指南([https://dwz.chatopera.com/o7770O](https://dwz.chatopera.com/o7770O))。 47 | 48 | 组织内安装 Chatopera 应用后,在客户端使用快捷搜索或在工作台可以找到 Chatopera 应用,开始进入对话。 49 | 50 | ![Alt text](images/screenshot_20240620091629.png) 51 | 52 | 53 | 在飞书客户端,进入 Chatopera 应用对话窗口,发送 ```create_feishu_cid clientId ```创建机器人渠道,此时 Chatopera 应用回复了 CID 信息,即飞书渠道标识,该渠道标识用于在 Chatopera 云服务绑定飞书渠道。 54 | 55 | ![Alt text](images/screenshot_20240620091642.png) 56 | 57 | 进入 Chatopera 云服务中该 Chatopera 机器人的管理控制台,进入【系统集成】页面,滑动至【飞书】板块,通过搜索或在列表中,找到该飞书渠道,点击【绑定】并【确认】。 58 | 59 | ![Alt text](images/screenshot_20240620091705.png) 60 | 61 | 此时,飞书渠道得到通知,绑定完成。下面,就可以在飞书上使用 Chatopera 机器人了,是不是很简单? 62 | 63 | ## 在飞书客户端和机器人对话 64 | 按提示发送对应信息查询。 65 | 66 | ![Alt text](images/screenshot_20240620091716.png) 67 | 68 | 选择实现一个查询天气的应用,仅为简单说明目的,在 Chatopera 云服务内,用户可以满足实际业务上的任意的需求。 69 | 70 | ## 工作原理 71 | 72 | 在本示例程序中,天气信息来源自和风天气开发者 API ( [https://www.qweather.com/](https://www.qweather.com/) ),工作过程如下。 73 | 74 | ![Alt text](images/screenshot_20240620091731.png) 75 | 76 | - Chatopera 云服务用户上传多轮对话 c66 程序,该程序是由 BOT 开发者使用多轮对话设计器开发并导出,分享 77 | - 飞书用户根据提示获得使用说明,并使用自然语言对话 78 | - 使用飞书用户查询中的信息请求和风天气接口并返回结果 79 | 80 | **在多轮对话设计器中,开发者可以自由的发挥创造力 - Chatopera 机器人平台是一个无代码或低代码的可编程的定制 BOT 的平台!** 81 | 82 | ![Alt text](images/screenshot_20240620091750.png) 83 | 84 | 如果您需要在实际中使用这个程序,您需要自行申请和风天气的开发者 TOKEN ( [https://dev.qweather.com/](https://dev.qweather.com/) )。默认情况下,是 Chatopera 申请的一个和风天气的 TOKEN,该 TOKEN 每天只有 1,000 次查询额度,以和风天气官方为准。 85 | 86 | 87 | ![Alt text](images/screenshot_20240620091811.png) 88 | 89 | ![Alt text](images/screenshot_20240620091830.png) 90 | 91 | 详细使用文档:[https://dwz.chatopera.com/GQTH16](https://dwz.chatopera.com/GQTH16) 92 | 93 | -------------------------------------------------------------------------------- /achieves/Feishu天气查询机器人/bot.conversations.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/Feishu天气查询机器人/bot.conversations.zip -------------------------------------------------------------------------------- /achieves/Feishu天气查询机器人/conversations/index.json: -------------------------------------------------------------------------------- 1 | {"name":"Ko","primaryLanguage":"zh_CN","config":{"HEWEATHER_KEY":"b22ebe0c5ce540c9abeaf2bd442c0a83"},"version":"1.1","conversations":[{"name":"weather","enabled":true}]} -------------------------------------------------------------------------------- /achieves/Feishu天气查询机器人/conversations/plugin.js: -------------------------------------------------------------------------------- 1 | class WForewast { 2 | constructor(apiKey) { 3 | if (!apiKey) 4 | throw new Error( 5 | 'Invalid token, get it from http://www.heweather.com/my/service' 6 | ); 7 | this.apiKey = apiKey; 8 | } 9 | 10 | async getCity(cityName) { 11 | let res = await http.get('https://geoapi.qweather.com/v2/city/lookup', { 12 | params: { 13 | key: this.apiKey, 14 | location: cityName 15 | }, 16 | }); 17 | 18 | return res.data; 19 | } 20 | 21 | async getWeatherNow(locationId) { 22 | let res = await http.get('https://devapi.qweather.com/v7/weather/now', { 23 | params: { 24 | key: this.apiKey, 25 | location: locationId 26 | }, 27 | }); 28 | 29 | return res.data; 30 | } 31 | 32 | async getWeatherByCity(cityName) { 33 | let { 34 | location 35 | } = await this.getCity(cityName); 36 | let city = location && location[0]; 37 | if (city) { 38 | let { 39 | now 40 | } = await this.getWeatherNow(city.id); 41 | return `现在${city.name}天气「${now.text} ${now.windDir}」`; 42 | } else { 43 | return '没有相关城市信息'; 44 | } 45 | } 46 | } 47 | 48 | const wf = new WForewast(config["HEWEATHER_KEY"]); 49 | 50 | exports.getWeatherByCity = wf.getWeatherByCity.bind(wf); -------------------------------------------------------------------------------- /achieves/Feishu天气查询机器人/conversations/zh_CN.weather.ms: -------------------------------------------------------------------------------- 1 | + 今天 *(2-5) 天气 [怎么样] 2 | - {keep} ^getWeatherByCity() 3 | 4 | 5 | // 私聊绑定自定义提示 6 | + __kick_off_feishu_private 7 | - {keep} 成功绑定飞书私聊机器人,请发送「今天xxx天气怎么样」查询天气。\n例:今天北京天气怎么样 8 | 9 | // 群聊绑定自定义提示 10 | + __kick_off_feishu_group 11 | - {keep} 成功绑定飞书群机器人,请 @Chatopera 并发送「今天xxx天气怎么样」查询天气。\n例:今天北京天气怎么样 -------------------------------------------------------------------------------- /achieves/Feishu天气查询机器人/images/screenshot_20240620091344.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/Feishu天气查询机器人/images/screenshot_20240620091344.png -------------------------------------------------------------------------------- /achieves/Feishu天气查询机器人/images/screenshot_20240620091358.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/Feishu天气查询机器人/images/screenshot_20240620091358.png -------------------------------------------------------------------------------- /achieves/Feishu天气查询机器人/images/screenshot_20240620091558.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/Feishu天气查询机器人/images/screenshot_20240620091558.png -------------------------------------------------------------------------------- /achieves/Feishu天气查询机器人/images/screenshot_20240620091615.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/Feishu天气查询机器人/images/screenshot_20240620091615.png -------------------------------------------------------------------------------- /achieves/Feishu天气查询机器人/images/screenshot_20240620091629.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/Feishu天气查询机器人/images/screenshot_20240620091629.png -------------------------------------------------------------------------------- /achieves/Feishu天气查询机器人/images/screenshot_20240620091642.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/Feishu天气查询机器人/images/screenshot_20240620091642.png -------------------------------------------------------------------------------- /achieves/Feishu天气查询机器人/images/screenshot_20240620091705.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/Feishu天气查询机器人/images/screenshot_20240620091705.png -------------------------------------------------------------------------------- /achieves/Feishu天气查询机器人/images/screenshot_20240620091716.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/Feishu天气查询机器人/images/screenshot_20240620091716.png -------------------------------------------------------------------------------- /achieves/Feishu天气查询机器人/images/screenshot_20240620091731.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/Feishu天气查询机器人/images/screenshot_20240620091731.png -------------------------------------------------------------------------------- /achieves/Feishu天气查询机器人/images/screenshot_20240620091750.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/Feishu天气查询机器人/images/screenshot_20240620091750.png -------------------------------------------------------------------------------- /achieves/Feishu天气查询机器人/images/screenshot_20240620091811.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/Feishu天气查询机器人/images/screenshot_20240620091811.png -------------------------------------------------------------------------------- /achieves/Feishu天气查询机器人/images/screenshot_20240620091830.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/Feishu天气查询机器人/images/screenshot_20240620091830.png -------------------------------------------------------------------------------- /achieves/GitHub工单机器人/README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 | [主页](https://github.com/chatopera/chatbot-samples) | [Chatopera 云服务](https://docs.chatopera.com/) | [开发者文档](https://docs.chatopera.com/) | [博客专栏](https://chatopera.blog.csdn.net/) 4 | 5 |
6 | 7 | # OSSChat BOT 8 | 9 | ## What is OSSChat 10 | 11 | OSSChat is for bridging IM apps (e.g., WeChat) and Apache community tools (e.g., mailing list, and jira). 12 | 13 | Project - [https://github.com/kaiyuanshe/osschat](https://github.com/kaiyuanshe/osschat) 14 | 15 | ## Chatbot 16 | 17 | Enable done tasks automactically, the typical user scenarios like answer questions, detect intents and recognize user requirements. Chatbot could be proactive, interactive with Human with **Natural Language**. 18 | 19 | ## Featured 20 | 21 | OSSChat and Chatopera can make things even better, blown away people by the BOT Services. The underneath of OSSChat is wechaty, and wechaty can connect to Chatopera with [wechaty-chatopera](https://github.com/wechaty/wechaty-chatopera) Plugin. So every chat happens in Wechat Groups or private chat, Chatopera BOT can handle the response. 22 | 23 | With such abilities, the bot can handle opening issue, reply FAQs, etc. 24 | 25 | ### Exmaple 1: Analyze Chat history 26 | 27 | ![image](https://user-images.githubusercontent.com/3538629/135048914-798cc884-de12-4af2-8403-f63b353a9416.png) 28 | 29 | ### Example 2: Open Issue automatically 30 | 31 | ![image](https://user-images.githubusercontent.com/3538629/135048617-6abfb803-9672-4ec1-9a2c-65384e86a1ef.png) 32 | 33 | ## How to guides 34 | 35 | **The files in [chatbot-samples#OSSChatBot](https://github.com/chatopera/chatbot-samples/tree/master/projects/OSSChatBot) are for references, you don't have to run the OSSChat and Maintain Chat scripts on your own. To get OSSChat services for your organ, just follow below links.** 36 | 37 | * [How to setup up OSSChat for your community](https://github.com/kaiyuanshe/osschat/wiki/How-to-use-osschat) 38 | * [How to enable auto reply features with Chatopera BOT](https://github.com/kaiyuanshe/osschat/wiki/How-to-setup-auto-reply-with-Chatopera) 39 | -------------------------------------------------------------------------------- /achieves/GitHub工单机器人/bot.conversations.c66: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/GitHub工单机器人/bot.conversations.c66 -------------------------------------------------------------------------------- /achieves/GitHub工单机器人/bot.dicts.json: -------------------------------------------------------------------------------- 1 | { 2 | "sysdicts": { 3 | "@ANY": { 4 | "name": "@ANY", 5 | "description": "任意字符串", 6 | "samples": "任意字符串", 7 | "createdate": "2020-03-27 22:32:20", 8 | "updatedate": "2020-03-27 22:32:20", 9 | "referred": true, 10 | "type": "any", 11 | "vendor": "Chatopera", 12 | "used": false 13 | }, 14 | "@PER": { 15 | "name": "@PER", 16 | "description": "人名", 17 | "samples": "郭德纲;于谦", 18 | "createdate": "2019-09-06 22:53:54", 19 | "updatedate": "2019-12-31 22:03:20", 20 | "referred": true, 21 | "type": "ml", 22 | "vendor": "Chatopera", 23 | "used": false 24 | }, 25 | "@TIME": { 26 | "name": "@TIME", 27 | "description": "时间", 28 | "samples": "今天;下午一时", 29 | "createdate": "2019-09-06 22:53:54", 30 | "updatedate": "2019-12-31 22:03:20", 31 | "referred": true, 32 | "type": "ml", 33 | "vendor": "Chatopera", 34 | "used": false 35 | }, 36 | "@LOC": { 37 | "name": "@LOC", 38 | "description": "地名", 39 | "samples": "北京市;东京", 40 | "createdate": "2019-09-06 22:53:54", 41 | "updatedate": "2019-12-31 22:03:20", 42 | "referred": true, 43 | "type": "ml", 44 | "vendor": "Chatopera", 45 | "used": false 46 | }, 47 | "@ORG": { 48 | "name": "@ORG", 49 | "description": "组织机构", 50 | "samples": "北京华夏春松科技有限公司", 51 | "createdate": "2019-09-06 22:53:54", 52 | "updatedate": "2019-12-31 22:03:20", 53 | "referred": true, 54 | "type": "ml", 55 | "vendor": "Chatopera", 56 | "used": false 57 | } 58 | }, 59 | "patterndicts": {}, 60 | "vocabdicts": { 61 | "issue_category": [ 62 | { 63 | "word": "task", 64 | "synonyms": "任务", 65 | "createdate": "2021-10-07 13:52:01", 66 | "updatedate": "2021-10-07 13:52:01" 67 | }, 68 | { 69 | "word": "其它", 70 | "synonyms": "others", 71 | "createdate": "2021-10-07 13:52:01", 72 | "updatedate": "2021-10-07 13:52:01" 73 | }, 74 | { 75 | "word": "帮助", 76 | "synonyms": "help", 77 | "createdate": "2021-10-07 13:52:01", 78 | "updatedate": "2021-10-07 13:52:01" 79 | }, 80 | { 81 | "word": "文档", 82 | "synonyms": "docs", 83 | "createdate": "2021-10-07 13:52:01", 84 | "updatedate": "2021-10-07 13:52:01" 85 | }, 86 | { 87 | "word": "缺陷", 88 | "synonyms": "bug;defect", 89 | "createdate": "2021-10-07 13:52:01", 90 | "updatedate": "2021-10-07 13:52:01" 91 | }, 92 | { 93 | "word": "需求", 94 | "synonyms": "requirement", 95 | "createdate": "2021-10-07 13:52:01", 96 | "updatedate": "2021-10-07 13:52:01" 97 | }, 98 | { 99 | "word": "性能优化", 100 | "synonyms": "", 101 | "createdate": "2021-10-07 13:52:01", 102 | "updatedate": "2021-10-07 13:52:01" 103 | } 104 | ] 105 | } 106 | } -------------------------------------------------------------------------------- /achieves/GitHub工单机器人/bot.faqs.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /achieves/GitHub工单机器人/bot.intents.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "issue_template", 4 | "description": "", 5 | "createdate": "2021-10-07 13:52:04", 6 | "updatedate": "2021-10-07 13:52:04", 7 | "utters": [ 8 | { 9 | "utterance": "kickoff_issue_template", 10 | "createdate": "2021-10-07 13:52:04", 11 | "updatedate": "2021-10-07 13:52:04" 12 | } 13 | ], 14 | "slots": [ 15 | { 16 | "name": "issue_category", 17 | "requires": true, 18 | "createdate": "2021-10-07 13:52:04", 19 | "updatedate": "2021-10-07 13:52:04", 20 | "question": "Issue 是什么类型呢? 可选:需求,缺陷,文档,帮助,其它。", 21 | "dict": { 22 | "name": "issue_category", 23 | "builtin": false, 24 | "description": "", 25 | "samples": "", 26 | "createdate": "2021-10-07 13:52:01", 27 | "updatedate": "2021-10-07 13:52:01", 28 | "type": null, 29 | "vendor": null, 30 | "used": null 31 | } 32 | } 33 | ] 34 | } 35 | ] -------------------------------------------------------------------------------- /achieves/GitHub工单机器人/conversations/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "OSSChatKaiyuansheOsschat", 3 | "primaryLanguage": "zh_CN", 4 | "created": "2021-10-07T05:13:55.275Z", 5 | "modified": "2021-10-07T06:20:55.071Z", 6 | "description": "", 7 | "fallback": "我不明白您的意思。", 8 | "welcome": "你好!我是机器人客服。", 9 | "gambitLikeThreshold": 0.8, 10 | "gambitIntentQuestionMaxAttempts": 2, 11 | "historyCheckpoints": 100, 12 | "conversationTimeout": 1800, 13 | "trans_zhCN_ZhTw2ZhCn": true, 14 | "config": { 15 | "@SYS_INTENT_BRANCH": "dev", 16 | "BOT_NAME": "开源社机器人助手 OSSChat", 17 | "GITHUB_REPO_OWNER": "kaiyuanshe", 18 | "GITHUB_ACCESS_TOKEN": "YOUR GITHUB PERSONAL TOKEN", 19 | "GITHUB_REPO_NAME": "osschat" 20 | }, 21 | "version": "QNDZl6vH3", 22 | "conversations": [ 23 | { 24 | "name": "__post__", 25 | "enabled": true 26 | }, 27 | { 28 | "name": "greetings", 29 | "enabled": true 30 | }, 31 | { 32 | "name": "issues", 33 | "enabled": true 34 | } 35 | ] 36 | } -------------------------------------------------------------------------------- /achieves/GitHub工单机器人/conversations/plugin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Utilities 3 | */ 4 | 5 | function base64key(txt) { 6 | return (new Buffer(txt)).toString('base64'); 7 | } 8 | 9 | 10 | function issueTitleKey(userId) { 11 | let keyprefix = base64key(userId); 12 | return keyprefix + ":openissue:title"; 13 | } 14 | 15 | 16 | function issueBodyKey(userId) { 17 | let keyprefix = base64key(userId); 18 | return keyprefix + ":openissue:body"; 19 | } 20 | 21 | 22 | function issueAuthorKey(userId) { 23 | let keyprefix = base64key(userId); 24 | return keyprefix + ":openissue:author"; 25 | } 26 | 27 | /** 28 | * Bot Profile 29 | */ 30 | 31 | exports.getHelp = async function() { 32 | let txts = ["机器人助手有如下技能:", " 1. 自动创建 Issue - \"以上创建 Issue\", \"以上10条创建 Issue\", \"以上10条创建工单\""]; 33 | 34 | return txts.join("\n"); 35 | } 36 | 37 | exports.getBotName = async function() { 38 | return config.BOT_NAME || "机器人助手" 39 | } 40 | 41 | 42 | /** 43 | * Github Issues 44 | */ 45 | const octokit = new Octokit({ 46 | auth: config.GITHUB_ACCESS_TOKEN 47 | }); 48 | 49 | const SKIP_BY_CONTAINS = ["__@intent_", "lose__@intent_"]; 50 | 51 | exports.handleOpenGithubIssue = async function() { 52 | let entities = _.keyBy(this.intent.entities, 'name'); 53 | 54 | let title = await this.maestro.get(issueTitleKey(this.user.id)); 55 | let body = await this.maestro.get(issueBodyKey(this.user.id)); 56 | 57 | debug("[handleOpenGithubIssue] title", title) 58 | debug("[handleOpenGithubIssue] body", body) 59 | 60 | if (title && body) { 61 | // 创建者 62 | let author = await this.maestro.get(issueAuthorKey(this.user.id)) 63 | 64 | // 发送请求,创建 Issue 65 | // https://docs.chatopera.com/products/chatbot-platform/references/func-builtin/3rd-party.html#octokit 66 | let resp = await octokit.request(`POST /repos/${config.GITHUB_REPO_OWNER}/${config.GITHUB_REPO_NAME}/issues`, { 67 | owner: config.GITHUB_REPO_OWNER, 68 | repo: config.GITHUB_REPO_NAME, 69 | title: title.slice(0, 60), 70 | body: "Labels: " + entities["issue_category"].val + (author ? ", 创建者: " + author : "") + "\n" + body, 71 | labels: [entities["issue_category"].val] 72 | }); 73 | 74 | // 丢弃当前意图识别结果 75 | this.intent.drop = true; 76 | return `{CLEAR} {@__congtr_issue_created} ${resp.data.html_url}` 77 | } else { 78 | // 丢弃当前意图识别结果 79 | this.intent.drop = true; 80 | return "不存在开 Issue 的对话信息,或信息已经过期。" 81 | } 82 | } 83 | 84 | exports.initOpenGithubIssue = async function() { 85 | 86 | // debug("this.user hist", this.user.history.length) 87 | // debug("this.user hist", JSON.stringify(this.user.history[0])) 88 | let nubmers = await this.maestro.extractNumber(this.message.original) 89 | let hist_size = config["ISSUE_DEFAULT_HIST_SIZE"] || 20; 90 | if (nubmers.length > 0) 91 | hist_size = nubmers[0] 92 | 93 | // 获得聊天记录 94 | let contents = []; 95 | let senders = []; 96 | let timestamps = []; 97 | let chat_index = 0; 98 | for (let x of this.user.history) { 99 | let iscont = false; 100 | for (let y of SKIP_BY_CONTAINS) { 101 | if (x.input.original.includes(y)) { 102 | iscont = true; 103 | break; 104 | } 105 | } 106 | 107 | if (iscont) continue; 108 | 109 | // 发送内容 110 | contents.push(`${x.input.original}`); 111 | 112 | // 发送者 113 | if (x.input.extras && x.input.extras.room) { 114 | senders.push(x.input.extras.username); 115 | } else { 116 | senders.push(""); 117 | } 118 | 119 | // 发送时间 120 | let d = new Date(x.input.timestamp); 121 | let dh = this.maestro.formatTime(d.getTime(), "YYYY-MM-DD HH:mm:ss"); 122 | timestamps.push(dh); 123 | 124 | if (++chat_index >= hist_size) break; 125 | } 126 | 127 | if (contents.length == 0) { 128 | return "机器人技能刚刚刷新,请再说一下 Issue 的内容!"; 129 | } 130 | 131 | chat_index = 0; 132 | let chats = []; 133 | for (let i = contents.length - 1; i >= 0; i--) { 134 | ++chat_index; 135 | chats.push(`\`${senders[i]||chat_index}\`: ${contents[i]}            *(${timestamps[i]})*`); 136 | } 137 | 138 | // 生成标题和内容 139 | let title = (await this.maestro.digest(contents.join("。"), 30)).join(" "); 140 | let body = ["# 描述", "", `来自 ${this.user.id} (微信群或私聊)对话记录`, ""]; 141 | 142 | body = _.concat(body, chats); 143 | 144 | body.push(""); 145 | body.push("---"); 146 | body.push("提示:以上为未整理的聊天历史,更多介绍查看评论信息。"); 147 | body.push("
:speech_balloon: Opened by OSSChat automatically.
"); 148 | 149 | await this.maestro.set(issueTitleKey(this.user.id), title, 3600); 150 | await this.maestro.set(issueBodyKey(this.user.id), body.join("\n"), 3600); 151 | 152 | if (this.message.extras && this.message.extras.room) { 153 | await this.maestro.set(issueAuthorKey(this.user.id), this.message.extras.username, 3600); 154 | } 155 | 156 | return "^topicRedirect(\"issues\", \"issue_template\", true)" 157 | 158 | } 159 | -------------------------------------------------------------------------------- /achieves/GitHub工单机器人/conversations/zh_CN.__post__.ms: -------------------------------------------------------------------------------- 1 | + (帮助|help|h) 2 | - ^getHelp() 3 | -------------------------------------------------------------------------------- /achieves/GitHub工单机器人/conversations/zh_CN.greetings.ms: -------------------------------------------------------------------------------- 1 | /** 2 | * 获得示例程序,快入开始! 3 | * https://github.com/chatopera/chatbot-samples 4 | */ 5 | 6 | + 你好 7 | - {@_greetings_} 8 | 9 | + _greetings_ 10 | - {keep} 你好!我是^getBotName() 11 | -------------------------------------------------------------------------------- /achieves/GitHub工单机器人/conversations/zh_CN.issues.ms: -------------------------------------------------------------------------------- 1 | /** 2 | * GitHub Issues 相关 3 | */ 4 | 5 | 6 | intent issue_template 7 | - ^handleOpenGithubIssue() 8 | 9 | + ${0.7}{以上开 Issue|我要开 Issue|以上创建工单|以上条建工单|建工单|以上条建 Issue|以上条创建工单|创建工单|创建 Issue|以上创建 Issue} 10 | - ^initOpenGithubIssue() 11 | 12 | + __congtr_issue_created 13 | - 小主, Issue 已经创建完成 14 | - Issue 为您建立好了,及时补充更多信息吧 15 | - 以为您创建 Issue,来补充信息吧 16 | 17 | -------------------------------------------------------------------------------- /achieves/README.md: -------------------------------------------------------------------------------- 1 | # Achieves 2 | 3 | 归档的示例项目。 4 | 5 | # 建模工具 6 | 7 | 在实现聊天机器人前,尤其是多轮对话,完成一个任务,要先考虑好它的对话流程。然后再根据 [Chatopera 机器人平台](https://bot.chatopera.com) 提供的知识库、多轮对话和意图识别模块进行实现。 8 | 9 | 在对话模板中,我们提供两种类型的,完成建模任务的方案。 10 | 11 | ## Excel 12 | 13 | 查看使用 Excel 形式描述的话术建模文件,在对话模板项目中打开 `flow.xlsx`。 14 | 15 | 比如,[活动通知话术模板 Excel 文件](./活动通知)。 16 | 17 | ## UML 流程图 18 | 19 | 对话模板中,有的带有[对话流程的建模项目],即以"`.mdj`"结尾的文件,通常被命名为 `flow.mdj`,使用 StarUML 可以打开项目。 20 | 21 | 比如,一个对话流程图示例:[活动通知](./活动通知)。 22 | 23 | ![](./assets/6.png) 24 | 25 | 对话流程借鉴 UML Activity Diagram 建模,[入门参考文档](https://chatopera.blog.csdn.net/article/details/108133764),内附元素定义、StarUML 软件下载等。 -------------------------------------------------------------------------------- /achieves/保健品/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/保健品/.gitkeep -------------------------------------------------------------------------------- /achieves/保健品/README.MD: -------------------------------------------------------------------------------- 1 | # 保健品机器人 2 | 第一步:下载json格式的知识库文件,并导入云平台知识库模块 (https://bot.chatopera.com) 3 | 第二步:下载并安装多轮对话设计器 4 | 第三步:多轮对话设计器中导入c66文件 5 | 第四步:在多轮对话设计器中对c66文件进行编辑、修改 6 | 说明文档:https://docs.chatopera.com/products/chatbot-platform/conversation.html -------------------------------------------------------------------------------- /achieves/保健品/bot.conversations.c66: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/保健品/bot.conversations.c66 -------------------------------------------------------------------------------- /achieves/保健品/bot.faqs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "docId": "AXUR7Fu7Ey2xfNJEUjZd", 4 | "categories": [], 5 | "enabled": true, 6 | "post": "我现在就是白内障 青光眼 眼睛看不清楚", 7 | "replies": [ 8 | { 9 | "rtype": "plain", 10 | "content": "那您这个情况要注意的,因为眼睛视力要是不好,走路可能会摔倒了,要是摔倒了,就给您的子女天麻烦了,我们这个美国进口的极藻啊,非常适合您去用" 11 | } 12 | ], 13 | "similarQuestions": [ 14 | "青光眼 ", 15 | "眼睛看不清楚", 16 | "我现在就是白内障 " 17 | ] 18 | }, 19 | { 20 | "docId": "AXUR672kEy2xfNJEUjZU", 21 | "categories": [], 22 | "enabled": true, 23 | "post": "我有骨质疏松,内风湿性关节炎,外风湿性关节炎,腰间盘突出,颈椎增生,腿疼,腿麻", 24 | "replies": [ 25 | { 26 | "rtype": "plain", 27 | "content": "那您要注意的,因为这些会导致您就会出现半身不遂,全身瘫痪的,手脚变形,那是很痛苦, 但是叔叔你也不用担心,我们这个美国进口的极藻啊,非常适合您去用" 28 | } 29 | ], 30 | "similarQuestions": [ 31 | "腿疼", 32 | "腿疼,腿麻", 33 | "颈椎增生", 34 | "腰间盘突出", 35 | "外风湿性关节炎", 36 | "内风湿性关节炎", 37 | "我有骨质疏松" 38 | ] 39 | }, 40 | { 41 | "docId": "AXUR6sUMEy2xfNJEUjZO", 42 | "categories": [], 43 | "enabled": true, 44 | "post": "我有 脑血栓,心肌缺血,糖尿病的,心脑血管", 45 | "replies": [ 46 | { 47 | "rtype": "plain", 48 | "content": "那这个你要注意了,长期的心脑血管病会引起脑血酸,脑年痴呆,走路不行,严重会引起大脑出血,那就麻烦了,我们这个美国进口的极藻啊,非常适合您去用。" 49 | } 50 | ], 51 | "similarQuestions": [ 52 | "糖尿病的", 53 | "心脑血管", 54 | "心肌缺血", 55 | "我有 脑血栓" 56 | ] 57 | }, 58 | { 59 | "docId": "AXUR6hSuEy2xfNJEUjZK", 60 | "categories": [], 61 | "enabled": true, 62 | "post": "我有 血压高,血糖高,血脂高", 63 | "replies": [ 64 | { 65 | "rtype": "plain", 66 | "content": "那这个你要注意了,长期的血压,血糖高,会引起心脑血管,脑出血,脑年痴呆等问题,我们这个美国进口的极藻啊,非常适合您去用" 67 | } 68 | ], 69 | "similarQuestions": [ 70 | "血脂高", 71 | "血糖高", 72 | "我有 血压高" 73 | ] 74 | }, 75 | { 76 | "docId": "AXUR6YQtEy2xfNJEUjZH", 77 | "categories": [], 78 | "enabled": true, 79 | "post": "我有前列腺问题,晚上尿频尿急的", 80 | "replies": [ 81 | { 82 | "rtype": "plain", 83 | "content": "那这个您要注意了,因为您晚上尿频尿急,睡眠不好,会引起血压,血糖增高,时间长了还会引起尿潴流,我们这个美国进口的极藻啊,非常适合您去用。到时候拿到了产品,瓶子上有说明书。" 84 | } 85 | ], 86 | "similarQuestions": [ 87 | "晚上尿频尿急的", 88 | "我有前列腺问题" 89 | ] 90 | }, 91 | { 92 | "docId": "AXUR6QBEEy2xfNJEUjZB", 93 | "categories": [], 94 | "enabled": true, 95 | "post": "售后服务,不会后期没人理了吧,之后有问题怎么办,之后有人负责吗,有人跟进疗效吗", 96 | "replies": [ 97 | { 98 | "rtype": "plain", 99 | "content": "这点你可以放心,我们既然免费赠送产品,就是希望你用的好了后期可以继续购买,不可能不负责任,您拿到产品后,会有专业老师跟进指导的。" 100 | } 101 | ], 102 | "similarQuestions": [ 103 | "有人跟进疗效吗", 104 | "之后有人负责吗", 105 | "之后有问题怎么办", 106 | "不会后期没人理了吧", 107 | "售后服务" 108 | ] 109 | }, 110 | { 111 | "docId": "AXUR6D8wEy2xfNJEUjY4", 112 | "categories": [], 113 | "enabled": true, 114 | "post": "多久见效,要吃多久能看到效果,多长时间能看到效果,有又并发症,在吃降糖药,在打胰岛素", 115 | "replies": [ 116 | { 117 | "rtype": "plain", 118 | "content": "像正常的情况下,一般吃下来半个月左右就有效果的,不过每个人的体质不一样,时间可能也有所不同,不过您也不要着急,到时候拿到了我们会给您安排专业的老师告诉您怎么吃效果是最快最好的" 119 | } 120 | ], 121 | "similarQuestions": [ 122 | "在打胰岛素", 123 | "在吃降糖药", 124 | "有又并发症", 125 | "多长时间能看到效果", 126 | "多久见效", 127 | "要吃多久能看到效果" 128 | ] 129 | }, 130 | { 131 | "docId": "AXUR51tmEy2xfNJEUjYv", 132 | "categories": [], 133 | "enabled": true, 134 | "post": "原价多少,正常销售价,市场价,正装什么规格,正装能吃多久,正装能吃几天", 135 | "replies": [ 136 | { 137 | "rtype": "plain", 138 | "content": "正常一个疗程3瓶3个月的量,原价1826元,但此次活动您只需付个189块海关税,产品就可以寄给您了。" 139 | } 140 | ], 141 | "similarQuestions": [ 142 | "原价多少", 143 | "正装能吃几天", 144 | "正装能吃多久", 145 | "正装什么规格", 146 | "市场价", 147 | "原价多少", 148 | "正常销售价" 149 | ] 150 | }, 151 | { 152 | "docId": "AXUR5f7mEy2xfNJEUjYl", 153 | "categories": [], 154 | "enabled": true, 155 | "post": "有没有不好的影响,有这么好吗,有这么大效果吗,没效果怎么办,质量保证", 156 | "replies": [ 157 | { 158 | "rtype": "plain", 159 | "content": "我们产品都卖了好几年,老百姓的口碑是非常好的,您吃的好,还希望你给我们介绍朋友过来,您把心放到肚子里,等你拿到我们产品我会给你来电话的,叫您怎么服用,我会7到10天给您打会电话,跟踪您的病情。" 160 | } 161 | ], 162 | "similarQuestions": [ 163 | "质量保证", 164 | "品质怎么样", 165 | "没效果怎么办", 166 | "有这么大效果吗", 167 | "有没有不好的影响", 168 | "有副作用吗", 169 | "有没有副作用" 170 | ] 171 | }, 172 | { 173 | "docId": "AXUR5IgtEy2xfNJEUjYc", 174 | "categories": [], 175 | "enabled": true, 176 | "post": "产品说明书", 177 | "replies": [ 178 | { 179 | "rtype": "plain", 180 | "content": "我们瓶子上面有说明书,等你拿到我们产品,我会给你来电话,叫你怎么服用这个产品,您要坚持服用,身体调理的好了,到时候,有朋友给我们介绍过来,可以吧。" 181 | } 182 | ], 183 | "similarQuestions": [ 184 | "服用剂量", 185 | "服用量", 186 | "每天服用几粒", 187 | "怎么服用", 188 | "使用说明书", 189 | "有使用说明吧", 190 | "有说明书吧" 191 | ] 192 | }, 193 | { 194 | "docId": "AXUR4zdTEy2xfNJEUjYT", 195 | "categories": [], 196 | "enabled": true, 197 | "post": "邮寄时效,寄几天,快递费多少,怎么拿货,从哪边发出,太远了,过不去", 198 | "replies": [ 199 | { 200 | "rtype": "plain", 201 | "content": "我们这边都是顺丰快递,直接空运给您送过去的,一到两天就给您送到,到时候到了您的当地,快递员会给您打电话的,直接送到您家的" 202 | } 203 | ], 204 | "similarQuestions": [ 205 | "从哪边发货", 206 | "怎么取产品", 207 | "哪家快递公司", 208 | "哪个快递", 209 | "什么快递", 210 | "几天到", 211 | "几天能收到", 212 | "快递多久到" 213 | ] 214 | }, 215 | { 216 | "docId": "AXUR4U4dEy2xfNJEUjYL", 217 | "categories": [], 218 | "enabled": true, 219 | "post": "快递费,快递费要这么贵吗/不才十几块钱/几块钱不得了了/哪有这么贵", 220 | "replies": [ 221 | { 222 | "rtype": "plain", 223 | "content": "我们现在收的是海关税,产品的费用1826我们单位跟美国单位给你承担了,189块海关税,你能吃3个月,一个月花66,一天花2块2毛钱还贵,2块2毛钱能卖什么东西,买包烟,买瓶酒都不够,买把小白菜都不够,但是能给您带来健康,健康是无价之宝。" 224 | } 225 | ], 226 | "similarQuestions": [ 227 | "快递费", 228 | "哪有这么贵", 229 | "几块钱不得了了", 230 | "不才十几块钱", 231 | "快递费要这么贵吗" 232 | ] 233 | }, 234 | { 235 | "docId": "AXUR4EvTEy2xfNJEUjYC", 236 | "categories": [], 237 | "enabled": true, 238 | "post": "一个疗程吗,几盒,几天的量,能申请多少,申请几份,有多少量,能用几天", 239 | "replies": [ 240 | { 241 | "rtype": "plain", 242 | "content": "我给您寄的是一个疗程3瓶3个月的量的美国原装进口的极澡。" 243 | } 244 | ], 245 | "similarQuestions": [ 246 | "能用多长日子", 247 | "能吃多长时间", 248 | "能用多长时间?", 249 | "可以多申请几份吗", 250 | "多少量", 251 | "几个疗程", 252 | "可以用几天", 253 | "服用几天" 254 | ] 255 | }, 256 | { 257 | "docId": "AXUR3g2zEy2xfNJEUjX9", 258 | "categories": [], 259 | "enabled": true, 260 | "post": "你声音挺好听啊,能请你吃饭吗,出来吃饭", 261 | "replies": [ 262 | { 263 | "rtype": "plain", 264 | "content": "谢谢,我这人比较容易害羞的。" 265 | } 266 | ], 267 | "similarQuestions": [ 268 | "能请你吃饭吗", 269 | "出来吃饭", 270 | "你声音挺好听啊,能请你吃饭吗" 271 | ] 272 | }, 273 | { 274 | "docId": "AXUR3X7XEy2xfNJEUjX8", 275 | "categories": [], 276 | "enabled": true, 277 | "post": "等一下", 278 | "replies": [ 279 | { 280 | "rtype": "plain", 281 | "content": "哦,好的。" 282 | } 283 | ], 284 | "similarQuestions": [] 285 | }, 286 | { 287 | "docId": "AXUR3TyuEy2xfNJEUjX7", 288 | "categories": [], 289 | "enabled": true, 290 | "post": "你有没有在听我说话?", 291 | "replies": [ 292 | { 293 | "rtype": "plain", 294 | "content": "哦,不好意思,您请讲! 我在听" 295 | } 296 | ], 297 | "similarQuestions": [] 298 | }, 299 | { 300 | "docId": "AXUR3Oq5Ey2xfNJEUjX2", 301 | "categories": [], 302 | "enabled": true, 303 | "post": "你发个短信/微信给我吧?怎么联系,怎么找你", 304 | "replies": [ 305 | { 306 | "rtype": "plain", 307 | "content": "我等一会会把我的私人手机号码发您的,您注意保存一下的" 308 | } 309 | ], 310 | "similarQuestions": [ 311 | "你发个短信给我吧?", 312 | "怎么找你", 313 | "怎么联系", 314 | "你发个微信给我吧?" 315 | ] 316 | }, 317 | { 318 | "docId": "AXUR2_MZEy2xfNJEUjX1", 319 | "categories": [], 320 | "enabled": true, 321 | "post": "你们怎么有我号码的?", 322 | "replies": [ 323 | { 324 | "rtype": "plain", 325 | "content": "因为您之前参加过一些领书的活动,这边网上都是有您的资料的" 326 | } 327 | ], 328 | "similarQuestions": [] 329 | }, 330 | { 331 | "docId": "AXUR26dvEy2xfNJEUjX0", 332 | "categories": [], 333 | "enabled": true, 334 | "post": "你是不是机器人?", 335 | "replies": [ 336 | { 337 | "rtype": "plain", 338 | "content": "这个不重要啦,我们也是想把好的服务推荐给您。" 339 | } 340 | ], 341 | "similarQuestions": [] 342 | }, 343 | { 344 | "docId": "AXUR2tPEEy2xfNJEUjXx", 345 | "categories": [], 346 | "enabled": true, 347 | "post": "你太不专业了,这都不知道?", 348 | "replies": [ 349 | { 350 | "rtype": "plain", 351 | "content": "不好意思哦,我这边是新来的,请您谅解!稍后我安排我们专业老师再跟您沟通好吧?" 352 | } 353 | ], 354 | "similarQuestions": [ 355 | "这都不知道?", 356 | "你太不专业了" 357 | ] 358 | }, 359 | { 360 | "docId": "AXUR2ma2Ey2xfNJEUjXw", 361 | "categories": [], 362 | "enabled": true, 363 | "post": "你多大了?", 364 | "replies": [ 365 | { 366 | "rtype": "plain", 367 | "content": "我是标准的90后呢。" 368 | } 369 | ], 370 | "similarQuestions": [] 371 | }, 372 | { 373 | "docId": "AXUR2hHuEy2xfNJEUjXv", 374 | "categories": [], 375 | "enabled": true, 376 | "post": "你叫什么名字?", 377 | "replies": [ 378 | { 379 | "rtype": "plain", 380 | "content": "我姓张,您叫我小张就可以了" 381 | } 382 | ], 383 | "similarQuestions": [] 384 | }, 385 | { 386 | "docId": "AXUR2ccFEy2xfNJEUjXs", 387 | "categories": [], 388 | "enabled": true, 389 | "post": "你们是不是骗子啊?靠谱吗?", 390 | "replies": [ 391 | { 392 | "rtype": "plain", 393 | "content": "这个您可以放心好了,现在骗子骗人最起码也要骗个几千上万的,谁会骗您189元的,而且我们还要给您寄3瓶美国进口的极藻,还要帮您出物流费的,您觉的我们有必要这样来骗人吗" 394 | } 395 | ], 396 | "similarQuestions": [ 397 | "靠谱吗?", 398 | "你们是不是骗子啊?" 399 | ] 400 | }, 401 | { 402 | "docId": "AXUR2VUGEy2xfNJEUjXj", 403 | "categories": [], 404 | "enabled": true, 405 | "post": "价格怎么样?怎么参加,怎么体验,什么活动,不是免费的吗,怎么还要收钱,还要钱啊,要钱吗", 406 | "replies": [ 407 | { 408 | "rtype": "plain", 409 | "content": "产品是免费给到您的,到货后,你只要给个海关税189元,多一分钱都不要多给哈。希望您吃好了一定不要忘了给我们做宣传哈,没问题吧?" 410 | } 411 | ], 412 | "similarQuestions": [ 413 | "要钱吗", 414 | "还要钱啊,", 415 | "怎么还要收钱", 416 | "不是免费的吗", 417 | "什么活动", 418 | "怎么体验", 419 | "怎么参加", 420 | "价格怎么样?" 421 | ] 422 | }, 423 | { 424 | "docId": "AXUR2BlTEy2xfNJEUjXg", 425 | "categories": [], 426 | "enabled": true, 427 | "post": "你们公司在哪里?公司XXXXXX", 428 | "replies": [ 429 | { 430 | "rtype": "plain", 431 | "content": "我们公司在XXXXXX,您可以了解下哦" 432 | } 433 | ], 434 | "similarQuestions": [ 435 | "公司XXXXXX", 436 | "你们公司在哪里?" 437 | ] 438 | }, 439 | { 440 | "docId": "AXUR15jcEy2xfNJEUjXb", 441 | "categories": [], 442 | "enabled": true, 443 | "post": "你们公司叫什么?", 444 | "replies": [ 445 | { 446 | "rtype": "plain", 447 | "content": "我们是中国XXXXXX健康协会的,我们给您带的是美国原装进口的级澡,就是希望您把身体调理好了,到时候帮我们多做做宣传的" 448 | } 449 | ], 450 | "similarQuestions": [ 451 | "哪个药厂", 452 | "生产企业", 453 | "厂商", 454 | "公司介绍" 455 | ] 456 | } 457 | ] -------------------------------------------------------------------------------- /achieves/保健品/flow.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/保健品/flow.xlsx -------------------------------------------------------------------------------- /achieves/信用卡/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/信用卡/.gitkeep -------------------------------------------------------------------------------- /achieves/信用卡/README.MD: -------------------------------------------------------------------------------- 1 | # 信用卡机器人 2 | 3 | 第一步:在 bot 平台导入知识库文件 4 | 第二步:下载多轮对话设计器 5 | 第三步:安装多轮对话设计器 6 | 第四步:多轮对话设计器中导入 c66 文件 7 | 第五步:通过多轮对话设计器对 c66 文件进行修改、调试 8 | -------------------------------------------------------------------------------- /achieves/信用卡/bot.conversations.c66: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/信用卡/bot.conversations.c66 -------------------------------------------------------------------------------- /achieves/信用卡/bot.faqs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "docId": "AXUSR2krEy2xfNJEUjad", 4 | "categories": [], 5 | "enabled": true, 6 | "post": "你们现在还在上班吗", 7 | "replies": [ 8 | { 9 | "rtype": "plain", 10 | "content": "是呀,您需要的话,我现在就可以发送短信给你。" 11 | } 12 | ], 13 | "similarQuestions": [] 14 | }, 15 | { 16 | "docId": "AXUSRxr6Ey2xfNJEUjaa", 17 | "categories": [], 18 | "enabled": true, 19 | "post": "有年费吗?年费怎么收", 20 | "replies": [ 21 | { 22 | "rtype": "plain", 23 | "content": "我们这张卡是免年费的,请您放心。" 24 | } 25 | ], 26 | "similarQuestions": [ 27 | "年费怎么收", 28 | "有年费吗?" 29 | ] 30 | }, 31 | { 32 | "docId": "AXUSRqxfEy2xfNJEUjaX", 33 | "categories": [], 34 | "enabled": true, 35 | "post": "办理费用,收不收钱", 36 | "replies": [ 37 | { 38 | "rtype": "plain", 39 | "content": "为您办理信用卡是免费的,没有任何手续费。" 40 | } 41 | ], 42 | "similarQuestions": [ 43 | "收不收钱", 44 | "办理费用" 45 | ] 46 | }, 47 | { 48 | "docId": "AXUSRizREy2xfNJEUjaW", 49 | "categories": [], 50 | "enabled": true, 51 | "post": "为什么不用银行客服电话给我来电", 52 | "replies": [ 53 | { 54 | "rtype": "plain", 55 | "content": "这是我的电话号码,稍候我可以让银行给您来电,请您注意接通。" 56 | } 57 | ], 58 | "similarQuestions": [] 59 | }, 60 | { 61 | "docId": "AXUSRda0Ey2xfNJEUjaT", 62 | "categories": [], 63 | "enabled": true, 64 | "post": "好处, 为什么要选你们", 65 | "replies": [ 66 | { 67 | "rtype": "plain", 68 | "content": "这边为您推荐的也是市场占有率高,活动多,额度也比较高的银行信用卡,而且办理起来资料简单,点击短信链接在线申请,方便快捷,后期还款也方便,您可以考虑看看的。" 69 | } 70 | ], 71 | "similarQuestions": [ 72 | "好处", 73 | "为什么要选你们" 74 | ] 75 | }, 76 | { 77 | "docId": "AXUSRWkpEy2xfNJEUjaS", 78 | "categories": [], 79 | "enabled": true, 80 | "post": "利息多少", 81 | "replies": [ 82 | { 83 | "rtype": "plain", 84 | "content": "您好,后期使用的话您到还款日把钱全额还上就不会产生利息了。" 85 | } 86 | ], 87 | "similarQuestions": [] 88 | }, 89 | { 90 | "docId": "AXUSRNa3Ey2xfNJEUjaQ", 91 | "categories": [], 92 | "enabled": true, 93 | "post": " 多久拿到卡", 94 | "replies": [ 95 | { 96 | "rtype": "plain", 97 | "content": "银行上门后,当天会有审核结果,一般7天内会收到卡片。" 98 | } 99 | ], 100 | "similarQuestions": [] 101 | }, 102 | { 103 | "docId": "AXUSRIhXEy2xfNJEUjaP", 104 | "categories": [], 105 | "enabled": true, 106 | "post": "有些什么卡", 107 | "replies": [ 108 | { 109 | "rtype": "plain", 110 | "content": "此次邀请您办理的是白金卡,其他卡种您可以通过短信链接了解一下。" 111 | } 112 | ], 113 | "similarQuestions": [] 114 | }, 115 | { 116 | "docId": "AXUSRDFaEy2xfNJEUjaK", 117 | "categories": [], 118 | "enabled": true, 119 | "post": "流程, 要求, 材料,上门", 120 | "replies": [ 121 | { 122 | "rtype": "plain", 123 | "content": "流程很简单,您需要的办理的话,直接通过发送给您的手机短信链接填写资料即可,只需要一分钟就可以完成填写。" 124 | } 125 | ], 126 | "similarQuestions": [ 127 | "要求", 128 | "上门", 129 | " 材料", 130 | "流程" 131 | ] 132 | }, 133 | { 134 | "docId": "AXUSQ2t5Ey2xfNJEUjaG", 135 | "categories": [], 136 | "enabled": true, 137 | "post": "你声音挺好听啊,能请你吃饭吗 ", 138 | "replies": [ 139 | { 140 | "rtype": "plain", 141 | "content": "谢谢,我这人比较容易害羞的。" 142 | } 143 | ], 144 | "similarQuestions": [ 145 | "能请你吃饭吗 ", 146 | "你声音挺好听啊" 147 | ] 148 | }, 149 | { 150 | "docId": "AXUSQvZ8Ey2xfNJEUjaF", 151 | "categories": [], 152 | "enabled": true, 153 | "post": "等一下", 154 | "replies": [ 155 | { 156 | "rtype": "plain", 157 | "content": "哦,好的。" 158 | } 159 | ], 160 | "similarQuestions": [] 161 | }, 162 | { 163 | "docId": "AXUSQrtTEy2xfNJEUjaE", 164 | "categories": [], 165 | "enabled": true, 166 | "post": "你有没有在听我说话?", 167 | "replies": [ 168 | { 169 | "rtype": "plain", 170 | "content": "哦,不好意思,您请讲! 我在听" 171 | } 172 | ], 173 | "similarQuestions": [] 174 | }, 175 | { 176 | "docId": "AXUSQlb0Ey2xfNJEUjaB", 177 | "categories": [], 178 | "enabled": true, 179 | "post": "你发个短信/微信给我", 180 | "replies": [ 181 | { 182 | "rtype": "plain", 183 | "content": "这样吧,稍后安排我们客户经理给您发个短信,上面有联系方式和相关资料,您先看下,有问题随时沟通,好吧?" 184 | } 185 | ], 186 | "similarQuestions": [ 187 | "你发个微信给我", 188 | "你发个短信给我" 189 | ] 190 | }, 191 | { 192 | "docId": "AXUSQcGsEy2xfNJEUjaA", 193 | "categories": [], 194 | "enabled": true, 195 | "post": "你们怎么有我号码的?", 196 | "replies": [ 197 | { 198 | "rtype": "plain", 199 | "content": "我们是电脑随机拨号码段的,如果不巧打扰到您,非常抱歉了。" 200 | } 201 | ], 202 | "similarQuestions": [] 203 | }, 204 | { 205 | "docId": "AXUSQWzYEy2xfNJEUjZ_", 206 | "categories": [], 207 | "enabled": true, 208 | "post": "你是不是机器人?", 209 | "replies": [ 210 | { 211 | "rtype": "plain", 212 | "content": "您真聪明,我是机器人,我想把好的信用卡服务推荐给您。" 213 | } 214 | ], 215 | "similarQuestions": [] 216 | }, 217 | { 218 | "docId": "AXUSQReTEy2xfNJEUjZ8", 219 | "categories": [], 220 | "enabled": true, 221 | "post": "你太不专业了,这都不知道?", 222 | "replies": [ 223 | { 224 | "rtype": "plain", 225 | "content": "不好意思哦,我这边是负责确定客户意向的,稍后安排我们专业的银行客户经理再联系您为您解答,好吧?" 226 | } 227 | ], 228 | "similarQuestions": [ 229 | "这都不知道?", 230 | "你太不专业了" 231 | ] 232 | }, 233 | { 234 | "docId": "AXUSQJUpEy2xfNJEUjZ7", 235 | "categories": [], 236 | "enabled": true, 237 | "post": "你多大了?", 238 | "replies": [ 239 | { 240 | "rtype": "plain", 241 | "content": "我是标准的90后呢。" 242 | } 243 | ], 244 | "similarQuestions": [] 245 | }, 246 | { 247 | "docId": "AXUSQCQOEy2xfNJEUjZ5", 248 | "categories": [], 249 | "enabled": true, 250 | "post": "你叫什么名字?", 251 | "replies": [ 252 | { 253 | "rtype": "plain", 254 | "content": "我姓陶,您叫我小陶就可以了。" 255 | } 256 | ], 257 | "similarQuestions": [] 258 | }, 259 | { 260 | "docId": "AXUSP7eqEy2xfNJEUjZ1", 261 | "categories": [], 262 | "enabled": true, 263 | "post": "你们是不是骗子啊?靠谱吗?", 264 | "replies": [ 265 | { 266 | "rtype": "plain", 267 | "content": "办理信用卡不收您任何费用的,我们发送的短信链接都是兴业银行的官方网址,您可以当面核查,不用担心。" 268 | } 269 | ], 270 | "similarQuestions": [ 271 | "靠谱吗?", 272 | "你们是不是骗子啊?" 273 | ] 274 | }, 275 | { 276 | "docId": "AXUSPzl-Ey2xfNJEUjZ0", 277 | "categories": [], 278 | "enabled": true, 279 | "post": "公司地址", 280 | "replies": [ 281 | { 282 | "rtype": "plain", 283 | "content": "兴业银行营业网点很多的,您可以在百度上查到的。" 284 | } 285 | ], 286 | "similarQuestions": [] 287 | }, 288 | { 289 | "docId": "AXUSPu7nEy2xfNJEUjZz", 290 | "categories": [], 291 | "enabled": true, 292 | "post": "公司介绍", 293 | "replies": [ 294 | { 295 | "rtype": "plain", 296 | "content": "我这边是兴业银行信用卡中心的,来电是想邀请您办理兴业银行白金信用卡,商户优惠活动也很多,您可以申请一张备用的。" 297 | } 298 | ], 299 | "similarQuestions": [] 300 | } 301 | ] -------------------------------------------------------------------------------- /achieves/信用卡/flow.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/信用卡/flow.xlsx -------------------------------------------------------------------------------- /achieves/回访/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/回访/.gitkeep -------------------------------------------------------------------------------- /achieves/回访/README.md: -------------------------------------------------------------------------------- 1 | # 回访机器人 2 | 3 | 第一步:下载 json 格式的知识库文件,并导入云平台(https://bot.chatopera.com)知识库模块 4 | 第二步:下载并安装多轮对话设计器 5 | 第三步:多轮对话设计器中导入 c66 文件 6 | 第四步:在多轮对话设计器中对 c66 文件进行编辑、修改 7 | -------------------------------------------------------------------------------- /achieves/回访/bot.conversations.c66: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/回访/bot.conversations.c66 -------------------------------------------------------------------------------- /achieves/回访/bot.faqs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "docId": "AXURNVevEy2xfNJEUjTs", 4 | "categories": [], 5 | "enabled": true, 6 | "post": "活动到什么时候?", 7 | "replies": [ 8 | { 9 | "rtype": "plain", 10 | "content": "下周末前都可以来领取的。" 11 | } 12 | ], 13 | "similarQuestions": [] 14 | }, 15 | { 16 | "docId": "AXURNQrsEy2xfNJEUjTp", 17 | "categories": [], 18 | "enabled": true, 19 | "post": "什么礼品,什么餐具", 20 | "replies": [ 21 | { 22 | "rtype": "plain", 23 | "content": "礼品是价值128元的七彩珍珠碗。" 24 | } 25 | ], 26 | "similarQuestions": [ 27 | "什么餐具", 28 | "什么礼品" 29 | ] 30 | }, 31 | { 32 | "docId": "AXURNJffEy2xfNJEUjTi", 33 | "categories": [], 34 | "enabled": true, 35 | "post": "早就退保了", 36 | "replies": [ 37 | { 38 | "rtype": "plain", 39 | "content": "没关系的,只要您之前购买过车险、寿险、银行理财,都可以免费领取的。" 40 | } 41 | ], 42 | "similarQuestions": [ 43 | "早退了", 44 | "不是你们的客户", 45 | "现在没存钱在你们家", 46 | "现在没你家的保险了", 47 | "你家的保险退了", 48 | "早就退保了,保险已经退了" 49 | ] 50 | }, 51 | { 52 | "docId": "AXURMwSXEy2xfNJEUjTd", 53 | "categories": [], 54 | "enabled": true, 55 | "post": "你声音挺好听啊,能请你吃饭吗,出来吃饭", 56 | "replies": [ 57 | { 58 | "rtype": "plain", 59 | "content": "谢谢,我这人比较容易害羞的。" 60 | } 61 | ], 62 | "similarQuestions": [ 63 | "出来吃饭", 64 | "能请你吃饭吗", 65 | "能请你吃饭吗,出来吃饭", 66 | "你声音挺好听啊" 67 | ] 68 | }, 69 | { 70 | "docId": "AXURMkDGEy2xfNJEUjTc", 71 | "categories": [], 72 | "enabled": true, 73 | "post": "等一下", 74 | "replies": [ 75 | { 76 | "rtype": "plain", 77 | "content": "哦,好的" 78 | } 79 | ], 80 | "similarQuestions": [] 81 | }, 82 | { 83 | "docId": "AXURMf9WEy2xfNJEUjTb", 84 | "categories": [], 85 | "enabled": true, 86 | "post": "有没有在听我说话", 87 | "replies": [ 88 | { 89 | "rtype": "plain", 90 | "content": "噢,不好意思,您请说!" 91 | } 92 | ], 93 | "similarQuestions": [] 94 | }, 95 | { 96 | "docId": "AXURMZICEy2xfNJEUjTR", 97 | "categories": [], 98 | "enabled": true, 99 | "post": "你发个短信/微信给我吧", 100 | "replies": [ 101 | { 102 | "rtype": "plain", 103 | "content": "这样吧,稍后我把公司地址和接待人员的电话发送到您的手机上,上面有联系方式和相关资料,您留意查收,好吧?" 104 | } 105 | ], 106 | "similarQuestions": [ 107 | "资料发我先看下", 108 | "资料发我先看下", 109 | "发我资料看下", 110 | "发我资料看下", 111 | "怎么联系你", 112 | "怎么联系你", 113 | "手机号码,联系方式" 114 | ] 115 | }, 116 | { 117 | "docId": "AXURMDz_Ey2xfNJEUjTQ", 118 | "categories": [], 119 | "enabled": true, 120 | "post": "你们怎么有我号码的? ", 121 | "replies": [ 122 | { 123 | "rtype": "plain", 124 | "content": "您之前应该是购买过保险或银行理财,所以我才会有您的电话。如果不巧打扰到您,非常抱歉了。" 125 | } 126 | ], 127 | "similarQuestions": [] 128 | }, 129 | { 130 | "docId": "AXURL-YfEy2xfNJEUjTP", 131 | "categories": [], 132 | "enabled": true, 133 | "post": "你是不是机器人?", 134 | "replies": [ 135 | { 136 | "rtype": "plain", 137 | "content": "这个不重要哦,致电给您只是想把我们这个客户回馈活动通知到您,希望您能来参与。" 138 | } 139 | ], 140 | "similarQuestions": [] 141 | }, 142 | { 143 | "docId": "AXURL5WtEy2xfNJEUjTL", 144 | "categories": [], 145 | "enabled": true, 146 | "post": "你太不专业了,这都不知道", 147 | "replies": [ 148 | { 149 | "rtype": "plain", 150 | "content": "不好意思,我这边也是新来的,其他问题稍后安排我们资深的客户经理联系您沟通,好吧?" 151 | } 152 | ], 153 | "similarQuestions": [ 154 | "保险产品,有什么", 155 | "有什么", 156 | "了解/咨询/购买/介绍产品" 157 | ] 158 | }, 159 | { 160 | "docId": "AXURLrOLEy2xfNJEUjTK", 161 | "categories": [], 162 | "enabled": true, 163 | "post": "你多大了?", 164 | "replies": [ 165 | { 166 | "rtype": "plain", 167 | "content": "老板,我是标准的90后呢。" 168 | } 169 | ], 170 | "similarQuestions": [] 171 | }, 172 | { 173 | "docId": "AXURLmnGEy2xfNJEUjTJ", 174 | "categories": [], 175 | "enabled": true, 176 | "post": "你叫什么名字", 177 | "replies": [ 178 | { 179 | "rtype": "plain", 180 | "content": "我姓王,您可以叫我小王。" 181 | } 182 | ], 183 | "similarQuestions": [] 184 | }, 185 | { 186 | "docId": "AXURLhKTEy2xfNJEUjTG", 187 | "categories": [], 188 | "enabled": true, 189 | "post": "你们是不是骗子啊?", 190 | "replies": [ 191 | { 192 | "rtype": "plain", 193 | "content": "您多虑了,我们这是xxx,邀请您过来只是免费领取一份我们为您准备的精美礼品。 " 194 | } 195 | ], 196 | "similarQuestions": [ 197 | "靠谱吗? ", 198 | "你们是不是骗子啊?靠谱吗? " 199 | ] 200 | }, 201 | { 202 | "docId": "AXURLZDxEy2xfNJEUjTD", 203 | "categories": [], 204 | "enabled": true, 205 | "post": "要花钱吗,收费,费用,礼品要钱吗", 206 | "replies": [ 207 | { 208 | "rtype": "plain", 209 | "content": "礼品是免费的呢,不收取您任何费用的,您放心好了!" 210 | } 211 | ], 212 | "similarQuestions": [ 213 | "礼品要钱吗", 214 | "要花钱吗" 215 | ] 216 | }, 217 | { 218 | "docId": "AXURLQmbEy2xfNJEUjS6", 219 | "categories": [], 220 | "enabled": true, 221 | "post": "改天去,那我过去下", 222 | "replies": [ 223 | { 224 | "rtype": "plain", 225 | "content": "好的,那稍后我把公司地址和接待人员的电话发送到您的手机上,您留意查收,有问题随时联系。那先这样了,祝您生活愉快,再见!" 226 | } 227 | ], 228 | "similarQuestions": [ 229 | "可以考虑", 230 | "面谈", 231 | "见面聊", 232 | "下午去", 233 | "上午去", 234 | "后天过去", 235 | "明天过去", 236 | "过来看一下,明天过去,后天过去,上午去,下午去,见面聊, 当面聊, 面谈,可以考虑" 237 | ] 238 | }, 239 | { 240 | "docId": "AXURKwpEEy2xfNJEUjS3", 241 | "categories": [], 242 | "enabled": true, 243 | "post": "你们公司在哪里?", 244 | "replies": [ 245 | { 246 | "rtype": "plain", 247 | "content": "我们地址在xxx,交通很方便的。" 248 | } 249 | ], 250 | "similarQuestions": [ 251 | "怎么去你公司?", 252 | "公司地址,怎么去你公司?" 253 | ] 254 | }, 255 | { 256 | "docId": "AXURKnwgEy2xfNJEUjS0", 257 | "categories": [], 258 | "enabled": true, 259 | "post": "你们公司叫什么?", 260 | "replies": [ 261 | { 262 | "rtype": "plain", 263 | "content": "我们这边是xxx的,来电是因为公司现在有个回馈客户的活动,有一套价值128元的精美餐具赠送给您,所以特地来电通知您尽早过来领取。" 264 | } 265 | ], 266 | "similarQuestions": [ 267 | "平台介绍", 268 | "公司介绍" 269 | ] 270 | } 271 | ] -------------------------------------------------------------------------------- /achieves/回访/flow.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/回访/flow.xlsx -------------------------------------------------------------------------------- /achieves/天气查询/.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | *.swp 3 | *.swo 4 | *.sublime-* 5 | *.pyc 6 | jmeter.log 7 | __pycache__ 8 | tmp/ 9 | package-lock.json 10 | node_modules/ 11 | sftp-config.json 12 | .DS_Store 13 | *.iml 14 | *.ipr 15 | *.iws 16 | *.idea 17 | ~$*.xls* 18 | ~$*.ppt* 19 | ~$*.doc* 20 | nohup.out 21 | 22 | CMakeLists.txt.user 23 | CMakeCache.txt 24 | CMakeFiles 25 | CMakeScripts 26 | Testing 27 | Makefile 28 | build 29 | build-* 30 | cmake_install.cmake 31 | install_manifest.txt 32 | compile_commands.json 33 | CTestTestfile.cmake 34 | _deps 35 | .env 36 | -------------------------------------------------------------------------------- /achieves/天气查询/README.md: -------------------------------------------------------------------------------- 1 | # 小叮当 2 | 3 | 该示例程序实现一个能回答天气情况的聊天机器人。 4 | 5 | 更多描述,[多轮对话设计器:实现天气查询机器人的过程](https://docs.chatopera.com/products/chatbot-platform/conversation.html#%E4%BD%BF%E7%94%A8%E8%BF%9B%E9%98%B6)。 6 | -------------------------------------------------------------------------------- /achieves/天气查询/bot.conversations.c66: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/天气查询/bot.conversations.c66 -------------------------------------------------------------------------------- /achieves/天气查询/bot.faqs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "docId": "AWlYsLOHhKGn47Y-5ttn", 4 | "categories": [], 5 | "enabled": true, 6 | "post": "今天天气怎么样", 7 | "replies": [ 8 | { 9 | "rtype": "plain", 10 | "content": "routeDirectReply#[\"weather\",\"$ctx.textMessage$\"]" 11 | } 12 | ], 13 | "similarQuestions": [ 14 | "今天哈尔滨天气怎么样", 15 | "今天北京天气怎么样", 16 | "今天武汉天气怎么样", 17 | "今天广州天气怎么样" 18 | ] 19 | } 20 | ] -------------------------------------------------------------------------------- /achieves/房产/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/房产/.gitkeep -------------------------------------------------------------------------------- /achieves/房产/README.MD: -------------------------------------------------------------------------------- 1 | # 房产机器人 2 | 3 | 第一步:下载 json 格式的知识库文件,并导入云平台知识库模块(https://bot.chatopera.com) 4 | 第二步:下载并安装多轮对话设计器 5 | 第三步:多轮对话设计器中导入 c66 文件 6 | 第四步:在多轮对话设计器中对 c66 文件进行编辑、修改 7 | 文档中心:https://docs.chatopera.com/products/chatbot-platform/conversation.html 8 | -------------------------------------------------------------------------------- /achieves/房产/flow.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/房产/flow.xlsx -------------------------------------------------------------------------------- /achieves/教育培训/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/教育培训/.gitkeep -------------------------------------------------------------------------------- /achieves/教育培训/README.MD: -------------------------------------------------------------------------------- 1 | # 教育培训机器人 2 | 第一步:下载json格式的知识库文件,并导入云平台知识库模块 (https://bot.chatopera.com) 3 | 第二步:下载并安装多轮对话设计器 4 | 第三步:多轮对话设计器中导入c66文件 5 | 第四步:在多轮对话设计器中对c66文件进行编辑、修改 -------------------------------------------------------------------------------- /achieves/教育培训/bot.conversations.c66: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/教育培训/bot.conversations.c66 -------------------------------------------------------------------------------- /achieves/教育培训/bot.faqs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "docId": "AXTOZJAVEy2xfNJEUjOu", 4 | "categories": [], 5 | "enabled": true, 6 | "post": "孩子练琴时的顺序", 7 | "replies": [ 8 | { 9 | "rtype": "plain", 10 | "content": "孩子练琴的顺序是, 基础练习→邀请试奏→教师对学员问题进行纠正→课上最后完成整个或片段曲目练习。" 11 | } 12 | ], 13 | "similarQuestions": [] 14 | }, 15 | { 16 | "docId": "AXTOY54QEy2xfNJEUjOo", 17 | "categories": [], 18 | "enabled": true, 19 | "post": "练琴时手腕僵硬是因为什么/改善方法", 20 | "replies": [ 21 | { 22 | "rtype": "plain", 23 | "content": "这个是根据您孩子的具体情况,有不同处理方案的,稍后我把您的信息转给我们的课程顾问老师,让他们给您具体的说一下,您看可以吗?" 24 | } 25 | ], 26 | "similarQuestions": [ 27 | "练琴时手腕僵硬改善方法", 28 | "练琴时手腕僵硬是因为什么" 29 | ] 30 | }, 31 | { 32 | "docId": "AXTOYvh-Ey2xfNJEUjOl", 33 | "categories": [], 34 | "enabled": true, 35 | "post": "退费,不满意可以退款吗", 36 | "replies": [ 37 | { 38 | "rtype": "plain", 39 | "content": "我们是支持无条件退费,请您放心。" 40 | } 41 | ], 42 | "similarQuestions": [ 43 | "不满意可以退款吗", 44 | "退费" 45 | ] 46 | }, 47 | { 48 | "docId": "AXTOYnl_Ey2xfNJEUjOi", 49 | "categories": [], 50 | "enabled": true, 51 | "post": "课程怎么购买,怎么付款", 52 | "replies": [ 53 | { 54 | "rtype": "plain", 55 | "content": "这样我把您的信息转给我们的课程顾问老师,让他们给您具体的说一下,您看可以吗?" 56 | } 57 | ], 58 | "similarQuestions": [ 59 | "怎么付款", 60 | "课程怎么购买" 61 | ] 62 | }, 63 | { 64 | "docId": "AXTOXDlrEy2xfNJEUjOb", 65 | "categories": [], 66 | "enabled": true, 67 | "post": "XX只能设备是什么", 68 | "replies": [ 69 | { 70 | "rtype": "plain", 71 | "content": "XX就是我们上课和课下练习时用来数据采集分析的硬件设备,它可以及时发现孩子练琴时的错音、节奏等相关问题。" 72 | } 73 | ], 74 | "similarQuestions": [ 75 | "XX是什么" 76 | ] 77 | }, 78 | { 79 | "docId": "AXTOW8asEy2xfNJEUjOZ", 80 | "categories": [], 81 | "enabled": true, 82 | "post": "你们上课需要什么东西?", 83 | "replies": [ 84 | { 85 | "rtype": "plain", 86 | "content": "我们上课是需要有平板和我们的XX智能设备。" 87 | } 88 | ], 89 | "similarQuestions": [ 90 | "上课需要什么设备?" 91 | ] 92 | }, 93 | { 94 | "docId": "AXTOW1YKEy2xfNJEUjOW", 95 | "categories": [], 96 | "enabled": true, 97 | "post": "老师是哪个学校毕业的", 98 | "replies": [ 99 | { 100 | "rtype": "plain", 101 | "content": "目前拥有专业教师1200多名,来自全国音乐院校和师范类音乐系,在全国设有3个教师基地;拥有一套完整钢琴陪练课程体系,教师上岗前全部要经过培训考核,考核合格后才可以安排课程,教师定期参加教研活动以保证孩子\n的教学质量。" 102 | } 103 | ], 104 | "similarQuestions": [ 105 | "老师是哪儿", 106 | "老师水平" 107 | ] 108 | }, 109 | { 110 | "docId": "AXTOWpXeEy2xfNJEUjOV", 111 | "categories": [], 112 | "enabled": true, 113 | "post": "视奏问题的训练", 114 | "replies": [ 115 | { 116 | "rtype": "plain", 117 | "content": "视奏是把乐谱转化为动作的中介行为。视奏的快慢,对学会一首乐曲的速度、拓展演奏曲目的范围、扩大艺术\n视野,关系重大。提高视奏能力:需要以下几步1、经常读谱,认清谱子的内容;2、熟悉钢琴键位,练习时多关注\n谱子,不要总看琴键3、提高自身的乐理知识4、经常唱谱,提高视唱能力。" 118 | } 119 | ], 120 | "similarQuestions": [] 121 | }, 122 | { 123 | "docId": "AXTOWjXxEy2xfNJEUjOU", 124 | "categories": [], 125 | "enabled": true, 126 | "post": "视唱练耳问题的训练", 127 | "replies": [ 128 | { 129 | "rtype": "plain", 130 | "content": "视唱练耳课分为视唱和练耳两大部分,视唱即看谱即唱,练耳就包含音组、音程、和弦、节奏、旋律的模唱,听写,从这两方面来衡量学生是否具备学习音乐的素质和条件。" 131 | } 132 | ], 133 | "similarQuestions": [] 134 | }, 135 | { 136 | "docId": "AXTOWTobEy2xfNJEUjOS", 137 | "categories": [], 138 | "enabled": true, 139 | "post": "节奏不准怎么办?", 140 | "replies": [ 141 | { 142 | "rtype": "plain", 143 | "content": "节奏是指音乐中交替出现的有规律的强弱、长短的现象。将节拍器定在适中的速度上,从两种节奏型交替变换练起,在相同节奏时值内,逐渐增加多种节奏型加以训练。" 144 | } 145 | ], 146 | "similarQuestions": [] 147 | }, 148 | { 149 | "docId": "AXTOWN8vEy2xfNJEUjOQ", 150 | "categories": [], 151 | "enabled": true, 152 | "post": "秒到收费吗?", 153 | "replies": [ 154 | { 155 | "rtype": "plain", 156 | "content": "是这样的,您可以自行选择秒到还是次日到帐,秒到的话每笔仅收取3元的加急费,次日到账是不收取加急费的。" 157 | } 158 | ], 159 | "similarQuestions": [ 160 | "秒到免费吗?秒到吗?" 161 | ] 162 | }, 163 | { 164 | "docId": "AXTOWFUGEy2xfNJEUjON", 165 | "categories": [], 166 | "enabled": true, 167 | "post": "学不好,不好好练,孩子不好好练,读谱不认真怎么办", 168 | "replies": [ 169 | { 170 | "rtype": "plain", 171 | "content": "音乐笔有完善的教学陪练体系与计划,每次孩子练琴都会在我们的XX智能设备上存储,每次练琴都会有练琴报告,班主任老师定期与您回访沟通孩子的练琴问题,帮助孩子一次性回课。" 172 | } 173 | ], 174 | "similarQuestions": [ 175 | "孩子不好好练,读谱不认真怎么办", 176 | "学不好,不好好练" 177 | ] 178 | }, 179 | { 180 | "docId": "AXTOV4aGEy2xfNJEUjOL", 181 | "categories": [], 182 | "enabled": true, 183 | "post": "上课时间", 184 | "replies": [ 185 | { 186 | "rtype": "plain", 187 | "content": "我们的试听课为25分钟,正课分为25分钟和50分钟的课两种。上课时间平时13:00—21:00周末9:30—21:00,你看您周几方便,我给您记录下来,到时候让课程顾问老师联系您定具体时间。" 188 | } 189 | ], 190 | "similarQuestions": [ 191 | "预约时间" 192 | ] 193 | }, 194 | { 195 | "docId": "AXTOVwPsEy2xfNJEUjOK", 196 | "categories": [], 197 | "enabled": true, 198 | "post": "上课流程", 199 | "replies": [ 200 | { 201 | "rtype": "plain", 202 | "content": "我们的课堂从弹奏的基本功练习热身开始,在进入孩子的曲目试奏,老师观察孩子试奏的问题,重点解决孩子弹奏中出现的问题,提高孩子练习效率,最后完成当堂课练习内容,帮助孩子解决练琴中错音、节奏等问题。" 203 | } 204 | ], 205 | "similarQuestions": [] 206 | }, 207 | { 208 | "docId": "AXTOVqs9Ey2xfNJEUjOJ", 209 | "categories": [], 210 | "enabled": true, 211 | "post": "课程内容", 212 | "replies": [ 213 | { 214 | "rtype": "plain", 215 | "content": "XXXX陪练课,是由国内优秀的钢琴教育家和演奏家共同制定的标准化陪练课程体系。通过XX智能设备对孩子日常练琴中的错音、节奏等问题及时发现错误,教师根据孩子练琴的反馈结果,有针对的对孩子练琴错\n误进行纠正指导,确保孩子回课一次通过,培养孩子每天练琴的好习惯,建立孩子学琴兴趣和信心。" 216 | } 217 | ], 218 | "similarQuestions": [] 219 | }, 220 | { 221 | "docId": "AXTOVkq7Ey2xfNJEUjOG", 222 | "categories": [], 223 | "enabled": true, 224 | "post": "怎么上课", 225 | "replies": [ 226 | { 227 | "rtype": "plain", 228 | "content": "XXXX陪练课是您在平板或者手机上下载”XX钢琴陪练APP”,进行注册,然后上传孩子平时弹\n的谱子就可以了,真人老师会通过XX硬件设备的高保真四通道视频和对音准、节奏等问题的分析,面对面的对\n小朋友的练习给予指导、示范、讲解。“XX硬件设备”,连接在平板或者手机上面,是垂直钢琴键盘的,所以\n小朋友手型指法可以看得非常清楚,然后老师就可以进行及时的纠正,课下孩子还可以利用XX设备进行自主练习,后台定期会把孩子的练琴报告发送给您,真正培养孩子练琴习惯,减轻您的压力。" 229 | } 230 | ], 231 | "similarQuestions": [ 232 | "上课形式", 233 | "上课方式" 234 | ] 235 | }, 236 | { 237 | "docId": "AXTOVaWBEy2xfNJEUjOC", 238 | "categories": [], 239 | "enabled": true, 240 | "post": "优势,特色,不同点", 241 | "replies": [ 242 | { 243 | "rtype": "plain", 244 | "content": "咱们XXXX陪练课拥有专业教师1200多名,全国设有3个教师基地,完善的陪练课程体系,每位老师再上岗前全部都要进行培训,考核合格才能上岗。另外“XX”智能设备是我们自主开发的硬件设备,也是钢琴陪\n练行业中最先进的智能设备,它可以帮助孩子发现练琴中节奏、音准的问题,老师可以根据多年教学经验和设备的\n提示给出孩子准确的纠正,提高孩子的练琴效率,确保一次回课,加速学琴进度,培养孩子习惯。班主任老师也会\n定期根据孩子练琴的情况给您反馈,减轻您的压力。" 245 | } 246 | ], 247 | "similarQuestions": [ 248 | "不同点", 249 | "特色", 250 | "优势" 251 | ] 252 | }, 253 | { 254 | "docId": "AXTOVK2iEy2xfNJEUjN_", 255 | "categories": [], 256 | "enabled": true, 257 | "post": "等一下", 258 | "replies": [ 259 | { 260 | "rtype": "plain", 261 | "content": "嗯,好的。" 262 | } 263 | ], 264 | "similarQuestions": [ 265 | "稍等一下", 266 | "等等" 267 | ] 268 | }, 269 | { 270 | "docId": "AXTOVCSrEy2xfNJEUjN7", 271 | "categories": [], 272 | "enabled": true, 273 | "post": "有没有在听", 274 | "replies": [ 275 | { 276 | "rtype": "plain", 277 | "content": "嗯,不好意思,您请讲!" 278 | } 279 | ], 280 | "similarQuestions": [ 281 | "听得清我说话吗", 282 | "听得到我说话吗", 283 | "听得到吗" 284 | ] 285 | }, 286 | { 287 | "docId": "AXTOU30TEy2xfNJEUjN3", 288 | "categories": [], 289 | "enabled": true, 290 | "post": "发资料我看下", 291 | "replies": [ 292 | { 293 | "rtype": "plain", 294 | "content": "这样吧,稍后我会加您微信,给您发一些我们课程的介绍,有问题随时沟通,可以吧?" 295 | } 296 | ], 297 | "similarQuestions": [ 298 | "发个短信给我", 299 | "先加个微信、微信,短信", 300 | "发我邮箱" 301 | ] 302 | }, 303 | { 304 | "docId": "AXTOUqF0Ey2xfNJEUjN1", 305 | "categories": [], 306 | "enabled": true, 307 | "post": "你们是怎么知道我的电话号码的? ", 308 | "replies": [ 309 | { 310 | "rtype": "plain", 311 | "content": "是这样,我们是通过系统自动匹配的号码段联系到您的。" 312 | } 313 | ], 314 | "similarQuestions": [ 315 | "你是怎么知道我手机号的?" 316 | ] 317 | }, 318 | { 319 | "docId": "AXTOUjEDEy2xfNJEUjNz", 320 | "categories": [], 321 | "enabled": true, 322 | "post": "机器人", 323 | "replies": [ 324 | { 325 | "rtype": "plain", 326 | "content": "这个不重要,打电话是想给您推荐我们XX一对一钢琴陪练的体验课,您了解一下也没什么坏处,是吧?" 327 | } 328 | ], 329 | "similarQuestions": [ 330 | "录音,假人" 331 | ] 332 | }, 333 | { 334 | "docId": "AXTOUbOwEy2xfNJEUjNy", 335 | "categories": [], 336 | "enabled": true, 337 | "post": "你太不专业了吧?", 338 | "replies": [ 339 | { 340 | "rtype": "plain", 341 | "content": "不好意思哦,我也是新来的,要不稍后让我们顾问老师给您回电话详细介绍一下,可以吗?" 342 | } 343 | ], 344 | "similarQuestions": [] 345 | }, 346 | { 347 | "docId": "AXTOUT5AEy2xfNJEUjNw", 348 | "categories": [], 349 | "enabled": true, 350 | "post": "你叫什么名字", 351 | "replies": [ 352 | { 353 | "rtype": "plain", 354 | "content": "您叫我小乐就可以了。" 355 | } 356 | ], 357 | "similarQuestions": [ 358 | "你姓什么?" 359 | ] 360 | }, 361 | { 362 | "docId": "AXTOUMn1Ey2xfNJEUjNq", 363 | "categories": [], 364 | "enabled": true, 365 | "post": "骗人的吧", 366 | "replies": [ 367 | { 368 | "rtype": "plain", 369 | "content": "您不要误会啊,我们这边是XXXX陪练,打电话是想给您推荐我们XX一对一陪练的体验课,您了\n解一下也没什么坏处,是吧?" 370 | } 371 | ], 372 | "similarQuestions": [ 373 | "哪有这样好事", 374 | "不相信免费的", 375 | "骗钱的", 376 | "假的吧", 377 | "骗子" 378 | ] 379 | }, 380 | { 381 | "docId": "AXTOTRfvEy2xfNJEUjNO", 382 | "categories": [], 383 | "enabled": true, 384 | "post": "收费吗", 385 | "replies": [ 386 | { 387 | "rtype": "plain", 388 | "content": "我们的体验课是免费的,正常课是按课包报名的,你报的课时越多价格越便宜,大概价格在60—80元左右,比\n线下陪练课每节100—150元要便宜方便很多。" 389 | } 390 | ], 391 | "similarQuestions": [ 392 | "价格" 393 | ] 394 | }, 395 | { 396 | "docId": "AXTOTBLJEy2xfNJEUjNG", 397 | "categories": [], 398 | "enabled": true, 399 | "post": "什么地址", 400 | "replies": [ 401 | { 402 | "rtype": "plain", 403 | "content": "我们公司XXXX。" 404 | } 405 | ], 406 | "similarQuestions": [ 407 | "公司在无锡吗?", 408 | "你们在哪里", 409 | "公司在哪里", 410 | "什么地方", 411 | "什么位置" 412 | ] 413 | }, 414 | { 415 | "docId": "AXTOSwKYEy2xfNJEUjNB", 416 | "categories": [], 417 | "enabled": true, 418 | "post": "你们公司叫什么?", 419 | "replies": [ 420 | { 421 | "rtype": "plain", 422 | "content": "您好,这里是XXXX钢琴陪练,您可以了解下哦" 423 | } 424 | ], 425 | "similarQuestions": [ 426 | "什么公司", 427 | "你们是什么公司", 428 | "我都没听过你们公司,", 429 | "哪家公司" 430 | ] 431 | } 432 | ] -------------------------------------------------------------------------------- /achieves/教育培训/flow.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/教育培训/flow.xlsx -------------------------------------------------------------------------------- /achieves/法律服务/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/法律服务/.gitkeep -------------------------------------------------------------------------------- /achieves/法律服务/README.MD: -------------------------------------------------------------------------------- 1 | # 法律服务机器人 2 | 第一步:下载json格式的知识库文件,并导入云平台知识库模块(https://bot.chatopera.com) 3 | 第二步:下载并安装多轮对话设计器 4 | 第三步:多轮对话设计器中导入c66文件 5 | 第四步:在多轮对话设计器中对c66文件进行编辑、修改 6 | 更多使用说明请参考文档中心:https://docs.chatopera.com/products/chatbot-platform/conversation.html -------------------------------------------------------------------------------- /achieves/法律服务/bot.conversations.c66: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/法律服务/bot.conversations.c66 -------------------------------------------------------------------------------- /achieves/法律服务/bot.faqs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "docId": "AXUaaSSXEy2xfNJEUjdS", 4 | "categories": [], 5 | "enabled": true, 6 | "post": "骚扰电话, 怎么老是打电话", 7 | "replies": [ 8 | { 9 | "rtype": "plain", 10 | "content": "我们打电话给您,也只是想了解一下您是否有法律方面的需要,如果有打扰到您,确实抱歉呢!" 11 | } 12 | ], 13 | "similarQuestions": [ 14 | " 怎么老是打电话", 15 | "骚扰电话" 16 | ] 17 | }, 18 | { 19 | "docId": "AXUaaLEWEy2xfNJEUjdP", 20 | "categories": [], 21 | "enabled": true, 22 | "post": "我们是小公司,小企业", 23 | "replies": [ 24 | { 25 | "rtype": "plain", 26 | "content": "我们律所针对于中小企业推出了企业法律服务包业务,性价比也很高。一旦合作,您公司就可拥有自己的专属法律顾问啦。" 27 | } 28 | ], 29 | "similarQuestions": [ 30 | "小企业", 31 | "我们是小公司" 32 | ] 33 | }, 34 | { 35 | "docId": "AXUaaD7CEy2xfNJEUjdM", 36 | "categories": [], 37 | "enabled": true, 38 | "post": "网站地址,网址", 39 | "replies": [ 40 | { 41 | "rtype": "plain", 42 | "content": "我们的主网页是XXXXXXXXXXXXXXX,您可以了解下。" 43 | } 44 | ], 45 | "similarQuestions": [ 46 | "网址", 47 | "网站地址" 48 | ] 49 | }, 50 | { 51 | "docId": "AXUaZ9FSEy2xfNJEUjdL", 52 | "categories": [], 53 | "enabled": true, 54 | "post": "代理诉讼案件", 55 | "replies": [ 56 | { 57 | "rtype": "plain", 58 | "content": "在您起诉或被他人起诉后提供应诉服务,包括但不限于民间借贷纠纷、合同纠纷、人身损害赔偿纠纷、婚姻家庭纠纷、房屋买卖纠纷、建设工程纠纷等民商事案件。" 59 | } 60 | ], 61 | "similarQuestions": [] 62 | }, 63 | { 64 | "docId": "AXUaZ4ouEy2xfNJEUjdH", 65 | "categories": [], 66 | "enabled": true, 67 | "post": "常年法律顾问,常年顾问,法律顾问", 68 | "replies": [ 69 | { 70 | "rtype": "plain", 71 | "content": "常年法律顾问服务主要包括全年法律咨询、员工管理法律风险控制、合同管理法律风险防范、股权纠纷防范、税务风险防范、员工股权激励、参与商务谈判、纠纷调解、协助应收账款催收等。" 72 | } 73 | ], 74 | "similarQuestions": [ 75 | "法律顾问", 76 | "常年顾问", 77 | "常年法律顾问" 78 | ] 79 | }, 80 | { 81 | "docId": "AXUaZwjkEy2xfNJEUjdG", 82 | "categories": [], 83 | "enabled": true, 84 | "post": "你们提供哪些产品,项目", 85 | "replies": [ 86 | { 87 | "rtype": "plain", 88 | "content": "我们的产品主要有三大类,一类是企业常年法律顾问,第二类是代理诉讼案件,第三类是提供税务筹划服务帮您依法节税,主要是看您的需求有哪些?" 89 | } 90 | ], 91 | "similarQuestions": [] 92 | }, 93 | { 94 | "docId": "AXUaZr_LEy2xfNJEUjdF", 95 | "categories": [], 96 | "enabled": true, 97 | "post": "等一下", 98 | "replies": [ 99 | { 100 | "rtype": "plain", 101 | "content": "哦,好的,您说" 102 | } 103 | ], 104 | "similarQuestions": [] 105 | }, 106 | { 107 | "docId": "AXUaZoRKEy2xfNJEUjdE", 108 | "categories": [], 109 | "enabled": true, 110 | "post": "你有没有在听我说话?", 111 | "replies": [ 112 | { 113 | "rtype": "plain", 114 | "content": "不好意思,您请讲。" 115 | } 116 | ], 117 | "similarQuestions": [] 118 | }, 119 | { 120 | "docId": "AXUaZlfHEy2xfNJEUjdB", 121 | "categories": [], 122 | "enabled": true, 123 | "post": "问个问题,有个问题", 124 | "replies": [ 125 | { 126 | "rtype": "plain", 127 | "content": "嗯,您说" 128 | } 129 | ], 130 | "similarQuestions": [ 131 | "有个问题", 132 | "问个问题" 133 | ] 134 | }, 135 | { 136 | "docId": "AXUaZdZ7Ey2xfNJEUjc9", 137 | "categories": [], 138 | "enabled": true, 139 | "post": "你发个短信/微信给我吧?能发邮件吗,电话多少", 140 | "replies": [ 141 | { 142 | "rtype": "plain", 143 | "content": "这样吧,我稍后给您发个短信,方便后续联系,您看可以吧?" 144 | } 145 | ], 146 | "similarQuestions": [ 147 | "你发个微信给我吧", 148 | "能发邮件吗,电话多少", 149 | "你发个短信给我吧?" 150 | ] 151 | }, 152 | { 153 | "docId": "AXUaZQUcEy2xfNJEUjc5", 154 | "categories": [], 155 | "enabled": true, 156 | "post": "怎么知道我电话?从哪儿知道我号码?知道电话?知道号码?", 157 | "replies": [ 158 | { 159 | "rtype": "plain", 160 | "content": "我们都是通过正规的信息发布平台知道您号码的,例如企业黄页、招聘网站等等。" 161 | } 162 | ], 163 | "similarQuestions": [ 164 | "怎么知道我电话?", 165 | "知道电话?知道号码?", 166 | "从哪儿知道我号码?" 167 | ] 168 | }, 169 | { 170 | "docId": "AXUaZGwwEy2xfNJEUjc2", 171 | "categories": [], 172 | "enabled": true, 173 | "post": "机器人, 录音,真人", 174 | "replies": [ 175 | { 176 | "rtype": "plain", 177 | "content": "其实这不重要啦,我只是给您提供一些法律服务和信息,如果有需要可以联系我们专业的律师" 178 | } 179 | ], 180 | "similarQuestions": [ 181 | "录音,真人", 182 | "机器人" 183 | ] 184 | }, 185 | { 186 | "docId": "AXUaY_dMEy2xfNJEUjcz", 187 | "categories": [], 188 | "enabled": true, 189 | "post": "你太不专业了?这个都不知道啊?", 190 | "replies": [ 191 | { 192 | "rtype": "plain", 193 | "content": "不好意思,我这边只是客服人员,您如果有专业问题,我稍后让我们专业律师给您回复。" 194 | } 195 | ], 196 | "similarQuestions": [ 197 | "这个都不知道啊?", 198 | "你太不专业了?" 199 | ] 200 | }, 201 | { 202 | "docId": "AXUaY4pgEy2xfNJEUjcy", 203 | "categories": [], 204 | "enabled": true, 205 | "post": "你多大了?", 206 | "replies": [ 207 | { 208 | "rtype": "plain", 209 | "content": "我是标准的90后呢!" 210 | } 211 | ], 212 | "similarQuestions": [] 213 | }, 214 | { 215 | "docId": "AXUaY0lFEy2xfNJEUjcv", 216 | "categories": [], 217 | "enabled": true, 218 | "post": "你叫什么, 你贵姓", 219 | "replies": [ 220 | { 221 | "rtype": "plain", 222 | "content": "我是编号008的客服人员,您叫我小王就可以了。" 223 | } 224 | ], 225 | "similarQuestions": [ 226 | "你叫什么", 227 | " 你贵姓" 228 | ] 229 | }, 230 | { 231 | "docId": "AXUaYtLTEy2xfNJEUjcr", 232 | "categories": [], 233 | "enabled": true, 234 | "post": "价格怎么样? 你们怎么收费?怎么收费?", 235 | "replies": [ 236 | { 237 | "rtype": "plain", 238 | "content": "我们的服务项目很多,包括常年法律顾问及诉讼代理等诸多内容,具体收费情况我可以安排专人跟您联系,您看好吗?" 239 | } 240 | ], 241 | "similarQuestions": [ 242 | "怎么收费?", 243 | "价格怎么样?", 244 | " 你们怎么收费" 245 | ] 246 | }, 247 | { 248 | "docId": "AXUaYj7FEy2xfNJEUjcm", 249 | "categories": [], 250 | "enabled": true, 251 | "post": "你们是不是骗子啊,靠谱吗,诈骗,是不是骗子", 252 | "replies": [ 253 | { 254 | "rtype": "plain", 255 | "content": "我们是报司法部备案,经XX省司法厅批准设立的律所,律所办公地址在XXXXXXX,您有空可以来律所了解一下或者上我们的主网站看下,您看呢?" 256 | } 257 | ], 258 | "similarQuestions": [ 259 | "靠谱吗", 260 | "靠谱吗,诈骗", 261 | "是不是骗子", 262 | "你们是不是骗子啊" 263 | ] 264 | }, 265 | { 266 | "docId": "AXUaYaQREy2xfNJEUjcj", 267 | "categories": [], 268 | "enabled": true, 269 | "post": "你们公司叫什么,哪个单位", 270 | "replies": [ 271 | { 272 | "rtype": "plain", 273 | "content": "我们是XXXX事务所,主要提供和应收账款,合同审核,纠纷处理、依法节税等法律和财税服务,您需要了解下吗?" 274 | } 275 | ], 276 | "similarQuestions": [ 277 | "哪个单位", 278 | "你们公司叫什么" 279 | ] 280 | }, 281 | { 282 | "docId": "AXUaYSuyEy2xfNJEUjce", 283 | "categories": [], 284 | "enabled": true, 285 | "post": "哪里, 在哪, 具体位置, 哪个地方, 具体哪里,什么地方,", 286 | "replies": [ 287 | { 288 | "rtype": "plain", 289 | "content": "我们在XXXXXXXXXXXXXXXXXXXXXXX。" 290 | } 291 | ], 292 | "similarQuestions": [ 293 | "公司地址", 294 | "位置在哪儿", 295 | "怎么去你们公司,", 296 | "改天去你们公司看下?" 297 | ] 298 | } 299 | ] -------------------------------------------------------------------------------- /achieves/法律服务/flow.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/法律服务/flow.xlsx -------------------------------------------------------------------------------- /achieves/活动通知/.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | *.swp 3 | *.swo 4 | *.sublime-* 5 | *.pyc 6 | jmeter.log 7 | __pycache__ 8 | tmp/ 9 | package-lock.json 10 | node_modules/ 11 | sftp-config.json 12 | .DS_Store 13 | *.iml 14 | *.ipr 15 | *.iws 16 | *.idea 17 | ~$*.xls* 18 | ~$*.ppt* 19 | ~$*.doc* 20 | nohup.out 21 | 22 | CMakeLists.txt.user 23 | CMakeCache.txt 24 | CMakeFiles 25 | CMakeScripts 26 | Testing 27 | Makefile 28 | build 29 | build-* 30 | cmake_install.cmake 31 | install_manifest.txt 32 | compile_commands.json 33 | CTestTestfile.cmake 34 | _deps 35 | .env 36 | -------------------------------------------------------------------------------- /achieves/活动通知/README.md: -------------------------------------------------------------------------------- 1 | # 活动通知 2 | 3 | 该示例程序实现一个通知活动的聊天机器人。 4 | 5 | 说明:https://github.com/chatopera/chatbot-samples 6 | 7 | 知识库文件:[faq.pairs.json](./faq.pairs.json) 8 | -------------------------------------------------------------------------------- /achieves/活动通知/bot.conversations.c66: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/活动通知/bot.conversations.c66 -------------------------------------------------------------------------------- /achieves/活动通知/bot.faqs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "categories": [], 4 | "enabled": true, 5 | "post": "怎么报名参加啊", 6 | "replies": [ 7 | { 8 | "rtype": "plain", 9 | "content": "可以在微信上关注XXXX公众号,点击报名参会即可" 10 | } 11 | ], 12 | "similarQuestions": [] 13 | }, 14 | { 15 | "categories": [], 16 | "enabled": true, 17 | "post": "你们怎么知道手机的", 18 | "replies": [ 19 | { 20 | "rtype": "plain", 21 | "content": "是有朋友推荐您参加的。" 22 | } 23 | ], 24 | "similarQuestions": ["你们怎么知道号码的", "你们怎么知道电话的"] 25 | }, 26 | { 27 | "categories": [], 28 | "enabled": true, 29 | "post": "你有没有在听我说话", 30 | "replies": [ 31 | { 32 | "rtype": "plain", 33 | "content": "不好意思,您请讲。" 34 | } 35 | ], 36 | "similarQuestions": [] 37 | }, 38 | { 39 | "categories": [], 40 | "enabled": true, 41 | "post": "你是不是机器人", 42 | "replies": [ 43 | { 44 | "rtype": "plain", 45 | "content": "我是人工智能机器人。" 46 | } 47 | ], 48 | "similarQuestions": [] 49 | }, 50 | { 51 | "categories": [], 52 | "enabled": true, 53 | "post": "展位费多少钱", 54 | "replies": [ 55 | { 56 | "rtype": "plain", 57 | "content": "具体有关展位的事宜,您可以拨打010-588888直接咨询。" 58 | } 59 | ], 60 | "similarQuestions": ["价格怎么样", "你们还有展位吗", "你们展位怎么预定"] 61 | }, 62 | { 63 | "categories": [], 64 | "enabled": true, 65 | "post": "问你个问题", 66 | "replies": [ 67 | { 68 | "rtype": "plain", 69 | "content": "好的,您请说。" 70 | } 71 | ], 72 | "similarQuestions": [] 73 | }, 74 | { 75 | "categories": [], 76 | "enabled": true, 77 | "post": "能告诉我你的电话吗", 78 | "replies": [ 79 | { 80 | "rtype": "plain", 81 | "content": "我的电话是:010-5888888,有任何需要欢迎您随时来电。" 82 | } 83 | ], 84 | "similarQuestions": ["能告诉我你的联系方式吗"] 85 | }, 86 | { 87 | "categories": [], 88 | "enabled": true, 89 | "post": "什么公司", 90 | "replies": [ 91 | { 92 | "rtype": "plain", 93 | "content": "我们是XXXX,也是本次展会的主办单位。" 94 | } 95 | ], 96 | "similarQuestions": [ 97 | "你们是什么公司", 98 | "我都没听过你们公司", 99 | "哪家公司", 100 | "你们公司叫什么" 101 | ] 102 | }, 103 | { 104 | "categories": [], 105 | "enabled": true, 106 | "post": "你叫什么呀", 107 | "replies": [ 108 | { 109 | "rtype": "plain", 110 | "content": "我是展会服务助理小王" 111 | } 112 | ] 113 | }, 114 | { 115 | "categories": [], 116 | "enabled": true, 117 | "post": "你发个短信,微信给我吧", 118 | "replies": [ 119 | { 120 | "rtype": "plain", 121 | "content": "好的,那我稍后给您发条短信。" 122 | } 123 | ], 124 | "similarQuestions": [] 125 | }, 126 | { 127 | "categories": [], 128 | "enabled": true, 129 | "post": "等一下", 130 | "replies": [ 131 | { 132 | "rtype": "plain", 133 | "content": "好的" 134 | } 135 | ], 136 | "similarQuestions": [] 137 | } 138 | ] 139 | -------------------------------------------------------------------------------- /achieves/活动通知/flow.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/活动通知/flow.xlsx -------------------------------------------------------------------------------- /achieves/理财/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/理财/.gitkeep -------------------------------------------------------------------------------- /achieves/理财/README.MD: -------------------------------------------------------------------------------- 1 | # 理财机器人 2 | 第一步:下载json格式的知识库文件,并导入云平台知识库模块(https://bot.chatopera.com) 3 | 第二步:下载并安装多轮对话设计器 4 | 第三步:多轮对话设计器中导入c66文件 5 | 第四步:在多轮对话设计器中对c66文件进行编辑、修改 6 | 详细说明请参考文档中心:https://docs.chatopera.com/products/chatbot-platform/conversation.html -------------------------------------------------------------------------------- /achieves/理财/bot.conversations.c66: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/理财/bot.conversations.c66 -------------------------------------------------------------------------------- /achieves/理财/bot.faqs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "docId": "AXUQWYysEy2xfNJEUjSr", 4 | "categories": [], 5 | "enabled": true, 6 | "post": "优势, 优点,为什么选择你们 ", 7 | "replies": [ 8 | { 9 | "rtype": "plain", 10 | "content": "我们XX财富的合作伙伴都是正规的持牌金融机构,在股东背景、管理团队、实战经验各方面都有保证的,再说我们的风控系统也非常严格,每一款产品在上线发布前都经过层层筛选,性价比高,永远把您的资金安全放第一位" 11 | } 12 | ], 13 | "similarQuestions": [ 14 | "优点", 15 | "优势, 优点", 16 | "为什么选择你们 " 17 | ] 18 | }, 19 | { 20 | "docId": "AXUQWOJBEy2xfNJEUjSn", 21 | "categories": [], 22 | "enabled": true, 23 | "post": "怎么保障, 安全性, 跑路,风控", 24 | "replies": [ 25 | { 26 | "rtype": "plain", 27 | "content": "我们所有正式发行的项目都是经过层层筛选的,您在官网上都可以查询到,而且您的资金都是由银行或者证券公司进行第三方托管的,我们接触不到的,也不可能存在卷款潜逃的恶性事件。到目前为止所有项目都是 100%完美兑付的,你完全可以放心!" 28 | } 29 | ], 30 | "similarQuestions": [ 31 | " 跑路,风控", 32 | " 安全性", 33 | "怎么保障" 34 | ] 35 | }, 36 | { 37 | "docId": "AXUQVz5uEy2xfNJEUjSk", 38 | "categories": [], 39 | "enabled": true, 40 | "post": "提前赎回,赎回机制", 41 | "replies": [ 42 | { 43 | "rtype": "plain", 44 | "content": "提前赎回的话是看具体项目的,具体项目具体讨论。" 45 | } 46 | ], 47 | "similarQuestions": [ 48 | "赎回机制", 49 | "提前赎回" 50 | ] 51 | }, 52 | { 53 | "docId": "AXUQVsO5Ey2xfNJEUjSj", 54 | "categories": [], 55 | "enabled": true, 56 | "post": "收益太低了", 57 | "replies": [ 58 | { 59 | "rtype": "plain", 60 | "content": "我们的产品追求的是安全第一,无需让您承担高风险就能获得较高的收益回报。外面高收益的产品很多,但毕竟是高收益高风险,这个就看您自己的风险偏好了。" 61 | } 62 | ], 63 | "similarQuestions": [] 64 | }, 65 | { 66 | "docId": "AXUQVnNgEy2xfNJEUjSi", 67 | "categories": [], 68 | "enabled": true, 69 | "post": "收益有这么高吗", 70 | "replies": [ 71 | { 72 | "rtype": "plain", 73 | "content": "那要看跟什么产品比咯,我们的收益率基本是目前行内的平均水平,是您无需承担高风险就应当获得的投资回报,因为整个社会的融资成本差不多就这样。" 74 | } 75 | ], 76 | "similarQuestions": [] 77 | }, 78 | { 79 | "docId": "AXUQVihSEy2xfNJEUjSg", 80 | "categories": [], 81 | "enabled": true, 82 | "post": "周期长一点的", 83 | "replies": [ 84 | { 85 | "rtype": "plain", 86 | "content": "那行,您的想法我了解了,我们有符合您需要的产品的,我稍后让我们资深的理财经理联系您,具体介绍一下产品的情况,好吧?" 87 | } 88 | ], 89 | "similarQuestions": [ 90 | "周期短一点的" 91 | ] 92 | }, 93 | { 94 | "docId": "AXUQVYX8Ey2xfNJEUjSd", 95 | "categories": [], 96 | "enabled": true, 97 | "post": "浮动收益产品周期,浮动收益产品收益率/回报率", 98 | "replies": [ 99 | { 100 | "rtype": "plain", 101 | "content": "这类产品收益率及周期是不固定的,这样吧,我安排我们资深的理财经理跟您联系,根据您的情况为您做个细致的理财计划,可以吗?" 102 | } 103 | ], 104 | "similarQuestions": [ 105 | "浮动收益产品周期", 106 | "浮动收益产品收益率/回报率" 107 | ] 108 | }, 109 | { 110 | "docId": "AXUQVPNREy2xfNJEUjSZ", 111 | "categories": [], 112 | "enabled": true, 113 | "post": "原始股投资, 浮动收益的项目,高风险项目", 114 | "replies": [ 115 | { 116 | "rtype": "plain", 117 | "content": "我们现在有一些投资独角兽企业、原始股权等市场的私募基金可供选择,都是有丰富经验的投资团队来操盘的,历史业绩表现非常棒,而且都是公开可以查询的,您感兴趣的话,我稍后让我们资深的理财经理跟您联系,好吧?" 118 | } 119 | ], 120 | "similarQuestions": [ 121 | "高风险项目", 122 | " 浮动收益的项目", 123 | "原始股投资" 124 | ] 125 | }, 126 | { 127 | "docId": "AXUQVESuEy2xfNJEUjSV", 128 | "categories": [], 129 | "enabled": true, 130 | "post": "偏好固定收益的,固定收益的收益率多少,固收周期 ", 131 | "replies": [ 132 | { 133 | "rtype": "plain", 134 | "content": "固定收益类的项目年化收益率大概在XXX%-XX%之间,一般周期从1个月年到24个月不等。您感兴趣的话,我稍后让我们资深的理财经理联系您再详细沟通下,好吧?" 135 | } 136 | ], 137 | "similarQuestions": [ 138 | "固收周期 ", 139 | "固定收益的收益率多少", 140 | "偏好固定收益的" 141 | ] 142 | }, 143 | { 144 | "docId": "AXUQU5lSEy2xfNJEUjSS", 145 | "categories": [], 146 | "enabled": true, 147 | "post": "什么业务, 产品介绍 ", 148 | "replies": [ 149 | { 150 | "rtype": "plain", 151 | "content": "我们的产品主要有两大类,一类是年化收益比较稳健的类固定收益型,另一种是风险与回报共存的浮动收益型,看您自己的偏好哪一种了。" 152 | } 153 | ], 154 | "similarQuestions": [ 155 | "产品介绍 ", 156 | "什么业务" 157 | ] 158 | }, 159 | { 160 | "docId": "AXUQUxCtEy2xfNJEUjSR", 161 | "categories": [], 162 | "enabled": true, 163 | "post": "你声音挺好听啊 、能请你吃饭吗", 164 | "replies": [ 165 | { 166 | "rtype": "plain", 167 | "content": "谢谢,我这人比较容易害羞的。" 168 | } 169 | ], 170 | "similarQuestions": [] 171 | }, 172 | { 173 | "docId": "AXUQUrP7Ey2xfNJEUjSP", 174 | "categories": [], 175 | "enabled": true, 176 | "post": "自己来看看,改天去看一下", 177 | "replies": [ 178 | { 179 | "rtype": "plain", 180 | "content": "好的,我稍后安排投资经理给您把地址发过去,您直接导航过来,到了我们去接您。" 181 | } 182 | ], 183 | "similarQuestions": [ 184 | "改天去看一下" 185 | ] 186 | }, 187 | { 188 | "docId": "AXUQUkofEy2xfNJEUjSO", 189 | "categories": [], 190 | "enabled": true, 191 | "post": "有没有在听我讲话,答非所问 ", 192 | "replies": [ 193 | { 194 | "rtype": "plain", 195 | "content": "哦,不好意思,您请讲! 我在听。" 196 | } 197 | ], 198 | "similarQuestions": [] 199 | }, 200 | { 201 | "docId": "AXUQUa6OEy2xfNJEUjSK", 202 | "categories": [], 203 | "enabled": true, 204 | "post": "你不能直接告诉我吗, 你太不专业了,这个都不知道啊 ", 205 | "replies": [ 206 | { 207 | "rtype": "plain", 208 | "content": "不好意思,我只是客服,详细情况后续安排我们资深的理财经理跟您沟通,会更专业更权威,您看可以吧?" 209 | } 210 | ], 211 | "similarQuestions": [ 212 | "这个都不知道啊 ", 213 | "你太不专业了", 214 | "你不能直接告诉我吗" 215 | ] 216 | }, 217 | { 218 | "docId": "AXUQUM-9Ey2xfNJEUjSJ", 219 | "categories": [], 220 | "enabled": true, 221 | "post": "骗人, 能相信吗", 222 | "replies": [ 223 | { 224 | "rtype": "plain", 225 | "content": "我们公司是专业的三方财富管理咨询服务机构,12年成立至今,一直做得很好的!您有空的话也可以来我们公司坐坐实地考察的呀!" 226 | } 227 | ], 228 | "similarQuestions": [] 229 | }, 230 | { 231 | "docId": "AXUQUGaQEy2xfNJEUjSH", 232 | "categories": [], 233 | "enabled": true, 234 | "post": "怎么会有我号码", 235 | "replies": [ 236 | { 237 | "rtype": "plain", 238 | "content": "这个我们都是电脑随机拨号的。如果不巧打扰到您,向您说声抱歉。" 239 | } 240 | ], 241 | "similarQuestions": [ 242 | " 哪来的我电话" 243 | ] 244 | }, 245 | { 246 | "docId": "AXUQT_gSEy2xfNJEUjSF", 247 | "categories": [], 248 | "enabled": true, 249 | "post": "微信, 联系方式, 发我手机 ", 250 | "replies": [ 251 | { 252 | "rtype": "plain", 253 | "content": "这样吧,稍后我让我们理财经理给您发个短信,上面有联系方式和相关资料,您先看下,有问题随时沟通,好吧?" 254 | } 255 | ], 256 | "similarQuestions": [ 257 | "联系方式, 发我手机 " 258 | ] 259 | }, 260 | { 261 | "docId": "AXUQT2QyEy2xfNJEUjSD", 262 | "categories": [], 263 | "enabled": true, 264 | "post": "你叫什么名字", 265 | "replies": [ 266 | { 267 | "rtype": "plain", 268 | "content": "我姓X,您叫我小X就行了。" 269 | } 270 | ], 271 | "similarQuestions": [ 272 | "怎么称呼你" 273 | ] 274 | }, 275 | { 276 | "docId": "AXUQTq9VEy2xfNJEUjSB", 277 | "categories": [], 278 | "enabled": true, 279 | "post": "等一下", 280 | "replies": [ 281 | { 282 | "rtype": "plain", 283 | "content": "哦,好的。" 284 | } 285 | ], 286 | "similarQuestions": [ 287 | "等等" 288 | ] 289 | }, 290 | { 291 | "docId": "AXUQTiPBEy2xfNJEUjSA", 292 | "categories": [], 293 | "enabled": true, 294 | "post": "你是机器人吗?", 295 | "replies": [ 296 | { 297 | "rtype": "plain", 298 | "content": "这个不重要啦,我们也是想把好的投资渠道推荐给您,只要能帮您赚钱就可以了,您说是吧。" 299 | } 300 | ], 301 | "similarQuestions": [] 302 | }, 303 | { 304 | "docId": "AXUQTdtREy2xfNJEUjR_", 305 | "categories": [], 306 | "enabled": true, 307 | "post": "公司地址", 308 | "replies": [ 309 | { 310 | "rtype": "plain", 311 | "content": "我们公司地址在XXX,XXXXX附近,还是很好找的。" 312 | } 313 | ], 314 | "similarQuestions": [] 315 | }, 316 | { 317 | "docId": "AXUQTZafEy2xfNJEUjR-", 318 | "categories": [], 319 | "enabled": true, 320 | "post": "公司介绍", 321 | "replies": [ 322 | { 323 | "rtype": "plain", 324 | "content": "XX财富相关合作公司拥有公募基金销售牌照、保险经纪牌照、私募基金管理人资质等,同时拥有香港金融管理局授予的证券交易、证券咨询与资产管理牌照,服务领域包含类固定收益、保险、基金管理、海外创投、海外置业等多个方面的全球资产配置咨询服务,及投资者教育活动。资产管理逾千亿,多年口碑一直不错的!" 325 | } 326 | ], 327 | "similarQuestions": [] 328 | } 329 | ] -------------------------------------------------------------------------------- /achieves/理财/flow.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/理财/flow.xlsx -------------------------------------------------------------------------------- /achieves/财税/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/财税/.gitkeep -------------------------------------------------------------------------------- /achieves/财税/README.md: -------------------------------------------------------------------------------- 1 | # 财税机器人 2 | 3 | 第一步:下载json格式的知识库文件,并导入云平台知识库模块 (https://bot.chatopera.com) 4 | 第二步:下载并安装多轮对话设计器 5 | 第三步:多轮对话设计器中导入c66文件 6 | 第四步:在多轮对话设计器中对c66文件进行编辑、修改 -------------------------------------------------------------------------------- /achieves/财税/bot.conversations.c66: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/财税/bot.conversations.c66 -------------------------------------------------------------------------------- /achieves/财税/flow.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/财税/flow.xlsx -------------------------------------------------------------------------------- /achieves/酒水/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/酒水/.gitkeep -------------------------------------------------------------------------------- /achieves/酒水/README.MD: -------------------------------------------------------------------------------- 1 | # 酒水机器人 2 | 第一步:下载json格式的知识库文件,并导入云平台知识库模块(https://bot.chatopera.com) 3 | 第二步:下载并安装多轮对话设计器 4 | 第三步:多轮对话设计器中导入c66文件 5 | 第四步:在多轮对话设计器中对c66文件进行编辑、修改 6 | 文档中心:https://docs.chatopera.com/products/chatbot-platform/conversation.html -------------------------------------------------------------------------------- /achieves/酒水/bot.conversations.c66: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/酒水/bot.conversations.c66 -------------------------------------------------------------------------------- /achieves/酒水/bot.faqs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "docId": "AXURmeK3Ey2xfNJEUjXO", 4 | "categories": [], 5 | "enabled": true, 6 | "post": "会不会是假的,假酒,质保 怎么证明", 7 | "replies": [ 8 | { 9 | "rtype": "plain", 10 | "content": "这个您放心,咱们这酒都是国家工商总局核准的商标和质量检测报告的绝对是真品,而且每瓶的瓶身上都有全国唯一的防伪标识,而且送货上门的时候您可以开箱验货的。" 11 | } 12 | ], 13 | "similarQuestions": [ 14 | "质保 怎么证明", 15 | "假酒", 16 | "会不会是假的" 17 | ] 18 | }, 19 | { 20 | "docId": "AXURmStzEy2xfNJEUjXJ", 21 | "categories": [], 22 | "enabled": true, 23 | "post": "现在酒太多,有好多酒,有很多酒了", 24 | "replies": [ 25 | { 26 | "rtype": "plain", 27 | "content": "您可以存几箱,酒越放越好喝,我们有很多客户就要去年的批次,说上次的好,其实就是这个原因,但去年的都卖完了。" 28 | } 29 | ], 30 | "similarQuestions": [ 31 | "有很多酒了", 32 | "有好多酒", 33 | "现在酒太多" 34 | ] 35 | }, 36 | { 37 | "docId": "AXURmHe0Ey2xfNJEUjXI", 38 | "categories": [], 39 | "enabled": true, 40 | "post": "原料", 41 | "replies": [ 42 | { 43 | "rtype": "plain", 44 | "content": "原料全部是产自茅台镇特有的小红粱酿造的。" 45 | } 46 | ], 47 | "similarQuestions": [] 48 | }, 49 | { 50 | "docId": "AXURmDm9Ey2xfNJEUjXH", 51 | "categories": [], 52 | "enabled": true, 53 | "post": "厂商", 54 | "replies": [ 55 | { 56 | "rtype": "plain", 57 | "content": "咱们这款酒是茅台年份酒股份有限公司出品的,每瓶都有唯一的防伪标识可以查询的。" 58 | } 59 | ], 60 | "similarQuestions": [] 61 | }, 62 | { 63 | "docId": "AXURl8kiEy2xfNJEUjXG", 64 | "categories": [], 65 | "enabled": true, 66 | "post": "你这酒怎么比别的贵啊?", 67 | "replies": [ 68 | { 69 | "rtype": "plain", 70 | "content": "茅台酒价格不便宜你也是知道的,因为酱香酒的酿造工艺很复杂,酿造成本很高是人尽皆知的。而且现在是活动价格,这样的价格购买到这款私藏酒已经非常划算了。" 71 | } 72 | ], 73 | "similarQuestions": [] 74 | }, 75 | { 76 | "docId": "AXURl3MiEy2xfNJEUjXD", 77 | "categories": [], 78 | "enabled": true, 79 | "post": "能不能发个购买过的客户联系方式给我?我问问怎么样!", 80 | "replies": [ 81 | { 82 | "rtype": "plain", 83 | "content": "不好意思哦,客户信息属于机密,我们是不能透露的,换位思考,如果是您的话,您也不愿意我们把您的联系方式给到别人的,对吧?" 84 | } 85 | ], 86 | "similarQuestions": [ 87 | "我问问怎么样!", 88 | "能不能发个购买过的客户联系方式给我?" 89 | ] 90 | }, 91 | { 92 | "docId": "AXURlsrQEy2xfNJEUjXC", 93 | "categories": [], 94 | "enabled": true, 95 | "post": "就怕不好喝啊?", 96 | "replies": [ 97 | { 98 | "rtype": "plain", 99 | "content": "我们这款酒酒色微黄而透明,酱香、焦香、糊香配合谐调,口味细腻、优雅,空杯留香持久,喝过的客户都会回购,也认可这款酒的口感。" 100 | } 101 | ], 102 | "similarQuestions": [] 103 | }, 104 | { 105 | "docId": "AXURlm-5Ey2xfNJEUjXB", 106 | "categories": [], 107 | "enabled": true, 108 | "post": "可以便宜点嘛?", 109 | "replies": [ 110 | { 111 | "rtype": "plain", 112 | "content": "这个价格已经很优惠了,平均65一瓶不到,无论是酒质还是包装都是很好的,而且现在又是活动价格,已经非常划算了!" 113 | } 114 | ], 115 | "similarQuestions": [] 116 | }, 117 | { 118 | "docId": "AXURlhkREy2xfNJEUjXA", 119 | "categories": [], 120 | "enabled": true, 121 | "post": "一箱几瓶?", 122 | "replies": [ 123 | { 124 | "rtype": "plain", 125 | "content": "每瓶500毫升也就是一斤装,一箱六瓶。" 126 | } 127 | ], 128 | "similarQuestions": [] 129 | }, 130 | { 131 | "docId": "AXURlc2IEy2xfNJEUjW9", 132 | "categories": [], 133 | "enabled": true, 134 | "post": "外包装什么样的? 上面有没有茅台两个字?", 135 | "replies": [ 136 | { 137 | "rtype": "plain", 138 | "content": "外包装采用富贵金包装,瓶口处有防伪编码您可以电话查询真伪,瓶身为鎏金瓶,上面印有贵州茅台年份酒公司,中间茅台私藏酒五个大字,最下方标明了产地。" 139 | } 140 | ], 141 | "similarQuestions": [ 142 | "上面有没有茅台两个字?", 143 | "外包装什么样的?" 144 | ] 145 | }, 146 | { 147 | "docId": "AXURlRYhEy2xfNJEUjW2", 148 | "categories": [], 149 | "enabled": true, 150 | "post": "怎么送货的?几天能送到?怎么付款,怎么购买,破损,运输破损", 151 | "replies": [ 152 | { 153 | "rtype": "plain", 154 | "content": "我帮您登记一下,后续让客户经理联系您,帮您安排下单发货的事情。一般都是当天发货,京东货到付款,发货前会跟您联系,您收到之后检查包装完整没问题再付款签收。" 155 | } 156 | ], 157 | "similarQuestions": [ 158 | "运输破损", 159 | "破损", 160 | "怎么购买", 161 | "怎么付款", 162 | "几天能送到?", 163 | "怎么送货的?" 164 | ] 165 | }, 166 | { 167 | "docId": "AXURlCIHEy2xfNJEUjW1", 168 | "categories": [], 169 | "enabled": true, 170 | "post": "不满意可以退货不?", 171 | "replies": [ 172 | { 173 | "rtype": "plain", 174 | "content": "无论您收到之前还是收到之后,可以任选一瓶试喝,7天之内都是无条件退换货。您订购完过五分钟如果来电想退,我随时给您取消订单,或者您收到之后觉得不满意来个电话,我帮您退换货。这中间所有物流费手续费都由我们承担,不让您有任何损失。" 175 | } 176 | ], 177 | "similarQuestions": [] 178 | }, 179 | { 180 | "docId": "AXURk8YBEy2xfNJEUjWy", 181 | "categories": [], 182 | "enabled": true, 183 | "post": "价格为什么这么便宜?才398?", 184 | "replies": [ 185 | { 186 | "rtype": "plain", 187 | "content": "首先咱们酒是从酒厂直接给您发出,抛开中间代理商的加价;而且目前属于市场推广期间,所以才有了这么低的价格。" 188 | } 189 | ], 190 | "similarQuestions": [ 191 | "才398?", 192 | "价格为什么这么便宜?" 193 | ] 194 | }, 195 | { 196 | "docId": "AXURk0hbEy2xfNJEUjWx", 197 | "categories": [], 198 | "enabled": true, 199 | "post": "和茅台有什么区别?", 200 | "replies": [ 201 | { 202 | "rtype": "plain", 203 | "content": "咱们这款酒有着和茅台酒同样的酿造工艺、区别就是品牌,茅台私藏酒属于中高端品牌,在价格上更符合咱们送礼和宴请水平。" 204 | } 205 | ], 206 | "similarQuestions": [] 207 | }, 208 | { 209 | "docId": "AXURktwPEy2xfNJEUjWw", 210 | "categories": [], 211 | "enabled": true, 212 | "post": "产地是在哪里", 213 | "replies": [ 214 | { 215 | "rtype": "plain", 216 | "content": "咱们这款酒产地是在XXX" 217 | } 218 | ], 219 | "similarQuestions": [] 220 | }, 221 | { 222 | "docId": "AXURkoWJEy2xfNJEUjWv", 223 | "categories": [], 224 | "enabled": true, 225 | "post": "什么牌子的?", 226 | "replies": [ 227 | { 228 | "rtype": "plain", 229 | "content": "这款是茅台私藏酒,是由茅台年份酒公司今年推出的一款酱香型白酒。" 230 | } 231 | ], 232 | "similarQuestions": [] 233 | }, 234 | { 235 | "docId": "AXURkjSmEy2xfNJEUjWq", 236 | "categories": [], 237 | "enabled": true, 238 | "post": "发资料我看下,发我邮箱,先加个微信、发(给我个)网址?", 239 | "replies": [ 240 | { 241 | "rtype": "plain", 242 | "content": "好的,稍后呢我将我的微信号以短信的方式发送给您,您加一下,相关资料呢我之后也会用微信跟您沟通,您看可以吗?" 243 | } 244 | ], 245 | "similarQuestions": [ 246 | "发(给我个)网址?", 247 | "先加个微信", 248 | "发我邮箱", 249 | "发资料我看下" 250 | ] 251 | }, 252 | { 253 | "docId": "AXURkXYcEy2xfNJEUjWp", 254 | "categories": [], 255 | "enabled": true, 256 | "post": "你们怎么有我号码的?", 257 | "replies": [ 258 | { 259 | "rtype": "plain", 260 | "content": "我们都是系统随机拨号的,如果不巧打扰到您确实抱歉了。" 261 | } 262 | ], 263 | "similarQuestions": [] 264 | }, 265 | { 266 | "docId": "AXURkRekEy2xfNJEUjWj", 267 | "categories": [], 268 | "enabled": true, 269 | "post": "机器人, 录音,假人,程序,你是人还是机器啊", 270 | "replies": [ 271 | { 272 | "rtype": "plain", 273 | "content": "其实这个不重要啦,我们也是想把最新的活动信息告诉给您,您可以考虑一下哦" 274 | } 275 | ], 276 | "similarQuestions": [ 277 | "你是人还是机器啊", 278 | "程序", 279 | "假人", 280 | "录音,", 281 | "机器人" 282 | ] 283 | }, 284 | { 285 | "docId": "AXURkCyAEy2xfNJEUjWg", 286 | "categories": [], 287 | "enabled": true, 288 | "post": "你太不专业了,这都不知道?", 289 | "replies": [ 290 | { 291 | "rtype": "plain", 292 | "content": "不好意思哦,我也是新来的,要不稍后让我们经理给您回电话详细介绍一下,可以吗?" 293 | } 294 | ], 295 | "similarQuestions": [ 296 | "这都不知道?", 297 | "你太不专业了" 298 | ] 299 | }, 300 | { 301 | "docId": "AXURj6ScEy2xfNJEUjWf", 302 | "categories": [], 303 | "enabled": true, 304 | "post": "你多大了?", 305 | "replies": [ 306 | { 307 | "rtype": "plain", 308 | "content": "我是标准的90后呢!" 309 | } 310 | ], 311 | "similarQuestions": [] 312 | }, 313 | { 314 | "docId": "AXURj0AfEy2xfNJEUjWc", 315 | "categories": [], 316 | "enabled": true, 317 | "post": "你叫什么名字、你姓什么?", 318 | "replies": [ 319 | { 320 | "rtype": "plain", 321 | "content": "其实这个不重要啦,我们也是想把最新的活动信息告诉给您,您可以考虑一下哦" 322 | } 323 | ], 324 | "similarQuestions": [ 325 | "你姓什么?", 326 | "你叫什么名字" 327 | ] 328 | }, 329 | { 330 | "docId": "AXURjswdEy2xfNJEUjWX", 331 | "categories": [], 332 | "enabled": true, 333 | "post": "骗子,骗人的吧,骗钱的,是不是骗子", 334 | "replies": [ 335 | { 336 | "rtype": "plain", 337 | "content": "这个您放心我们是XXX,生产销售和仓储发货都是在茅台镇原产地,这么好的茅台私藏酒平均下来一瓶不到65块钱,而且全国包邮已经是优惠到极限了,这个价格您也买不了上当是吧!" 338 | } 339 | ], 340 | "similarQuestions": [ 341 | "是不是骗子", 342 | "骗钱的", 343 | "骗人的吧", 344 | "骗子" 345 | ] 346 | }, 347 | { 348 | "docId": "AXURjf0REy2xfNJEUjWW", 349 | "categories": [], 350 | "enabled": true, 351 | "post": "价格多少", 352 | "replies": [ 353 | { 354 | "rtype": "plain", 355 | "content": "市场价格699元一瓶,4100多元一箱。现在推广期间398元一整箱。" 356 | } 357 | ], 358 | "similarQuestions": [] 359 | }, 360 | { 361 | "docId": "AXURja4WEy2xfNJEUjWT", 362 | "categories": [], 363 | "enabled": true, 364 | "post": "公司地址,改天过去看下", 365 | "replies": [ 366 | { 367 | "rtype": "plain", 368 | "content": "咱们公司在XXX" 369 | } 370 | ], 371 | "similarQuestions": [ 372 | "改天过去看下", 373 | "公司地址" 374 | ] 375 | }, 376 | { 377 | "docId": "AXURjTjrEy2xfNJEUjWS", 378 | "categories": [], 379 | "enabled": true, 380 | "post": "公司名称", 381 | "replies": [ 382 | { 383 | "rtype": "plain", 384 | "content": "XXX" 385 | } 386 | ], 387 | "similarQuestions": [] 388 | } 389 | ] -------------------------------------------------------------------------------- /achieves/酒水/flow.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/酒水/flow.xlsx -------------------------------------------------------------------------------- /achieves/闲聊/.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | *.swp 3 | *.swo 4 | *.sublime-* 5 | *.pyc 6 | jmeter.log 7 | __pycache__ 8 | tmp/ 9 | package-lock.json 10 | node_modules/ 11 | sftp-config.json 12 | .DS_Store 13 | *.iml 14 | *.ipr 15 | *.iws 16 | *.idea 17 | ~$*.xls* 18 | ~$*.ppt* 19 | ~$*.doc* 20 | nohup.out 21 | 22 | CMakeLists.txt.user 23 | CMakeCache.txt 24 | CMakeFiles 25 | CMakeScripts 26 | Testing 27 | Makefile 28 | build 29 | build-* 30 | cmake_install.cmake 31 | install_manifest.txt 32 | compile_commands.json 33 | CTestTestfile.cmake 34 | _deps 35 | .env 36 | -------------------------------------------------------------------------------- /achieves/闲聊/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2020 Chatopera Inc. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | -------------------------------------------------------------------------------- /achieves/闲聊/README.md: -------------------------------------------------------------------------------- 1 | # Chatbot 闲聊机器人 2 | 3 | 语料来自 [CSDN 下载频道](https://download.csdn.net/),闲聊语料资源较多,可参考 [faq.json](./faq.json) 中的格式追加。 4 | 5 | ## 导入知识库 6 | 7 | 知识库文件:[faq.json](./faq.json) 8 | 9 | 10 | 11 | ## 导入多轮对话 12 | 13 | 多轮对话文件:[c66 发布包](./releases) 14 | 15 | 下载安装多轮对话设计器,参考 [文档](../../README.md)。 16 | 17 | ## 在多轮对话知识库中调试 18 | 19 | 20 | -------------------------------------------------------------------------------- /achieves/闲聊/assets/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/闲聊/assets/1.png -------------------------------------------------------------------------------- /achieves/闲聊/bot.conversations.c66: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/achieves/闲聊/bot.conversations.c66 -------------------------------------------------------------------------------- /assets/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/assets/1.jpg -------------------------------------------------------------------------------- /assets/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/assets/10.jpg -------------------------------------------------------------------------------- /assets/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/assets/11.jpg -------------------------------------------------------------------------------- /assets/12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/assets/12.jpg -------------------------------------------------------------------------------- /assets/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/assets/2.png -------------------------------------------------------------------------------- /assets/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/assets/3.jpg -------------------------------------------------------------------------------- /assets/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/assets/4.jpg -------------------------------------------------------------------------------- /assets/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/assets/5.jpg -------------------------------------------------------------------------------- /assets/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/assets/6.png -------------------------------------------------------------------------------- /assets/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/assets/7.jpg -------------------------------------------------------------------------------- /assets/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/assets/8.png -------------------------------------------------------------------------------- /assets/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/assets/9.jpg -------------------------------------------------------------------------------- /assets/WechatIMG4918.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/assets/WechatIMG4918.jpeg -------------------------------------------------------------------------------- /assets/demo-contact.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "张三", 3 | "phone": "15801213166" 4 | } -------------------------------------------------------------------------------- /assets/image-2021-05-14-095741.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/assets/image-2021-05-14-095741.png -------------------------------------------------------------------------------- /assets/images/screenshot_20240620093658.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/assets/images/screenshot_20240620093658.png -------------------------------------------------------------------------------- /assets/images/screenshot_20240627135527.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/assets/images/screenshot_20240627135527.png -------------------------------------------------------------------------------- /assets/images/screenshot_20240627135732.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/assets/images/screenshot_20240627135732.png -------------------------------------------------------------------------------- /assets/sample.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | ########################################### 3 | # 4 | ########################################### 5 | 6 | # constants 7 | baseDir=$(cd `dirname "$0"`;pwd) 8 | export PYTHONUNBUFFERED=1 9 | export PATH=/opt/miniconda3/envs/venv-py3/bin:$PATH 10 | 11 | # functions 12 | 13 | # main 14 | [ -z "${BASH_SOURCE[0]}" -o "${BASH_SOURCE[0]}" = "$0" ] || return 15 | cd $baseDir/../projects 16 | 17 | if [[ ! -z "$1" ]]; then 18 | 19 | if [ -d $1 ]; then 20 | echo "BOT" $1 "already exists." 21 | exit 1 22 | fi 23 | 24 | mkdir $1 25 | cd $1 26 | mkdir {releases,botarchive,assets} 27 | touch README.md 28 | echo "# Chatbot $1" > README.md 29 | cat ../../assets/tpls/README.ap >> README.md 30 | cp -rf ../../assets/tpls/{sample.env,scripts,botarchive,package.json,LICENSE,.gitignore} . 31 | mkdir tmp 32 | cp sample.env .env 33 | echo `pwd` "is created." 34 | echo "Customize" `pwd`/.env "with your own bot." 35 | echo "Done." 36 | else 37 | echo "Usage: $0" YOUR_BOT_NAME 38 | exit 1 39 | fi 40 | 41 | -------------------------------------------------------------------------------- /assets/tpls/.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | *.swp 3 | *.swo 4 | *.sublime-* 5 | *.pyc 6 | jmeter.log 7 | __pycache__ 8 | tmp/ 9 | package-lock.json 10 | node_modules/ 11 | sftp-config.json 12 | .DS_Store 13 | *.iml 14 | *.ipr 15 | *.iws 16 | *.idea 17 | ~$*.xls* 18 | ~$*.ppt* 19 | ~$*.doc* 20 | nohup.out 21 | 22 | CMakeLists.txt.user 23 | CMakeCache.txt 24 | CMakeFiles 25 | CMakeScripts 26 | Testing 27 | Makefile 28 | build 29 | build-* 30 | cmake_install.cmake 31 | install_manifest.txt 32 | compile_commands.json 33 | CTestTestfile.cmake 34 | _deps 35 | .env 36 | -------------------------------------------------------------------------------- /assets/tpls/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2020 Chatopera Inc. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | -------------------------------------------------------------------------------- /assets/tpls/README.ap: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## 导入知识库 4 | 5 | 知识库文件:[faq.json](./faq.json) 6 | 7 | 8 | 9 | ## 导入多轮对话 10 | 11 | 多轮对话文件:[c66 发布包](./releases) 12 | 13 | 下载安装多轮对话设计器并添加机器人,参考 [文档](../../README.md)。 14 | 15 | ## 在多轮对话知识库中调试 16 | 17 | 进入机器人详情,点击“上传”,编辑一个对话,开始体验。 18 | 19 | -------------------------------------------------------------------------------- /assets/tpls/botarchive/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SampleChatbot", 3 | "version": "1.0.0", 4 | "primaryLanguage": "zh_CN", 5 | "conversations": [ 6 | { 7 | "name": "greetings", 8 | "enabled": true 9 | } 10 | ], 11 | "config": {} 12 | } 13 | -------------------------------------------------------------------------------- /assets/tpls/botarchive/plugin.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/assets/tpls/botarchive/plugin.js -------------------------------------------------------------------------------- /assets/tpls/botarchive/zh_CN.greetings.ms: -------------------------------------------------------------------------------- 1 | + 你好 2 | - 你好! -------------------------------------------------------------------------------- /assets/tpls/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@chatopera/chatbot-sample", 3 | "version": "1.0.0", 4 | "description": "Chatbot samples delivered by Chatopera Inc.", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "SEE IN LICENSE", 11 | "dependencies": { 12 | "@chatopera/sdk": "^2.5.3" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /assets/tpls/sample.env: -------------------------------------------------------------------------------- 1 | # Chatopera Bot Cloud is the default provider. 2 | BOT_PROVIDER=https://bot.chatopera.com 3 | 4 | # Required to set with your own client id and secret. 5 | # Get them from Bot settings page. 6 | BOT_CLIENT_ID=5f1f9ed11aba0f001b2cb6c3 7 | BOT_CLIENT_SECRET=xxx 8 | 9 | # some other properties and default values 10 | BOT_USERNAME=testuser 11 | BOT_TRACE_LEVEL=DEBUG 12 | BOT_FAQ_BEST_REPLY=0.8 13 | BOT_FAQ_SUGG_REPLY=0.6 -------------------------------------------------------------------------------- /assets/tpls/scripts/archive.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | ########################################### 3 | # 4 | ########################################### 5 | 6 | # constants 7 | baseDir=$(cd `dirname "$0"`;pwd) 8 | 9 | # functions 10 | 11 | # main 12 | [ -z "${BASH_SOURCE[0]}" -o "${BASH_SOURCE[0]}" = "$0" ] || return 13 | cd $baseDir/.. 14 | 15 | ## resolve BOT_DIR, assume it is the first param. 16 | BOT_DIR=`pwd` 17 | cd $BOT_DIR 18 | 19 | if [ ! -d botarchive ]; then 20 | echo `pwd`"/botarchive Not Found" 21 | exit 1 22 | fi 23 | 24 | cd botarchive 25 | # Version key/value should be on his own line 26 | BOT_VERSION=$(cat index.json \ 27 | | grep version \ 28 | | head -1 \ 29 | | awk -F: '{ print $2 }' \ 30 | | sed 's/[",]//g' | xargs) 31 | 32 | BOT_NAME=$(cat index.json \ 33 | | grep name \ 34 | | head -1 \ 35 | | awk -F: '{ print $2 }' \ 36 | | sed 's/[",]//g' | xargs) 37 | 38 | BOT_LANG=$(cat index.json \ 39 | | grep primaryLanguage \ 40 | | head -1 \ 41 | | awk -F: '{ print $2 }' \ 42 | | sed 's/[",]//g' | xargs) 43 | 44 | BOT_ARCHIVE_FILE=$BOT_NAME.$BOT_LANG.$BOT_VERSION.c66 45 | 46 | cd .. 47 | echo "Packaging conversations as" `pwd`/releases/$BOT_ARCHIVE_FILE 48 | zip -j $BOT_ARCHIVE_FILE -r ./botarchive 49 | mv *.c66 releases 50 | echo "Done." 51 | 52 | -------------------------------------------------------------------------------- /assets/tpls/scripts/bot: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | ########################################### 3 | # 4 | ########################################### 5 | 6 | # constants 7 | baseDir=$(cd `dirname "$0"`;pwd) 8 | 9 | # functions 10 | 11 | # main 12 | [ -z "${BASH_SOURCE[0]}" -o "${BASH_SOURCE[0]}" = "$0" ] || return 13 | cd $baseDir/.. 14 | export PATH=node_modules/@chatopera/sdk/bin:$PATH 15 | 16 | if [ ! -d node_modules/@chatopera/sdk/bin ]; then 17 | echo "Run admin/install.sh first." 18 | exit 1 19 | fi 20 | 21 | node_modules/@chatopera/sdk/bin/bot.js $* 22 | -------------------------------------------------------------------------------- /assets/tpls/scripts/chat.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | ########################################### 3 | # 4 | ########################################### 5 | 6 | # constants 7 | baseDir=$(cd `dirname "$0"`;pwd) 8 | 9 | # functions 10 | 11 | # main 12 | [ -z "${BASH_SOURCE[0]}" -o "${BASH_SOURCE[0]}" = "$0" ] || return 13 | cd $baseDir/.. 14 | 15 | ## resolve BOT_DIR, assume it is the first param. 16 | BOT_DIR=`pwd` 17 | 18 | if [ -z "$BOT_DIR" ] || [ ! -d $BOT_DIR ] ; then 19 | echo "Usage $0" BOT_DIR 20 | echo "BOT_DIR is folder name under" `pwd` "which contains bot archives." 21 | echo "Folder structure example:" 22 | echo " BOT_DIR 23 | ├── README.md 24 | └── botarchive 25 | ├── LANG.greetings.ms 26 | ├── LANG.promotion_1.ms 27 | ├── index.json 28 | └── plugin.js" 29 | echo "LANG is the primaryLanguage for this bot, set as en_US or zh_CN as they were supported currently." 30 | echo "Guide https://docs.chatopera.com/products/chatbot-platform/conversation.html" 31 | exit 1 32 | fi 33 | 34 | if [ ! -f .env ]; then 35 | echo "Can not find .env. Run cp" `pwd`/sample.env `pwd`/.env 36 | echo "Edit it and replace with your settings." 37 | exit 1 38 | fi 39 | 40 | source .env 41 | 42 | set -x 43 | scripts/bot connect \ 44 | -p $BOT_PROVIDER \ 45 | -c $BOT_CLIENT_ID \ 46 | -s $BOT_CLIENT_SECRET \ 47 | -u $BOT_USERNAME \ 48 | -fb $BOT_FAQ_BEST_REPLY \ 49 | -fs $BOT_FAQ_SUGG_REPLY 50 | -------------------------------------------------------------------------------- /assets/tpls/scripts/deploy.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | ########################################### 3 | # 4 | ########################################### 5 | 6 | # constants 7 | baseDir=$(cd `dirname "$0"`;pwd) 8 | 9 | # functions 10 | 11 | # main 12 | [ -z "${BASH_SOURCE[0]}" -o "${BASH_SOURCE[0]}" = "$0" ] || return 13 | cd $baseDir/.. 14 | 15 | ## resolve BOT_DIR, assume it is the first param. 16 | BOT_DIR=`pwd` 17 | 18 | if [ -z "$BOT_DIR" ] || [ ! -d $BOT_DIR ] ; then 19 | echo "Usage $0" BOT_DIR 20 | echo "BOT_DIR is folder name under" `pwd` "which contains bot archives." 21 | echo "Folder structure example:" 22 | echo " BOT_DIR 23 | ├── README.md 24 | └── botarchive 25 | ├── LANG.greetings.ms 26 | ├── LANG.promotion_1.ms 27 | ├── index.json 28 | └── plugin.js" 29 | echo "LANG is the primaryLanguage for this bot, set as en_US or zh_CN as they were supported currently." 30 | echo "Guide https://docs.chatopera.com/products/chatbot-platform/conversation.html" 31 | exit 1 32 | fi 33 | 34 | if [ ! -f .env ]; then 35 | echo "Can not find .env. Run cp" `pwd`/sample.env `pwd`/.env 36 | echo "Edit it and replace with your settings." 37 | exit 1 38 | fi 39 | 40 | source .env 41 | 42 | set -x 43 | scripts/bot deploy -c $BOT_CLIENT_ID \ 44 | -s $BOT_CLIENT_SECRET \ 45 | -p $BOT_PROVIDER \ 46 | -b `pwd`/botarchive 47 | -------------------------------------------------------------------------------- /assets/tpls/scripts/install.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | ########################################### 3 | # 4 | ########################################### 5 | 6 | # constants 7 | baseDir=$(cd `dirname "$0"`;pwd) 8 | 9 | # functions 10 | 11 | # main 12 | [ -z "${BASH_SOURCE[0]}" -o "${BASH_SOURCE[0]}" = "$0" ] || return 13 | cd $baseDir/.. 14 | npm install -------------------------------------------------------------------------------- /assets/tpls/scripts/trace.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | ########################################### 3 | # 4 | ########################################### 5 | 6 | # constants 7 | baseDir=$(cd `dirname "$0"`;pwd) 8 | 9 | # functions 10 | 11 | # main 12 | [ -z "${BASH_SOURCE[0]}" -o "${BASH_SOURCE[0]}" = "$0" ] || return 13 | cd $baseDir/.. 14 | 15 | ## resolve BOT_DIR, assume it is the first param. 16 | BOT_DIR=`pwd` 17 | 18 | if [ -z "$BOT_DIR" ] || [ ! -d $BOT_DIR ] ; then 19 | echo "Usage $0" BOT_DIR 20 | echo "BOT_DIR is folder name under" `pwd` "which contains bot archives." 21 | echo "Folder structure example:" 22 | echo " BOT_DIR 23 | ├── README.md 24 | └── botarchive 25 | ├── LANG.greetings.ms 26 | ├── LANG.promotion_1.ms 27 | ├── index.json 28 | └── plugin.js" 29 | echo "LANG is the primaryLanguage for this bot, set as en_US or zh_CN as they were supported currently." 30 | echo "Guide https://docs.chatopera.com/products/chatbot-platform/conversation.html" 31 | exit 1 32 | fi 33 | 34 | if [ ! -f .env ]; then 35 | echo "Can not find .env. Run cp" `pwd`/sample.env `pwd`/.env 36 | echo "Edit it and replace with your settings." 37 | exit 1 38 | fi 39 | 40 | source .env 41 | 42 | set -x 43 | scripts/bot trace -c $BOT_CLIENT_ID \ 44 | -s $BOT_CLIENT_SECRET \ 45 | -p $BOT_PROVIDER \ 46 | -l $BOT_TRACE_LEVEL 47 | -------------------------------------------------------------------------------- /bin/commit.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | ########################################### 3 | # 4 | ########################################### 5 | 6 | # constants 7 | baseDir=$(cd -P `dirname "$0"`;pwd) 8 | export PYTHONUNBUFFERED=1 9 | export PATH=/opt/miniconda3/envs/venv-py3/bin:$PATH 10 | 11 | # functions 12 | 13 | # main 14 | [ -z "${BASH_SOURCE[0]}" -o "${BASH_SOURCE[0]}" = "$0" ] || return 15 | 16 | set -x 17 | cd $baseDir/.. 18 | git add --all 19 | msg="Update content" 20 | 21 | if [ ! "$1" == '' ]; then 22 | msg="$*" 23 | fi 24 | 25 | git commit -m "$msg" 26 | git push origin master 27 | git push gitee master -------------------------------------------------------------------------------- /bin/export.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | ########################################### 3 | # 4 | ########################################### 5 | 6 | # constants 7 | baseDir=$(cd `dirname "$0"`;pwd) 8 | BOT_DIR=$PWD 9 | BOT_DICTS_FILE=bot.dicts.json 10 | BOT_FAQS_FILE=bot.faqs.json 11 | BOT_INTENTS_FILE=bot.intents.json 12 | BOT_CONV_FILE=bot.conversations.c66 13 | 14 | # functions 15 | 16 | # main 17 | [ -z "${BASH_SOURCE[0]}" -o "${BASH_SOURCE[0]}" = "$0" ] || return 18 | 19 | echo "Current workarea:" $BOT_DIR 20 | 21 | if [ ! -f .env ]; then 22 | echo "Error, no .env found at" $BOT_DIR 23 | echo "Generate a template with command \"bot env\"" 24 | exit 1 25 | fi 26 | 27 | set -x 28 | 29 | rm -rf $BOT_DICTS_FILE $BOT_FAQS_FILE $BOT_INTENTS_FILE $BOT_CONV_FILE 30 | 31 | # 执行导出,以下命令并无顺序依赖关系 32 | bot dicts -a export -f $BOT_DICTS_FILE && \ 33 | bot faq -a export -f $BOT_FAQS_FILE && \ 34 | bot intents -a export -f $BOT_INTENTS_FILE && \ 35 | bot conversation -a export -f $BOT_CONV_FILE 36 | 37 | if [ $? -eq 0 ]; then 38 | rm -rf conversations && mkdir conversations 39 | cd conversations 40 | unzip ../$BOT_CONV_FILE 41 | 42 | pwd; ls -al 43 | echo "Modify values for security reason in "`pwd`"/index.json if it contains confidential, should better take a look before commit to public." 44 | echo "Done." 45 | fi 46 | -------------------------------------------------------------------------------- /bin/import.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | ########################################### 3 | # 4 | ########################################### 5 | 6 | # constants 7 | baseDir=$(cd `dirname "$0"`;pwd) 8 | BOT_DIR=$PWD 9 | BOT_DICTS_FILE=bot.dicts.json 10 | BOT_FAQS_FILE=bot.faqs.json 11 | BOT_INTENTS_FILE=bot.intents.json 12 | BOT_CONV_FILE=bot.conversations.c66 13 | BOT_CONV_DIR=conversations 14 | 15 | # functions 16 | 17 | # main 18 | [ -z "${BASH_SOURCE[0]}" -o "${BASH_SOURCE[0]}" = "$0" ] || return 19 | 20 | echo "Current workarea:" $BOT_DIR 21 | 22 | if [ ! -f .env ]; then 23 | echo "Error, no .env found at" $BOT_DIR 24 | echo "Generate a template with command \"bot env\"" 25 | exit 1 26 | fi 27 | 28 | set -x 29 | 30 | if [ -f $BOT_DIR/$BOT_DICTS_FILE ]; then 31 | echo " Import dicts ..." 32 | bot dicts --action import -f $BOT_DIR/$BOT_DICTS_FILE 33 | fi 34 | 35 | if [ ! $? -eq 0 ]; then 36 | echo "Error" 37 | exit 1 38 | fi 39 | 40 | if [ -f $BOT_DIR/$BOT_FAQS_FILE ]; then 41 | echo " Import faqs ..." 42 | bot faq --action import -f $BOT_DIR/$BOT_FAQS_FILE 43 | fi 44 | 45 | if [ ! $? -eq 0 ]; then 46 | echo "Error" 47 | exit 1 48 | fi 49 | 50 | if [ -f $BOT_DIR/$BOT_INTENTS_FILE ]; then 51 | echo " Import intents ..." 52 | bot intents --action import -f $BOT_DIR/$BOT_INTENTS_FILE 53 | fi 54 | 55 | if [ ! $? -eq 0 ]; then 56 | echo "Error" 57 | exit 1 58 | fi 59 | 60 | 61 | if [ -d $BOT_DIR/$BOT_CONV_DIR ]; then 62 | echo "Package conversations c66 ..." 63 | $BOT_DIR/../../bin/package.sh 64 | fi 65 | 66 | if [ -f $BOT_DIR/$BOT_CONV_FILE ]; then 67 | echo " Import conversations ..." 68 | bot conversation --action import -f $BOT_DIR/$BOT_CONV_FILE 69 | fi 70 | 71 | if [ ! $? -eq 0 ]; then 72 | echo "Error" 73 | exit 1 74 | fi -------------------------------------------------------------------------------- /bin/package.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | ########################################### 3 | # conversation package 4 | ########################################### 5 | 6 | # constants 7 | baseDir=$(cd `dirname "$0"`;pwd) 8 | BOT_DIR=$PWD 9 | BOT_DICTS_FILE=bot.dicts.json 10 | BOT_FAQS_FILE=bot.faqs.json 11 | BOT_INTENTS_FILE=bot.intents.json 12 | BOT_CONV_FILE=bot.conversations.c66 13 | 14 | # functions 15 | 16 | # main 17 | [ -z "${BASH_SOURCE[0]}" -o "${BASH_SOURCE[0]}" = "$0" ] || return 18 | 19 | echo "Current workarea:" $BOT_DIR 20 | 21 | if [ ! -f .env ]; then 22 | echo "Error, no .env found at" $BOT_DIR 23 | echo "Generate a template with command \"bot env\"" 24 | exit 1 25 | fi 26 | 27 | if [ ! -d conversations ]; then 28 | echo "folder conversations not found." 29 | exit 1 30 | fi 31 | 32 | if [ ! -d tmp ]; then 33 | mkdir tmp 34 | fi 35 | 36 | if [ -f $BOT_CONV_FILE ]; then 37 | mv $BOT_CONV_FILE tmp/$BOT_CONV_FILE.bak 38 | fi 39 | 40 | cd conversations 41 | zip -r ../$BOT_CONV_FILE . 42 | 43 | 44 | if [ ! $? -eq 0 ]; then 45 | echo "Error" 46 | exit 1 47 | else 48 | echo "Generated "$BOT_DIR"/"$BOT_CONV_FILE 49 | echo "Done" 50 | fi -------------------------------------------------------------------------------- /docs/development_cde.md: -------------------------------------------------------------------------------- 1 |
2 | 3 | [主页](https://github.com/chatopera/chatbot-samples) | [Chatopera 云服务](https://docs.chatopera.com/) | [开发者文档](https://docs.chatopera.com/) | [博客专栏](https://chatopera.blog.csdn.net/) 4 | 5 |
6 | 7 | # 基于 多轮对话设计器 开发 8 | 9 | ## 安装和下载多轮对话设计器 10 | 11 | 安装和下载多轮对话设计器:[安装教程](https://docs.chatopera.com/products/chatbot-platform/conversation/cde.html)。 12 | 13 | ## 下载对话应用发布包 14 | 15 | 选择对话模板,比如 [**活动通知**](https://github.com/chatopera/chatbot-samples/tree/master/projects/%E6%B4%BB%E5%8A%A8%E9%80%9A%E7%9F%A5),下载 `bot.conversations.c66` 文件,机器人对话应用发布文件以`.c66`结尾。 16 | 17 | ![](../assets/10.jpg) 18 | 19 | ## 登陆 Chatopera 机器人平台 20 | 21 | 登陆 Chatopera 机器人平台,公有云服务地址为 [https://bot.chatopera.com](https://bot.chatopera.com)。选择语言(中文简体,中文繁体或英语)。 22 | 23 | 设置机器人语言,比如 `zh_CN`,各个对话模板对应的语言参考[https://github.com/chatopera/chatbot-samples](https://github.com/chatopera/chatbot-samples)。 24 | 25 | 在“设置页面”得到`ClientId`和`Secret`。 26 | 27 | ![](../assets/9.jpg) 28 | 29 | ## 导入发布包 30 | 31 | 打开多轮对话设计器,添加机器人,在弹出表单中,填入`ClientId`和`Secret`。 32 | 33 | 然后点击“导入”,选择刚刚下载的`.c66`文件。 34 | 35 | ## 修改话术并测试 36 | 37 | 完成导入后,在“操作”中点击“打开”。 38 | 39 | ![](../assets/7.jpg) 40 | 41 | 以活动通知为例,导入后,点击“上传”,提示上传成功。然后测试对话。 42 | 43 | 在测试对话输入窗口,发送文本。 44 | 45 | ``` 46 | 我:在忙 47 | BOT:那等您方便的时候再联系我吧,祝您生活愉快! 48 | 我:__kickoff_notifyexhibition 49 | BOT:您好,我是XXXX活动委员会的,第10届XXXX,10月1号-15号在XXXX举行,邀请您届时有空过来参观。 50 | ``` 51 | 52 | 修改话题,在右侧脚本和函数编辑窗口更改,然后“保存”-“上传”;再次进行测试。 53 | 54 | 更多内容参考[文档中心](https://docs.chatopera.com/products/chatbot-platform/conversation/index.html)。 55 | 56 | 返回[文档根页面](../)。 57 | -------------------------------------------------------------------------------- /docs/development_nodejs.md: -------------------------------------------------------------------------------- 1 |
2 | 3 | [主页](https://github.com/chatopera/chatbot-samples) | [Chatopera 云服务](https://docs.chatopera.com/) | [开发者文档](https://docs.chatopera.com/) | [博客专栏](https://chatopera.blog.csdn.net/) 4 | 5 |
6 | 7 | # 基于 Node.js 开发 8 | 9 | [Node.js](https://nodejs.org/download/) 是一个 JavaScript 运行时环境,基于 Node.js 可以快速开发后端或前段应用。 Chatopera 支持使用 **多轮对话编辑器** 或 [Node.js](https://nodejs.org/download/)环境下调试多轮对话,导入对话模板作为示例项目、脚手架项目。 10 | 11 | **多轮对话编辑器** 使用更方便,但是基于[Node.js](https://nodejs.org/download/)的开发环境,对于 Node.js 用户或软件开发者更友好。 12 | 13 | 在 Node.js 开发下,除了安装 Node.js 外,还需要 14 | 15 | - 文本编辑器,比如 [Visual Code Studio](https://code.visualstudio.com/),[Sublime Text](https://www.sublimetext.com/),etc。 16 | 17 | - Git 18 | 19 | - 命令行控制台,Bash: Git Bash, Windows 用户; Terminal, Mac 用户;Linux Shell。 20 | 21 | `命令行控制台`就是 Linux Shell 工具,Mac 下内置 Terminal,可以安装 [iterm2](https://www.iterm2.com/)。 22 | 23 | ## 下载代码 24 | 25 | ``` 26 | git@github.com:chatopera/chatbot-samples.git 27 | ``` 28 | 29 | ## 配置 30 | 31 | 基于 Node.js 开发时,配置机器人连接信息。 32 | 33 | ``` 34 | cd projects/示例机器人项目 35 | cp sample.env .env # 编辑 .env 文件 36 | ``` 37 | 38 | 修改 `.env` 文件。 39 | 40 | | key | default | description | 41 | | ------------------ | ------------------------- | -------------------------------------- | 42 | | BOT_PROVIDER | | BOT 服务地址 | 43 | | BOT_CLIENT_ID | 无默认,必填 | 从 PROVIDER 创建机器人,获得 | 44 | | BOT_CLIENT_SECRET | 无默认,必填 | 从 PROVIDER 创建机器人,获得 | 45 | | BOT_USERNAME | testuser | 测试对话的用户 | 46 | | BOT_FAQ_BEST_REPLY | 0.8 | 知识库最佳回复阀值 | 47 | | BOT_FAQ_SUGG_REPLY | 0.6 | 知识库建议回复阀值 | 48 | | BOT_TRACE_LEVEL | DEBUG | trace 跟踪服务器端机器人,日志输出级别 | 49 | 50 | ## 部署 51 | 52 | ``` 53 | scripts/deploy.sh 文件夹名 54 | ``` 55 | 56 | 将部署文件夹的内容,使用 .env 文件中的远程机器人配置信息。 57 | 58 | ## 对话 59 | 60 | ``` 61 | scripts/chat.sh 文件夹名 62 | ``` 63 | 64 | 将启动聊天窗口,使用 .env 文件中的远程机器人配置信息。 65 | 66 | ## 查看日志 67 | 68 | 调试脚本/函数过程中,实时查看日志,日志信息包括:脚本部署更新情况;函数中 debug 的输出。 69 | 70 | ``` 71 | scripts/trace.sh 文件夹名 72 | ``` 73 | 74 | 将启动日志窗口,使用 .env 文件中的远程机器人配置信息。 75 | 76 | ## 打包 77 | 78 | ``` 79 | scripts/archive.sh 文件夹名 80 | ``` 81 | 82 | 将打包文件夹内的 `botarchive`。 83 | 84 | 打包后得到.c66 文件,在**聊天机器人多轮对话控制台**上传。 85 | 86 | ## 撰写脚本和函数 87 | 88 | 更新 `botarchive` 下的脚本和函数文件,实现对话逻辑。 89 | 90 | 教程和语法参考[文档中心:多轮对话](https://docs.chatopera.com/products/chatbot-platform/conversation/index.html)。 91 | 92 | 返回[文档根页面](../)。 93 | -------------------------------------------------------------------------------- /docs/import_bot_to_cloud.md: -------------------------------------------------------------------------------- 1 |
2 | 3 | [主页](https://github.com/chatopera/chatbot-samples) | [Chatopera 云服务](https://docs.chatopera.com/) | [开发者文档](https://docs.chatopera.com/) | [博客专栏](https://chatopera.blog.csdn.net/) 4 | 5 |
6 | 7 | # 体验对话模板机器人的效果 8 | 9 | 作为一个定制化开发聊天机器人的产品,Chatopera 机器人用户体验怎么样呢? 10 | 11 | 以下介绍如何导入并体验对话模板里的聊天机器人。 12 | 13 | ## 下载多轮对话文件 14 | 15 | 对话应用发布包在对话模板目录的文件夹内,文件名:`bot.conversations.c66`。 16 | 17 | ## 创建机器人 18 | 19 | 登陆 Chatopera 机器人平台,公有云服务地址为 [https://bot.chatopera.com](https://bot.chatopera.com)。选择语言(中文简体,中文繁体或英语)。 20 | 21 | 根据对话应用发布包中包含的语言,设置机器人语言,比如 `zh_CN`,各个对话模板对应的语言参考[https://github.com/chatopera/chatbot-samples](https://github.com/chatopera/chatbot-samples)。 22 | 23 | ## 导入多轮对话 24 | 25 | 在 [Chatopera 机器人平台](https://bot.chatopera.com) 进入刚刚创建的机器人详情,从一级菜单导航至`多轮对话`。 26 | 27 | 点击`导入`,上传刚刚下载的`.c66`文件。 28 | 29 | ![](../assets/4.jpg) 30 | 31 | ## 测试对话 32 | 33 | 在 [Chatopera 机器人平台](https://bot.chatopera.com) 进入机器人测试对话页面,选择 `多轮对话`,开始测试。 34 | 35 | ![](../assets/3.jpg) 36 | 37 | 返回[文档根页面](../)。 38 | -------------------------------------------------------------------------------- /projects/GuessNumberBot/.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | *.swp 3 | *.swo 4 | *.sublime-* 5 | *.pyc 6 | jmeter.log 7 | __pycache__ 8 | tmp/ 9 | package-lock.json 10 | node_modules/ 11 | sftp-config.json 12 | .DS_Store 13 | *.iml 14 | *.ipr 15 | *.iws 16 | *.idea 17 | ~$*.xls* 18 | ~$*.ppt* 19 | ~$*.doc* 20 | nohup.out 21 | 22 | CMakeLists.txt.user 23 | CMakeCache.txt 24 | CMakeFiles 25 | CMakeScripts 26 | Testing 27 | Makefile 28 | build 29 | build-* 30 | cmake_install.cmake 31 | install_manifest.txt 32 | compile_commands.json 33 | CTestTestfile.cmake 34 | _deps 35 | .env 36 | -------------------------------------------------------------------------------- /projects/GuessNumberBot/README.md: -------------------------------------------------------------------------------- 1 | # GuessNumberBot 2 | 3 | 4 | A simple game for demo purpose. Guess the secret number in the magician's hat. 5 | If your guess is too high or too low, you'll get a hint. 6 | https://www.funbrain.com/games/guess-the-number 7 | 8 | ## Try it 9 | 10 | Open link in browser or scan QR with mobile device. 11 | 12 | Link:[https://h5.chatopera.com/im/text/1lB1ck.html](https://h5.chatopera.com/im/text/1lB1ck.html) 13 | 14 | ![Alt text](assets/screenshot_20240627154900.png) 15 | 16 | ## Import chat corpus into Chatopera Bot 17 | Import this bot's corpus into your bot on Chatopera Cloud Service by [reading doc](https://github.com/chatopera/chatbot-samples?tab=readme-ov-file#%E4%BD%BF%E7%94%A8-cli-%E5%AF%BC%E5%85%A5%E7%A4%BA%E4%BE%8B%E7%A8%8B%E5%BA%8F). 18 | 19 | ## Customize 20 | Use [CDE](https://docs.chatopera.com/products/chatbot-platform/tutorials/3-add-scripts-function.html) to customize bot chat skills. 21 | After importing bot, send `start` to begin the game. 22 | 23 | ![](../../assets/11.jpg) -------------------------------------------------------------------------------- /projects/GuessNumberBot/assets/screenshot_20240627153349.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/projects/GuessNumberBot/assets/screenshot_20240627153349.png -------------------------------------------------------------------------------- /projects/GuessNumberBot/assets/screenshot_20240627154900.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/projects/GuessNumberBot/assets/screenshot_20240627154900.png -------------------------------------------------------------------------------- /projects/GuessNumberBot/bot.conversations.c66: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/projects/GuessNumberBot/bot.conversations.c66 -------------------------------------------------------------------------------- /projects/GuessNumberBot/bot.dicts.json: -------------------------------------------------------------------------------- 1 | { 2 | "sysdicts": { 3 | "@ANY": { 4 | "name": "@ANY", 5 | "description": "任意字符串", 6 | "samples": "任意字符串", 7 | "createdate": "2020-03-27 14:32:20", 8 | "updatedate": "2020-03-27 14:32:20", 9 | "referred": false, 10 | "type": "any", 11 | "vendor": "Chatopera", 12 | "used": null 13 | }, 14 | "@PER": { 15 | "name": "@PER", 16 | "description": "人名", 17 | "samples": "郭德纲;于谦", 18 | "createdate": "2019-09-06 14:53:54", 19 | "updatedate": "2019-12-31 14:03:20", 20 | "referred": false, 21 | "type": "ml", 22 | "vendor": "Chatopera", 23 | "used": null 24 | }, 25 | "@TIME": { 26 | "name": "@TIME", 27 | "description": "时间", 28 | "samples": "今天;下午一时", 29 | "createdate": "2019-09-06 14:53:54", 30 | "updatedate": "2019-12-31 14:03:20", 31 | "referred": false, 32 | "type": "ml", 33 | "vendor": "Chatopera", 34 | "used": null 35 | }, 36 | "@LOC": { 37 | "name": "@LOC", 38 | "description": "地名", 39 | "samples": "北京市;东京", 40 | "createdate": "2019-09-06 14:53:54", 41 | "updatedate": "2019-12-31 14:03:20", 42 | "referred": false, 43 | "type": "ml", 44 | "vendor": "Chatopera", 45 | "used": null 46 | }, 47 | "@ORG": { 48 | "name": "@ORG", 49 | "description": "组织机构", 50 | "samples": "北京华夏春松科技有限公司", 51 | "createdate": "2019-09-06 14:53:54", 52 | "updatedate": "2019-12-31 14:03:20", 53 | "referred": false, 54 | "type": "ml", 55 | "vendor": "Chatopera", 56 | "used": null 57 | } 58 | }, 59 | "patterndicts": {}, 60 | "vocabdicts": {} 61 | } -------------------------------------------------------------------------------- /projects/GuessNumberBot/bot.faqs.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /projects/GuessNumberBot/bot.intents.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /projects/GuessNumberBot/conversations/en_US.greetings.ms: -------------------------------------------------------------------------------- 1 | /** 2 | * Get more tutorials, launch your bot today! 3 | * https://github.com/chatopera/chatbot-samples 4 | */ 5 | 6 | + (hello|hi) 7 | - hi, there 8 | - how are you? 9 | 10 | + __faq_hot_list 11 | - {keep} ^help() 12 | -------------------------------------------------------------------------------- /projects/GuessNumberBot/conversations/en_US.guess_the_number.ms: -------------------------------------------------------------------------------- 1 | /** 2 | * Guess the secret number in the magician's hat. 3 | * If your guess is too high or too low, you'll get a hint. 4 | * https://www.funbrain.com/games/guess-the-number 5 | */ 6 | 7 | + {keep} __kickoff_guess_num 8 | - {@__start_guess_num} ^regenSecretNumber(1,100) 9 | 10 | 11 | + (*) 12 | % {@__start_guess_num} ^regenSecretNumber(1,100) 13 | - ^verifyInputAgainstSecret() 14 | 15 | + {keep} start 16 | - {@__kickoff_guess_num} 17 | 18 | + help 19 | - A secret number is in my hat. 20 | ^ You guess what number it is. If your guess is too high or too low, 21 | ^ I will give you a hint. See how many turns it takes you to win! send "start" to begin. 22 | 23 | 24 | // group replies 25 | + __start_guess_num 26 | - I have picked a secret number and put it in my hat. 27 | ^ Range from 1 to 100. Guess what number it is. 28 | -------------------------------------------------------------------------------- /projects/GuessNumberBot/conversations/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GuessNumberBot ", 3 | "primaryLanguage": "en_US", 4 | "created": "2024-06-27T07:32:46.385Z", 5 | "modified": "2024-06-27T07:45:20.296Z", 6 | "description": "示例程序,https://github.com/chatopera/chatbot-samples,勿删!! ", 7 | "fallback": "I don't understand.", 8 | "welcome": "My super power is talk.", 9 | "gambitLikeThreshold": 0.8, 10 | "gambitIntentQuestionMaxAttempts": 2, 11 | "historyCheckpoints": 100, 12 | "conversationTimeout": 1800, 13 | "faqBestReplyThreshold": 0.8, 14 | "faqSuggReplyThreshold": 0.5, 15 | "llmBaiduErnieBot": false, 16 | "config": { 17 | "@SYS_INTENT_BRANCH": "dev" 18 | }, 19 | "version": "eDOnft4Db", 20 | "conversations": [ 21 | { 22 | "name": "greetings", 23 | "enabled": true 24 | }, 25 | { 26 | "name": "guess_the_number", 27 | "enabled": true 28 | } 29 | ] 30 | } -------------------------------------------------------------------------------- /projects/GuessNumberBot/conversations/plugin.js: -------------------------------------------------------------------------------- 1 | let rangeMax = 100; 2 | let rangeMin = 1; 3 | let turnMax = 5; 4 | 5 | const secretKey = function(uid) { 6 | return "guess_num:secret:" + uid; 7 | } 8 | 9 | const turnKey = function(uid) { 10 | return "guess_num:turn:" + uid; 11 | } 12 | 13 | 14 | function getRandomInt(max, min) { 15 | return Math.floor(Math.random() * (max - min) + min); 16 | } 17 | 18 | function dropSession(maestro, uid) { 19 | maestro.del(secretKey(uid)); 20 | maestro.del(turnKey(uid)); 21 | } 22 | 23 | exports.regenSecretNumber = async function(min, max) { 24 | let secret = getRandomInt(max, min); 25 | rangeMax = max; 26 | rangeMin = min; 27 | debug("[regenSecretNumber] range [%s,%s], result %s", min, max, secret); 28 | this.maestro.set(secretKey(this.user.id), secret); 29 | this.maestro.set(turnKey(this.user.id), 0); 30 | 31 | return ""; 32 | } 33 | 34 | exports.verifyInputAgainstSecret = async function(input) { 35 | let secret = await this.maestro.get(secretKey(this.user.id)); 36 | let turn = await this.maestro.incrby(turnKey(this.user.id), 1); 37 | debug("[verifyInputAgainstSecret] Turn %s, input %s, secret %s", turn, input, secret); 38 | 39 | if (typeof input === "string" && input.includes("start")) { 40 | return "Ok, I start a new session. ^topicRedirect('guess_the_number', '__kickoff_guess_num')"; 41 | } 42 | 43 | if (typeof input === "string" && input.includes("help")) { 44 | return "^topicRedirect('guess_the_number', 'help')"; 45 | } 46 | 47 | try { 48 | let inputNumber = Number(input); 49 | if (isNaN(inputNumber) || inputNumber < rangeMin || inputNumber > rangeMax) 50 | return `Not a valid number, pls give me a Arabic number in range from ${rangeMax} to ${rangeMin}.`; 51 | 52 | if (inputNumber == secret) { 53 | // It took you 2 turns to guess my number, which was 10. 54 | dropSession(this.maestro, this.user.id); 55 | return `{CLEAR} Bingo! It took you ${turn} turns to guess my number, which was ${secret}.`; 56 | } else if (inputNumber > secret) { 57 | 58 | if (turn == turnMax) { 59 | dropSession(this.maestro, this.user.id); 60 | return `{CLEAR} Oops!! No turns left. My number was ${secret}. Input "start" to begin a new session.`; 61 | } 62 | 63 | return `Turn ${turn}/${turnMax}. Your guess, ${inputNumber}, is too high.`; 64 | } else { 65 | 66 | if (turn == turnMax) { 67 | dropSession(this.maestro, this.user.id); 68 | return `{CLEAR} Oops!! No turns left. My number was ${secret}. Input "start" to begin a new session.`; 69 | } 70 | 71 | return `Turn ${turn}/${turnMax}. Your guess, ${inputNumber}, is too low.` 72 | } 73 | 74 | } catch (e) { 75 | return `Not a valid number, pls give me a Arabic number in range from ${rangeMax} to ${rangeMin}.`; 76 | } 77 | 78 | return ""; 79 | } 80 | 81 | 82 | exports.help = async function() { 83 | // message with button, https://dwz.chatopera.com/jQ0F9G 84 | return { 85 | text: "A secret number is in my hat. You guess what number it is. If your guess is too high or too low, I will give you a hint. See how many turns it takes you to win! send `start` to begin. Are you ready?", 86 | params: [{ 87 | label: "Go", 88 | type: "button", 89 | text: "start" 90 | }] 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /projects/README.md: -------------------------------------------------------------------------------- 1 | ## 导航 2 | * 返回到主页,查看[示例程序使用说明](../README.md) 3 | * 进入文档中心[入门教程](https://docs.chatopera.com/products/chatbot-platform/tutorials/index.html) 4 | * 查看[SDK](https://docs.chatopera.com/products/chatbot-platform/references/sdk/index.html) 5 | * 查看[CLI 命令行工具](https://docs.chatopera.com/products/chatbot-platform/references/cli.html) -------------------------------------------------------------------------------- /projects/冰箱报修服务机器人/.env: -------------------------------------------------------------------------------- 1 | # Chatopera BOT Platform 2 | BOT_PROVIDER=https://bot.chatopera.com 3 | BOT_CLIENT_ID=667d1cf99a1184001335d9f7 4 | BOT_CLIENT_SECRET=d8a1225bbe6d4f54987157eb99346f7c 5 | BOT_THRESHOLD_FAQ_BEST_REPLY=0.9 6 | BOT_THRESHOLD_FAQ_SUGG_REPLY=0 7 | BOT_ACCESS_TOKEN= -------------------------------------------------------------------------------- /projects/冰箱报修服务机器人/README.md: -------------------------------------------------------------------------------- 1 | # 冰箱报修服务机器人 2 | 3 | 4 | > 查看创作本机器人的背后的故事,[Chatopera 云服务实现类海尔服务智能客服的功能点比较](https://chatopera.blog.csdn.net/article/details/139992161) 5 | 6 | 7 | ## 体验本示例程序 8 | 9 | 打开链接或二维码。 10 | 11 | 链接:[https://h5.chatopera.com/im/text/0o0wlc.html](https://h5.chatopera.com/im/text/0o0wlc.html) 12 | 13 | ![Alt text](assets/screenshot_20240627161133.png) 14 | 15 | 16 | ## 功能介绍 17 | 18 | 实现类似海尔服务的智能客服 DEMO。 19 | 20 | ## 导入机器人语料到 Chatopera 云服务 21 | 22 | 将本示例程序导入到您的机器人,见[参考文档](https://github.com/chatopera/chatbot-samples?tab=readme-ov-file#%E4%BD%BF%E7%94%A8-cli-%E5%AF%BC%E5%85%A5%E7%A4%BA%E4%BE%8B%E7%A8%8B%E5%BA%8F)。 23 | 24 | ## 调试对话 25 | 26 | 使用多轮对话设计器调试,见[参考文档](https://docs.chatopera.com/products/chatbot-platform/tutorials/3-add-scripts-function.html)。 27 | 28 | ![Alt text](assets/screenshot_20240628102540.png) 29 | -------------------------------------------------------------------------------- /projects/冰箱报修服务机器人/assets/screenshot_20240627161133.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/projects/冰箱报修服务机器人/assets/screenshot_20240627161133.png -------------------------------------------------------------------------------- /projects/冰箱报修服务机器人/assets/screenshot_20240628102540.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/projects/冰箱报修服务机器人/assets/screenshot_20240628102540.png -------------------------------------------------------------------------------- /projects/冰箱报修服务机器人/bot.conversations.c66: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/projects/冰箱报修服务机器人/bot.conversations.c66 -------------------------------------------------------------------------------- /projects/冰箱报修服务机器人/bot.dicts.json: -------------------------------------------------------------------------------- 1 | { 2 | "sysdicts": { 3 | "@ANY": { 4 | "name": "@ANY", 5 | "description": "任意字符串", 6 | "samples": "任意字符串", 7 | "createdate": "2020-03-27 14:32:20", 8 | "updatedate": "2020-03-27 14:32:20", 9 | "referred": false, 10 | "type": "any", 11 | "vendor": "Chatopera", 12 | "used": null 13 | }, 14 | "@PER": { 15 | "name": "@PER", 16 | "description": "人名", 17 | "samples": "郭德纲;于谦", 18 | "createdate": "2019-09-06 14:53:54", 19 | "updatedate": "2019-12-31 14:03:20", 20 | "referred": false, 21 | "type": "ml", 22 | "vendor": "Chatopera", 23 | "used": null 24 | }, 25 | "@TIME": { 26 | "name": "@TIME", 27 | "description": "时间", 28 | "samples": "今天;下午一时", 29 | "createdate": "2019-09-06 14:53:54", 30 | "updatedate": "2019-12-31 14:03:20", 31 | "referred": false, 32 | "type": "ml", 33 | "vendor": "Chatopera", 34 | "used": null 35 | }, 36 | "@LOC": { 37 | "name": "@LOC", 38 | "description": "地名", 39 | "samples": "北京市;东京", 40 | "createdate": "2019-09-06 14:53:54", 41 | "updatedate": "2019-12-31 14:03:20", 42 | "referred": false, 43 | "type": "ml", 44 | "vendor": "Chatopera", 45 | "used": null 46 | }, 47 | "@ORG": { 48 | "name": "@ORG", 49 | "description": "组织机构", 50 | "samples": "北京华夏春松科技有限公司", 51 | "createdate": "2019-09-06 14:53:54", 52 | "updatedate": "2019-12-31 14:03:20", 53 | "referred": false, 54 | "type": "ml", 55 | "vendor": "Chatopera", 56 | "used": null 57 | } 58 | }, 59 | "patterndicts": {}, 60 | "vocabdicts": {} 61 | } -------------------------------------------------------------------------------- /projects/冰箱报修服务机器人/bot.faqs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "docId": "AZBckfZoAA2hzfST-UT2", 4 | "categories": [], 5 | "enabled": true, 6 | "post": "冰箱冷藏不制冷,机械式,无假日功能", 7 | "replies": [ 8 | { 9 | "rtype": "plain", 10 | "content": "可以通过移动冷藏室温度设置滑块调节冷藏室温度。所设定的温度会在滑块左侧显示。冷藏室温度的调整范围为:2~8℃。" 11 | } 12 | ], 13 | "similarQuestions": [] 14 | }, 15 | { 16 | "docId": "AZBcetP9AA2hzfST-UTx", 17 | "categories": [], 18 | "enabled": true, 19 | "post": "空调不制冷问题的处理方法", 20 | "replies": [ 21 | { 22 | "rtype": "plain", 23 | "content": "首先找到空调遥控器,看一看空调运行模式是否在制冷模式上,客厅柜式(柱式)空调可以看一看控制面板显示的空调运行模式是否是制冷,如果空调运行模式不在制冷模式上,用空调遥控器把空调运行模式调整到制冷模式,稍等一会,空调能够正常出凉风就好了。" 24 | } 25 | ], 26 | "similarQuestions": [] 27 | }, 28 | { 29 | "docId": "AZBceZ8JAA2hzfST-UTw", 30 | "categories": [], 31 | "enabled": true, 32 | "post": "冰箱噪音问题的处理方法", 33 | "replies": [ 34 | { 35 | "rtype": "plain", 36 | "content": "冰箱噪音很多是机器共振导致,可将冰箱水平位置调好,然后将冰箱内部及周围松动的地方修整固定、杂物清理干净,防止共振。 将冰箱垫高3~6厘米,并调整四角平衡,使冰箱底部空气对流空间增大,压缩机噪音和下部其他噪音从箱体底部出来,就能减少从冰箱两侧及上部出来的噪音。" 37 | } 38 | ], 39 | "similarQuestions": [] 40 | }, 41 | { 42 | "docId": "AZBceTB9AA2hzfST-UTv", 43 | "categories": [], 44 | "enabled": true, 45 | "post": "空调噪音大问题的处理方法", 46 | "replies": [ 47 | { 48 | "rtype": "plain", 49 | "content": "针对这个问题,有以下几种解决方法: 更换隔音材料:可以在空调外机周围安装隔音材料,如泡沫板或隔音垫,以减少噪音。 您也可以安装隔音屏幕,这可以有效地减少噪音,您可以购买专业的隔音屏幕或者自己制作。 另外,拧紧外机支架螺丝也是处理空调外机噪音的有效方法之一。" 50 | } 51 | ], 52 | "similarQuestions": [] 53 | }, 54 | { 55 | "docId": "AZBceEl0AA2hzfST-UTu", 56 | "categories": [], 57 | "enabled": true, 58 | "post": "机器出现故障代码怎么办", 59 | "replies": [ 60 | { 61 | "rtype": "plain", 62 | "content": " 空调显示ec故障的解决办法:\n 1、控制器和主机通讯故障。\n  2、室内温度已经达到设定温度,空调就不会运行,只需要调节空调温度即可。\n  3、控制压缩机和散热扇的接触器损坏,需要报修。\n  4、制冷剂不足,添加即可。\n  5、电路板损坏,无输出信号,需要报修。\n  6、空调过热保护,停用一小时然后再启动试试。\n  7、散热扇本身及相关线路故障,需要报修。\n  8、请联系售后人员**检测。" 63 | } 64 | ], 65 | "similarQuestions": [] 66 | }, 67 | { 68 | "docId": "AZBcdOJSAA2hzfST-UTt", 69 | "categories": [], 70 | "enabled": true, 71 | "post": "冰箱不制冷问题的处理方法", 72 | "replies": [ 73 | { 74 | "rtype": "plain", 75 | "content": "routeDirectReply#[\"greetings\", \"冰箱不制冷\"]\n" 76 | } 77 | ], 78 | "similarQuestions": [] 79 | } 80 | ] -------------------------------------------------------------------------------- /projects/冰箱报修服务机器人/bot.intents.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /projects/冰箱报修服务机器人/conversations/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "冰箱报修服务机器人", 3 | "primaryLanguage": "zh_CN", 4 | "created": "2024-06-27T08:04:10.145Z", 5 | "modified": "2024-06-28T02:27:15.880Z", 6 | "description": "示例程序,https://github.com/chatopera/chatbot-samples,勿删!! ", 7 | "fallback": "我不明白您的意思。", 8 | "welcome": "你好!我是机器人客服。", 9 | "gambitLikeThreshold": 0.8, 10 | "gambitIntentQuestionMaxAttempts": 2, 11 | "historyCheckpoints": 100, 12 | "conversationTimeout": 1800, 13 | "faqBestReplyThreshold": 0.9, 14 | "faqSuggReplyThreshold": 0.5, 15 | "llmBaiduErnieBot": false, 16 | "trans_zhCN_ZhTw2ZhCn": false, 17 | "config": { 18 | "@SYS_INTENT_BRANCH": "dev" 19 | }, 20 | "version": "F2GwlIjMN", 21 | "conversations": [ 22 | { 23 | "name": "greetings", 24 | "enabled": true 25 | } 26 | ] 27 | } -------------------------------------------------------------------------------- /projects/冰箱报修服务机器人/conversations/plugin.js: -------------------------------------------------------------------------------- 1 | // 问候语中关联常见问题 2 | // 更多消息格式,参考 https://dwz.chatopera.com/jQ0F9G 3 | exports.getGreetings = async function() { 4 | let data = [{ 5 | "post": "冰箱不制冷问题的处理方法" 6 | }, 7 | { 8 | "post": "机器出现故障代码怎么办" 9 | }, { 10 | "post": "空调噪音大问题的处理方法" 11 | }, { 12 | "post": "冰箱噪音问题的处理方法" 13 | }, { 14 | "post": "空调不制冷问题的处理方法" 15 | } 16 | ] 17 | debug("getHotFAQs %j", data) 18 | 19 | if (data.length > 0) { 20 | let params = []; 21 | let postIndex = 0; 22 | for (let x of data) { 23 | // 跳过 FAQ 中约定的内部命令 24 | if (!x["post"].startsWith("__")) { 25 | params.push({ 26 | label: (++postIndex).toString() + ". " + x["post"], 27 | type: "qlist", 28 | text: x["post"] 29 | }); 30 | } 31 | } 32 | 33 | if (params.length > 0) { 34 | return { 35 | text: "猜你想问", 36 | params: params 37 | }; 38 | } else { 39 | return { 40 | string: "" 41 | }; 42 | } 43 | } else { 44 | return { 45 | string: "" 46 | }; 47 | } 48 | } 49 | 50 | exports.askMoreBingXiangBuZhiLeng = async function() { 51 | 52 | return { 53 | text: "请问您的冰箱哪个位置不制冷?", 54 | params: [{ 55 | label: "冰箱冷藏不制冷", 56 | type: "button", 57 | text: "冰箱冷藏不制冷" 58 | }, { 59 | label: "冰箱冷冻/整体不制冷", 60 | type: "button", 61 | text: "冰箱整体不制冷" 62 | }, ] 63 | } 64 | } 65 | 66 | 67 | exports.askMoreBingXiangLengCangBuZhiLeng = async function() { 68 | return { 69 | text: "若冰箱冷藏不制冷,请问您的产品是带显示屏的还是不带显示屏的?(是否有显示温度的电子屏幕)?", 70 | params: [{ 71 | label: "不带显示屏【机械式】", 72 | type: "button", 73 | text: "不带显示屏【机械式】" 74 | }, 75 | { 76 | label: "带显示屏【电脑式】", 77 | type: "button", 78 | text: "带显示屏【电脑式】" 79 | } 80 | ] 81 | } 82 | } 83 | 84 | exports.askMoreBingXiangLengCangBuZhiLengJiXieSHi = async function() { 85 | 86 | return { 87 | text: "请您看一下显示屏上是否有假日功能(屏幕上是否有小伞图标或文字“假日”或显示“-”)?", 88 | params: [{ 89 | label: "无假日功能", 90 | type: "button", 91 | text: "无假日功能" 92 | }, 93 | { 94 | label: "有假日功能", 95 | type: "button", 96 | text: "有假日功能" 97 | } 98 | ] 99 | } 100 | 101 | } 102 | 103 | exports.askMoreBingXiangLengCangBuZhiLengDianNaoSHi = async function() { 104 | return { 105 | text: "请您看一下显示屏上是否有假日功能(屏幕上是否有小伞图标或文字“假日”或显示“-”)?", 106 | params: [{ 107 | label: "无假日功能", 108 | type: "button", 109 | text: "无假日功能" 110 | }, 111 | { 112 | label: "有假日功能", 113 | type: "button", 114 | text: "有假日功能" 115 | } 116 | ] 117 | } 118 | } 119 | 120 | // 冰箱冷藏不制冷,机械式,无假日功能 121 | exports.askBingXiangBuZhiLengJiXieShiWujiari = async function() { 122 | let results = await this.maestro.searchFAQs("冰箱冷藏不制冷,机械式,无假日功能", 1); 123 | 124 | return { 125 | text: results[0]["replies"][0]["content"], 126 | params: [{ 127 | label: "继续提交工单", 128 | type: "button", 129 | text: "继续提交工单" 130 | }] 131 | } 132 | } 133 | 134 | 135 | // 冰箱冷藏不制冷,机械式,有假日功能 136 | exports.askBingXiangBuZhiLengJiXieShiYoujiari = async function() { 137 | let results = await this.maestro.searchFAQs("冰箱冷藏不制冷,机械式,无假日功能", 1); 138 | 139 | return { 140 | text: results[0]["replies"][0]["content"], 141 | params: [{ 142 | label: "继续提交工单", 143 | type: "button", 144 | text: "继续提交工单" 145 | }] 146 | } 147 | } 148 | 149 | // 冰箱冷藏不制冷,电脑式,无假日功能 150 | exports.askBingXiangBuZhiLengDianNaoShiWujiari = async function() { 151 | let results = await this.maestro.searchFAQs("冰箱冷藏不制冷,机械式,无假日功能", 1); 152 | 153 | return { 154 | text: results[0]["replies"][0]["content"], 155 | params: [{ 156 | label: "继续提交工单", 157 | type: "button", 158 | text: "继续提交工单" 159 | }] 160 | } 161 | } 162 | 163 | // 冰箱冷藏不制冷,电脑式,有假日功能 164 | exports.askBingXiangBuZhiLengDianNaoShiYoujiari = async function() { 165 | let results = await this.maestro.searchFAQs("冰箱冷藏不制冷,机械式,无假日功能", 1); 166 | 167 | return { 168 | text: results[0]["replies"][0]["content"], 169 | params: [{ 170 | label: "继续提交工单", 171 | type: "button", 172 | text: "继续提交工单" 173 | }] 174 | } 175 | } 176 | 177 | // 冰箱整体不制冷 178 | exports.askMoreBingXiangZhengtiBuZhiLeng = async function() { 179 | return { 180 | text: "{CLEAR} 图文消息", 181 | params: [{ 182 | type: 'card', 183 | title: "提交工单", 184 | thumbnail: "https://www.chatopera.com/files/botsamples/imgs/workorder_icon.png", 185 | summary: "冰箱售后报修", 186 | hyperlink: "https://chatopera.feishu.cn/share/base/form/shrcnqGXHjqdHYBTsikYBz6XI8f" 187 | }] 188 | } 189 | 190 | } 191 | -------------------------------------------------------------------------------- /projects/冰箱报修服务机器人/conversations/zh_CN.greetings.ms: -------------------------------------------------------------------------------- 1 | /** 2 | * 现在就构建强大的智能对话机器人 3 | * 快速开始: https://dwz.chatopera.com/2o6idK 4 | * 使用指南: https://dwz.chatopera.com/S1aqzb 5 | * 参考手册: https://dwz.chatopera.com/1882VM 6 | */ 7 | 8 | + 你好 9 | - {@_greetings_} 10 | 11 | + _greetings_ 12 | - {keep} 你好! 13 | 14 | // FAQ 热门问题展示 15 | + __faq_hot_list 16 | - {keep} ^getGreetings() 17 | 18 | 19 | /** 20 | * 冰箱不制冷处理 21 | */ 22 | + ${0.9}{继续提交工单} 23 | - {keep} ^askMoreBingXiangZhengtiBuZhiLeng() 24 | 25 | 26 | + ${0.9}{冰箱不制冷} 27 | - {keep} ^askMoreBingXiangBuZhiLeng() 28 | 29 | + ${0.9}{冰箱整体不制冷} 30 | - {keep} ^askMoreBingXiangZhengtiBuZhiLeng() 31 | 32 | + ${0.9}{冰箱冷藏不制冷} 33 | - {keep} ^askMoreBingXiangLengCangBuZhiLeng() 34 | 35 | + ${0.9}{不带显示屏【机械式】} 36 | % ^askMoreBingXiangLengCangBuZhiLeng() 37 | - {keep} ^askMoreBingXiangLengCangBuZhiLengJiXieSHi() 38 | 39 | + ${0.9}{带显示屏【电脑式】} 40 | % ^askMoreBingXiangLengCangBuZhiLeng() 41 | - {keep} ^askMoreBingXiangLengCangBuZhiLengDianNaoSHi() 42 | 43 | + ${0.9}{无假日功能} 44 | % ^askMoreBingXiangLengCangBuZhiLengJiXieSHi() 45 | - {keep} {CLEAR} ^askBingXiangBuZhiLengJiXieShiWujiari() 46 | 47 | + ${0.9}{有假日功能} 48 | % ^askMoreBingXiangLengCangBuZhiLengJiXieSHi() 49 | - {keep} {CLEAR} ^askBingXiangBuZhiLengJiXieShiYoujiari() 50 | 51 | + ${0.9}{无假日功能} 52 | % ^askMoreBingXiangLengCangBuZhiLengDianNaoSHi() 53 | - {keep} {CLEAR} ^askBingXiangBuZhiLengDianNaoShiWujiari() 54 | 55 | + ${0.9}{有假日功能} 56 | % ^askMoreBingXiangLengCangBuZhiLengDianNaoSHi() 57 | - {keep} {CLEAR} ^askBingXiangBuZhiLengDianNaoShiYoujiari() 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /projects/招聘面试机器人/.env: -------------------------------------------------------------------------------- 1 | # Chatopera BOT Platform 2 | BOT_PROVIDER=https://bot.chatopera.com 3 | BOT_CLIENT_ID=667d12489a1184001335d991 4 | BOT_CLIENT_SECRET=686d46d3b6a9516dd64b1e69ef0eaeb5 5 | BOT_THRESHOLD_FAQ_BEST_REPLY=0.9 6 | BOT_THRESHOLD_FAQ_SUGG_REPLY=0 7 | BOT_ACCESS_TOKEN= -------------------------------------------------------------------------------- /projects/招聘面试机器人/README.md: -------------------------------------------------------------------------------- 1 | # 招聘面试机器人 2 | 3 | > 查看创作本机器人的背后的故事,[Chatopera:HR 机器人让每次面试都值得记忆](https://www.sohu.com/a/281335891_100268913) 4 | 5 | ## 体验本示例程序 6 | 7 | 打开链接或二维码。 8 | 9 | 链接:[https://h5.chatopera.com/im/text/0I1ItM.html](https://h5.chatopera.com/im/text/0I1ItM.html) 10 | 11 | ![Alt text](assets/screenshot_20240627151920.png) 12 | 13 | ## 功能介绍 14 | 15 | 在 Chatopera,我们实现了一个 HR 招聘助手机器人,我希望她能有效的考核我们的候选人,然后进行终面。 16 | 17 | 18 | 19 | 回想过去的面试经历,高效的面试是在较短时间内完成多轮面试,快速给出评估,但是成本也很大,一般的企业是承担不起的,那么我们用机器人问答的方式去做,会是一个很好地选择。 20 | 21 | 比如,我们把面试分成不同阶段:【1】基本信息;【2】技能评测;【3】工作偏好;【4】心理测试。这几项都是有固定的话术和流程,用 Chatopera 的产品实现起来很适合。 22 | 23 | 24 | 25 | 技能评测是一个重要环节,我们有不同的岗位,应聘者可以选择他(她)想入职的岗位,做对应的测试题,这些题目是我们为每个岗位量身定做的。 26 | 27 | 28 | 29 | 比如,这两个岗位的题,还挺难的,有相关技能的朋友可以来看看自己能做对多少。 30 | 31 | 在工作偏好中,我们问了一些常见问题,在心理测试中,我们出了很多选择题。 32 | 33 | 34 | 35 | 完成整个过程,大概需要 10 分钟到 30 分钟,超出 30 分钟,就会认为该候选人不合格。 36 | 37 | 38 | 39 | 作为招聘者,我需要得到这个面试的报告,当面试结束,HR 面试小助手会通过大数据分析整理数据,秒出结果,发送到企业 HR 的邮箱。 40 | 41 | 42 | 43 | 这样看起来还不错,接下来我就要决定是否和这位心仪的候选人见面!更重要的是这份儿格式化结构化的报告可以填充到企业的大数据人才仓库中,这个价值是显而易见的。 44 | 45 | ## 导入机器人语料到 Chatopera 云服务 46 | 47 | 将本示例程序导入到您的机器人,见[参考文档](https://github.com/chatopera/chatbot-samples?tab=readme-ov-file#%E4%BD%BF%E7%94%A8-cli-%E5%AF%BC%E5%85%A5%E7%A4%BA%E4%BE%8B%E7%A8%8B%E5%BA%8F)。 48 | 49 | ## 调试对话 50 | 51 | 使用多轮对话设计器调试,见[参考文档](https://docs.chatopera.com/products/chatbot-platform/tutorials/3-add-scripts-function.html)。 52 | 53 | -------------------------------------------------------------------------------- /projects/招聘面试机器人/assets/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/projects/招聘面试机器人/assets/1.png -------------------------------------------------------------------------------- /projects/招聘面试机器人/assets/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/projects/招聘面试机器人/assets/2.png -------------------------------------------------------------------------------- /projects/招聘面试机器人/assets/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/projects/招聘面试机器人/assets/3.png -------------------------------------------------------------------------------- /projects/招聘面试机器人/assets/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/projects/招聘面试机器人/assets/4.png -------------------------------------------------------------------------------- /projects/招聘面试机器人/assets/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/projects/招聘面试机器人/assets/5.png -------------------------------------------------------------------------------- /projects/招聘面试机器人/assets/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/projects/招聘面试机器人/assets/6.png -------------------------------------------------------------------------------- /projects/招聘面试机器人/assets/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/projects/招聘面试机器人/assets/7.png -------------------------------------------------------------------------------- /projects/招聘面试机器人/assets/screenshot_20240627151920.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/projects/招聘面试机器人/assets/screenshot_20240627151920.png -------------------------------------------------------------------------------- /projects/招聘面试机器人/bot.conversations.c66: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/projects/招聘面试机器人/bot.conversations.c66 -------------------------------------------------------------------------------- /projects/招聘面试机器人/bot.faqs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "docId": "AXRiIKd86FFxSwKKb3Jx", 4 | "categories": [], 5 | "enabled": true, 6 | "post": "【工作岗位】开始面试", 7 | "replies": [ 8 | { 9 | "rtype": "plain", 10 | "content": "routeDirectReply#[\"basic\",\"__kickoff_basic_main_1\"]" 11 | } 12 | ], 13 | "similarQuestions": [] 14 | }, 15 | { 16 | "docId": "AXRiIHPP6FFxSwKKb3Jw", 17 | "categories": [], 18 | "enabled": true, 19 | "post": "Chatopera的公司文化", 20 | "replies": [ 21 | { 22 | "rtype": "plain", 23 | "content": "做用户喜爱的产品。" 24 | } 25 | ], 26 | "similarQuestions": [] 27 | }, 28 | { 29 | "docId": "AXRiIEu86FFxSwKKb3Jv", 30 | "categories": [], 31 | "enabled": true, 32 | "post": "__faq_hot_list", 33 | "replies": [ 34 | { 35 | "rtype": "plain", 36 | "content": "routeDirectReply#[\"greetings\",\"__faq_hot_list\"]" 37 | } 38 | ], 39 | "similarQuestions": [] 40 | }, 41 | { 42 | "docId": "AXRiICfl6FFxSwKKb3Ju", 43 | "categories": [], 44 | "enabled": true, 45 | "post": "Chatopera的福利待遇", 46 | "replies": [ 47 | { 48 | "rtype": "plain", 49 | "content": "五险一金" 50 | } 51 | ], 52 | "similarQuestions": [] 53 | }, 54 | { 55 | "docId": "AXRiH_0_6FFxSwKKb3Jt", 56 | "categories": [], 57 | "enabled": true, 58 | "post": "【工作岗位】面试自然语言处理工程师", 59 | "replies": [ 60 | { 61 | "rtype": "plain", 62 | "content": "routeDirectReply#[\"greetings\",\"__prepare_nlp_job_interview\"]" 63 | } 64 | ], 65 | "similarQuestions": [] 66 | }, 67 | { 68 | "docId": "AXRiH9Kp6FFxSwKKb3Js", 69 | "categories": [], 70 | "enabled": true, 71 | "post": "【工作岗位】介绍自然语言处理工程师", 72 | "replies": [ 73 | { 74 | "rtype": "plain", 75 | "content": "routeDirectReply#[\"greetings\",\"__faq_describe_nlp\"]" 76 | } 77 | ], 78 | "similarQuestions": [] 79 | }, 80 | { 81 | "docId": "AXRiH6et6FFxSwKKb3Jr", 82 | "categories": [], 83 | "enabled": true, 84 | "post": "【工作岗位】介绍Node.js工程师", 85 | "replies": [ 86 | { 87 | "rtype": "plain", 88 | "content": "routeDirectReply#[\"greetings\",\"__faq_describe_nodejs\"]" 89 | } 90 | ], 91 | "similarQuestions": [] 92 | }, 93 | { 94 | "docId": "AXRiH1sX6FFxSwKKb3Jq", 95 | "categories": [], 96 | "enabled": true, 97 | "post": "【工作岗位】面试Node.js工程师", 98 | "replies": [ 99 | { 100 | "rtype": "plain", 101 | "content": "routeDirectReply#[\"greetings\",\"__prepare_nodejs_job_interview\"]" 102 | } 103 | ], 104 | "similarQuestions": [] 105 | }, 106 | { 107 | "docId": "AXRiHy1r6FFxSwKKb3Jp", 108 | "categories": [], 109 | "enabled": true, 110 | "post": "Chatopera的工作机会", 111 | "replies": [ 112 | { 113 | "rtype": "plain", 114 | "content": "routeDirectReply#[\"greetings\",\"__faq_job_opennings\"]" 115 | } 116 | ], 117 | "similarQuestions": [ 118 | "我想应聘", 119 | "有哪些工作" 120 | ] 121 | } 122 | ] -------------------------------------------------------------------------------- /projects/招聘面试机器人/conversations/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "入门教程测试", 3 | "primaryLanguage": "zh_CN", 4 | "description": "示例程序,https://github.com/chatopera/chatbot-samples,勿删!! ", 5 | "fallback": "我不明白您的意思。", 6 | "welcome": "你好!我是机器人客服。", 7 | "trans_zhCN_ZhTw2ZhCn": false, 8 | "gambitLikeThreshold": 0.8, 9 | "gambitIntentQuestionMaxAttempts": 2, 10 | "historyCheckpoints": 100, 11 | "conversationTimeout": 1800, 12 | "config": { 13 | "MAIL_SERVICE": "QQex", 14 | "MAIL_ACCOUNT": "webot@chatopera.com", 15 | "MAIL_PASSWORD": "YOUR_PASSWORD", 16 | "MAIL_RECEP": "info@chatopera.com", 17 | "@SYS_INTENT_BRANCH": "dev" 18 | }, 19 | "version": "1.0.0", 20 | "conversations": [ 21 | { 22 | "name": "background", 23 | "enabled": true 24 | }, 25 | { 26 | "name": "basic", 27 | "enabled": true 28 | }, 29 | { 30 | "name": "close", 31 | "enabled": true 32 | }, 33 | { 34 | "name": "greetings", 35 | "enabled": true 36 | }, 37 | { 38 | "name": "mental", 39 | "enabled": true 40 | }, 41 | { 42 | "name": "nlp", 43 | "enabled": true 44 | }, 45 | { 46 | "name": "nodejs", 47 | "enabled": true 48 | } 49 | ] 50 | } -------------------------------------------------------------------------------- /projects/招聘面试机器人/conversations/zh_CN.background.ms: -------------------------------------------------------------------------------- 1 | + __kickoff_bg_hobbies 2 | - {keep} {@__bg_main_1} 3 | 4 | + (*) 5 | % {@__bg_main_1} 6 | - {keep} {@__bg_main_2} ^saveResumeInformation('__bg_main_1') 7 | 8 | + (*) 9 | % {@__bg_main_2} ^saveResumeInformation('__bg_main_1') 10 | - {keep} {@__bg_main_3} ^saveResumeInformation('__bg_main_2') 11 | 12 | + (*) 13 | % {@__bg_main_3} ^saveResumeInformation('__bg_main_2') 14 | - {keep} {@__bg_main_4} ^saveResumeInformation('__bg_main_3') 15 | 16 | + (*) 17 | % {@__bg_main_4} ^saveResumeInformation('__bg_main_3') 18 | - {keep} {@__bg_main_5} ^saveResumeInformation('__bg_main_4') 19 | 20 | + (*) 21 | % {@__bg_main_5} ^saveResumeInformation('__bg_main_4') 22 | - {keep} {@__bg_main_6} ^saveResumeInformation('__bg_main_5') 23 | 24 | + (*) 25 | % {@__bg_main_6} ^saveResumeInformation('__bg_main_5') 26 | - {keep} {@__bg_main_7} ^saveResumeInformation('__bg_main_6') 27 | 28 | + (*) 29 | % {@__bg_main_7} ^saveResumeInformation('__bg_main_6') 30 | - {keep} {@__bg_main_8} ^saveResumeInformation('__bg_main_7') 31 | 32 | + (*) 33 | % {@__bg_main_8} ^saveResumeInformation('__bg_main_7') 34 | - {keep} {@__bg_main_9} ^saveResumeInformation('__bg_main_8') 35 | 36 | + (*) 37 | % {@__bg_main_9} ^saveResumeInformation('__bg_main_8') 38 | - {keep} ^saveResumeInformation('__bg_main_9') ^parseNextSection() 39 | 40 | /** 41 | * 固定话术 42 | */ 43 | + __bg_main_1 44 | - {keep} 接下来,我们开始【工作偏好】环节。【1/9】你有什么业余爱好? 45 | 46 | + __bg_main_2 47 | - {keep} 【2/9】谈谈你的优缺点 48 | - 【2/9】你有哪些优点和缺点 49 | 50 | + __bg_main_3 51 | - {keep} 【3/9】介绍你一次最失败的一次经历 52 | - 【3/9】你觉得自己最失败的经历是什么 53 | 54 | + __bg_main_4 55 | - {keep} 【4/9】为什么应聘我们公司? 56 | - 【4/9】为什么希望加入我们公司? 57 | 58 | + __bg_main_5 59 | - {keep} 【5/9】这份工作你有想过会面对哪些困难吗? 60 | - 【5/9】你觉得这份工作会有哪些挑战? 61 | 62 | + __bg_main_6 63 | - {keep} 【6/9】如果你发现上司做错了,你将怎么办? 64 | - 【6/9】如果你发现上司做错了,你会怎么办? 65 | 66 | + __bg_main_7 67 | - {keep} 【7/9】公司为什么要聘用你? 68 | 69 | + __bg_main_8 70 | - {keep} 【8/9】你希望什么样的上司? 71 | 72 | + __bg_main_9 73 | - {keep} 【9/9】上一家公司的离职原因? 74 | -------------------------------------------------------------------------------- /projects/招聘面试机器人/conversations/zh_CN.basic.ms: -------------------------------------------------------------------------------- 1 | // 个人基本信息 2 | 3 | // 开始面试,第一个话题 4 | + __kickoff_basic_main_1 5 | - {keep} {@__basic_main_1} ^startBasicSection() 6 | 7 | + (*) 8 | % {@__basic_main_1} ^startBasicSection() 9 | - {keep} {@__basic_main_2} ^saveResumeInformation('__basic_main_1') 10 | 11 | + (*) 12 | % {@__basic_main_2} ^saveResumeInformation('__basic_main_1') 13 | - {keep} {@__basic_main_3} ^saveResumeInformation('__basic_main_2') 14 | 15 | + (*) 16 | % {@__basic_main_3} ^saveResumeInformation('__basic_main_2') 17 | - {keep} {@__basic_main_4} ^saveResumeInformation('__basic_main_3') 18 | 19 | + (*) 20 | % {@__basic_main_4} ^saveResumeInformation('__basic_main_3') 21 | - {keep} {@__basic_main_5} ^saveResumeInformation('__basic_main_4') 22 | 23 | + (*) 24 | % {@__basic_main_5} ^saveResumeInformation('__basic_main_4') 25 | - {keep} {@__basic_main_6} ^saveResumeInformation('__basic_main_5') 26 | 27 | // 谈下一个话题 28 | + (*) 29 | % {@__basic_main_6} ^saveResumeInformation('__basic_main_5') 30 | - {keep} ^saveResumeInformation('__basic_main_6') ^parseNextSection() 31 | 32 | // 固定话术 33 | + __basic_main_1 34 | - {keep} 下面是【基本信息】里的几个问题。【1/6】您的中文名是什么? 35 | - 在【基本信息】环节有下面几个问题。【1/6】请告诉我您的中文名? 36 | - 我们开始进行【基本信息】环节。【1/6】麻烦你输入一下中文名? 37 | 38 | + __basic_main_2 39 | - {keep} 【2/6】您的家乡在哪里? 40 | - 【2/6】请告诉我您的籍贯? 41 | 42 | + __basic_main_3 43 | - {keep} 【3/6】您工作几年了? 44 | - 【3/6】您工作多少年了? 45 | 46 | + __basic_main_4 47 | - {keep} 【4/6】您的最高学历是什么? 48 | - 【4/6】请问您的最高学历呢? 49 | - 【4/6】最高学历是什么? 50 | 51 | + __basic_main_5 52 | - {keep} 【5/6】您毕业于哪所大学? 53 | 54 | + __basic_main_6 55 | - {keep} 【6/6】您在学校里攻读了什么专业呢? 56 | - 【6/6】专业呢? 57 | -------------------------------------------------------------------------------- /projects/招聘面试机器人/conversations/zh_CN.close.ms: -------------------------------------------------------------------------------- 1 | + __kickoff_close_interview 2 | - {keep} {@__close_interview} 3 | 4 | + (*) 5 | % {@__close_interview} 6 | - {keep} ^sendInterviewReport() {@__say_goodbye} 7 | 8 | // 固定话术 9 | + __close_interview 10 | - {keep} 本次面试完成了,您的手机号是什么,以便进一步联系您。 11 | - 面试完成,请发送您的手机号码,以便进后续联系。 12 | - 面试完成,请给我您的手机号码,方便我们后续和您联系。 13 | 14 | + __say_goodbye 15 | - {CLEAR} 感谢您参与本次面试,我们会根据您的能力和该职位进行详细的研究,祝您生活愉快,再会! 16 | - {CLEAR} 感谢能和您进行这样的对话,我们将根据您的才华与该职位的匹配程度进行考虑,祝您生活愉快,再会! 17 | - {CLEAR} 本次面试结束,我们将根据您的才华与该职位的匹配程度进行考虑,祝您生活愉快,再会! -------------------------------------------------------------------------------- /projects/招聘面试机器人/conversations/zh_CN.greetings.ms: -------------------------------------------------------------------------------- 1 | + 你好 2 | - {keep} ^get_greetings() 3 | 4 | // FAQ Hotlist 5 | + __faq_hot_list 6 | - {keep} ^get_greetings() 7 | 8 | // 获取工作机会列表 9 | + __faq_job_opennings 10 | - {keep} ^get_job_opennings() 11 | 12 | + __faq_describe_nlp 13 | - {keep} ^describe_nlp_job() 14 | 15 | + __faq_describe_nodejs 16 | - {keep} ^describe_nodejs_job() 17 | 18 | + __prepare_nlp_job_interview 19 | - {keep} ^prepare_interview('自然语言处理') 20 | 21 | + __prepare_nodejs_job_interview 22 | - {keep} ^prepare_interview('NodeJS') 23 | 24 | // 开始面试 25 | + __start_job_interview 26 | - {keep} ^startBasicSection() -------------------------------------------------------------------------------- /projects/招聘面试机器人/conversations/zh_CN.mental.ms: -------------------------------------------------------------------------------- 1 | + __kickoff_mental 2 | - {keep} {@__mental_main_1} 3 | 4 | // 处理选项和答案 5 | + (*) 6 | % {@__mental_main_1} 7 | - {keep} {@__mental_main_2} ^calculateMentalScore(1) 8 | 9 | + (*) 10 | % {@__mental_main_2} ^calculateMentalScore(1) 11 | - {keep} {@__mental_main_3} ^calculateMentalScore(2) 12 | 13 | + (*) 14 | % {@__mental_main_3} ^calculateMentalScore(2) 15 | - {keep} {@__mental_main_4} ^calculateMentalScore(3) 16 | 17 | + (*) 18 | % {@__mental_main_4} ^calculateMentalScore(3) 19 | - {keep} {@__mental_main_5} ^calculateMentalScore(4) 20 | 21 | + (*) 22 | % {@__mental_main_5} ^calculateMentalScore(4) 23 | - {keep} {@__mental_main_6} ^calculateMentalScore(5) 24 | 25 | + (*) 26 | % {@__mental_main_6} ^calculateMentalScore(5) 27 | - {keep} {@__mental_main_7} ^calculateMentalScore(6) 28 | 29 | + (*) 30 | % {@__mental_main_7} ^calculateMentalScore(6) 31 | - {keep} {@__mental_main_8} ^calculateMentalScore(7) 32 | 33 | + (*) 34 | % {@__mental_main_8} ^calculateMentalScore(7) 35 | - {keep} {@__mental_main_9} ^calculateMentalScore(8) 36 | 37 | + (*) 38 | % {@__mental_main_9} ^calculateMentalScore(8) 39 | - {keep} {@__mental_main_10} ^calculateMentalScore(9) 40 | 41 | + (*) 42 | % {@__mental_main_10} ^calculateMentalScore(9) 43 | - {keep} {@__mental_main_11} ^calculateMentalScore(10) 44 | 45 | + (*) 46 | % {@__mental_main_11} ^calculateMentalScore(10) 47 | - {keep} {@__mental_main_12} ^calculateMentalScore(11) 48 | 49 | + (*) 50 | % {@__mental_main_12} ^calculateMentalScore(11) 51 | - {keep} {@__mental_main_13} ^calculateMentalScore(12) 52 | 53 | + (*) 54 | % {@__mental_main_13} ^calculateMentalScore(12) 55 | - {keep} {@__mental_main_14} ^calculateMentalScore(13) 56 | 57 | + (*) 58 | % {@__mental_main_14} ^calculateMentalScore(13) 59 | - {keep} {@__mental_main_15} ^calculateMentalScore(14) 60 | 61 | + (*) 62 | % {@__mental_main_15} ^calculateMentalScore(14) 63 | - {keep} ^calculateMentalScore(15) ^parseNextSection() 64 | 65 | // 固定话术 66 | + __mental_main_1 67 | - {keep} 好的,接下来是【心理评测】,包含15个问题,请认真回复。\n【1/15】你更喜欢吃哪种水果? ^getMentalAnswerOptions(1) 68 | 69 | + __mental_main_2 70 | - {keep} 【2/15】你平时休闲经常去的地方? ^getMentalAnswerOptions(2) 71 | 72 | + __mental_main_3 73 | - {keep} 【3/15】你认为容易吸引你的人是? ^getMentalAnswerOptions(3) 74 | 75 | + __mental_main_4 76 | - {keep} 【4/15】如果你可以成为一种动物,你希望自己是哪种? ^getMentalAnswerOptions(4) 77 | 78 | + __mental_main_5 79 | - {keep} 【5/15】天气很热,你更愿意选择什么方式解暑? ^getMentalAnswerOptions(5) 80 | 81 | + __mental_main_6 82 | - {keep} 【6/15】如果必须与一个你讨厌的动物或昆虫在一起生活,你能容忍哪一个? ^getMentalAnswerOptions(6) 83 | 84 | + __mental_main_7 85 | - {keep} 【7/15】你喜欢看哪类电影、电视剧? ^getMentalAnswerOptions(7) 86 | 87 | + __mental_main_8 88 | - {keep} 【8/15】以下哪个是你身边必带的物品? ^getMentalAnswerOptions(8) 89 | 90 | + __mental_main_9 91 | - {keep} 【9/15】你出行时喜欢坐什么交通工具? ^getMentalAnswerOptions(9) 92 | 93 | + __mental_main_10 94 | - {keep} 【10/15】以下颜色你更喜欢哪种? ^getMentalAnswerOptions(10) 95 | 96 | + __mental_main_11 97 | - {keep} 【11/15】下列运动中挑选一个你最喜欢的?【提示:不一定擅长】 ^getMentalAnswerOptions(11) 98 | 99 | + __mental_main_12 100 | - {keep} 【12/15】如果你拥有一座别墅,你认为它应当建立在哪里? ^getMentalAnswerOptions(12) 101 | 102 | + __mental_main_13 103 | - {keep} 【13/15】你更喜欢以下哪种天气现象? ^getMentalAnswerOptions(13) 104 | 105 | + __mental_main_14 106 | - {keep} 【14/15】你希望自己的窗口在一座30层大楼的第几层? ^getMentalAnswerOptions(14) 107 | 108 | + __mental_main_15 109 | - {keep} 【15/15】你认为自己更喜欢在以下哪一个城市中生活? ^getMentalAnswerOptions(15) -------------------------------------------------------------------------------- /projects/招聘面试机器人/conversations/zh_CN.nlp.ms: -------------------------------------------------------------------------------- 1 | // 自然语言处理 2 | 3 | + __kickoff_nlp_main_1 4 | - {keep} {@__nlp_main_1} ^getNlpAnswerOptions(1) 5 | 6 | + (*) 7 | % {@__nlp_main_1} ^getNlpAnswerOptions(1) 8 | - {keep} {@__nlp_main_2} ^getNlpAnswerOptions(2) ^calculateNlpScore(1) 9 | 10 | + (*) 11 | % {@__nlp_main_2} ^getNlpAnswerOptions(2) ^calculateNlpScore(1) 12 | - {keep} {@__nlp_main_3} ^getNlpAnswerOptions(3) ^calculateNlpScore(2) 13 | 14 | + (*) 15 | % {@__nlp_main_3} ^getNlpAnswerOptions(3) ^calculateNlpScore(2) 16 | - {keep} {@__nlp_main_4} ^getNlpAnswerOptions(4) ^calculateNlpScore(3) 17 | 18 | 19 | + (*) 20 | % {@__nlp_main_4} ^getNlpAnswerOptions(4) ^calculateNlpScore(3) 21 | - {keep} {@__nlp_main_5} ^getNlpAnswerOptions(5) ^calculateNlpScore(4) 22 | 23 | + (*) 24 | % {@__nlp_main_5} ^getNlpAnswerOptions(5) ^calculateNlpScore(4) 25 | - {keep} {@__nlp_main_6} ^getNlpAnswerOptions(6) ^calculateNlpScore(5) 26 | 27 | + (*) 28 | % {@__nlp_main_6} ^getNlpAnswerOptions(6) ^calculateNlpScore(5) 29 | - {keep} {@__nlp_main_7} ^getNlpAnswerOptions(7) ^calculateNlpScore(6) 30 | 31 | + (*) 32 | % {@__nlp_main_7} ^getNlpAnswerOptions(7) ^calculateNlpScore(6) 33 | - {keep} {@__nlp_main_8} ^getNlpAnswerOptions(8) ^calculateNlpScore(7) 34 | 35 | + (*) 36 | % {@__nlp_main_8} ^getNlpAnswerOptions(8) ^calculateNlpScore(7) 37 | - {keep} ^calculateNlpScore(8) ^parseNextSection() 38 | 39 | // 固定话术 40 | + __nlp_main_1 41 | - {keep} 接下来是【技能检验】,请仔细阅读题目,凭借自己的经验回答,禁止作弊。【1/8】以下哪种不是设计模式? 42 | 43 | + __nlp_main_2 44 | - {keep} 【2/8】二叉树(一般情况)的查找时间复杂度 45 | 46 | + __nlp_main_3 47 | - {keep} 【3/8】请经典K-Means算法的初始化参数是否包括聚簇大小? 48 | 49 | + __nlp_main_4 50 | - {keep} 【4/8】隐性马尔可夫模型不能用于解决下面哪个任务? 51 | 52 | + __nlp_main_5 53 | - {keep} 【5/8】中文词性标注中,以w开头的标记代表哪类词汇? 54 | 55 | + __nlp_main_6 56 | - {keep} 【6/8】以下哪个分词器使用了MMSEG算法? 57 | 58 | + __nlp_main_7 59 | - {keep} 【7/8】以下哪一个不是词向量训练工具? 60 | 61 | + __nlp_main_8 62 | - {keep} 【8/8】以下哪个标准是语言模型最常使用的格式? -------------------------------------------------------------------------------- /projects/招聘面试机器人/conversations/zh_CN.nodejs.ms: -------------------------------------------------------------------------------- 1 | // Node.js 2 | 3 | + __kickoff_nodejs_main_1 4 | - {keep} {@__nodejs_main_1} ^getNodejsAnswerOptions(1) 5 | 6 | + (*) 7 | % {@__nodejs_main_1} ^getNodejsAnswerOptions(1) 8 | - {keep} {@__nodejs_main_2} ^getNodejsAnswerOptions(2) ^calculateNodejsScore(1) 9 | 10 | + (*) 11 | % {@__nodejs_main_2} ^getNodejsAnswerOptions(2) ^calculateNodejsScore(1) 12 | - {keep} {@__nodejs_main_3} ^getNodejsAnswerOptions(3) ^calculateNodejsScore(2) 13 | 14 | 15 | + (*) 16 | % {@__nodejs_main_3} ^getNodejsAnswerOptions(3) ^calculateNodejsScore(2) 17 | - {keep} {@__nodejs_main_4} ^getNodejsAnswerOptions(4) ^calculateNodejsScore(3) 18 | 19 | + (*) 20 | % {@__nodejs_main_4} ^getNodejsAnswerOptions(4) ^calculateNodejsScore(3) 21 | - {keep} {@__nodejs_main_5} ^getNodejsAnswerOptions(5) ^calculateNodejsScore(4) 22 | 23 | + (*) 24 | % {@__nodejs_main_5} ^getNodejsAnswerOptions(5) ^calculateNodejsScore(4) 25 | - {keep} {@__nodejs_main_6} ^getNodejsAnswerOptions(6) ^calculateNodejsScore(5) 26 | 27 | + (*) 28 | % {@__nodejs_main_6} ^getNodejsAnswerOptions(6) ^calculateNodejsScore(5) 29 | - {keep} {@__nodejs_main_7} ^getNodejsAnswerOptions(7) ^calculateNodejsScore(6) 30 | 31 | + (*) 32 | % {@__nodejs_main_7} ^getNodejsAnswerOptions(7) ^calculateNodejsScore(6) 33 | - {keep} {@__nodejs_main_8} ^getNodejsAnswerOptions(8) ^calculateNodejsScore(7) 34 | 35 | + (*) 36 | % {@__nodejs_main_8} ^getNodejsAnswerOptions(8) ^calculateNodejsScore(7) 37 | - {keep} ^calculateNodejsScore(8) ^parseNextSection() 38 | 39 | // 固定话术 40 | + __nodejs_main_1 41 | - {keep} 接下来是【技能检验】,请仔细阅读题目,凭借自己的经验回答,禁止作弊。【1/8】以下哪种不是设计模式? 42 | 43 | + __nodejs_main_2 44 | - {keep} 【2/8】二叉树(一般情况)的查找时间复杂度 45 | 46 | + __nodejs_main_3 47 | - {keep} 【3/8】JavaScript代码(!!undefined)的值为 48 | 49 | + __nodejs_main_4 50 | - {keep} 【4/8】JavaScript代码(["1", "2", "3"].map(parseInt))的值为 51 | 52 | + __nodejs_main_5 53 | - {keep} 【5/8】JavaScript代码([typeof null, null instanceof Object])的值为 54 | 55 | + __nodejs_main_6 56 | - {keep} 【6/8】JavaScript代码(3..toString())的值为 57 | 58 | + __nodejs_main_7 59 | - {keep} 【7/8】下面哪一项不是Node.js的HTTP服务器框架 60 | 61 | + __nodejs_main_8 62 | - {keep} 【8/8】Node.js的创始人是谁 -------------------------------------------------------------------------------- /projects/讲笑话机器人/.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | *.swp 3 | *.swo 4 | *.sublime-* 5 | *.pyc 6 | jmeter.log 7 | __pycache__ 8 | tmp/ 9 | package-lock.json 10 | node_modules/ 11 | sftp-config.json 12 | .DS_Store 13 | *.iml 14 | *.ipr 15 | *.iws 16 | *.idea 17 | ~$*.xls* 18 | ~$*.ppt* 19 | ~$*.doc* 20 | nohup.out 21 | 22 | CMakeLists.txt.user 23 | CMakeCache.txt 24 | CMakeFiles 25 | CMakeScripts 26 | Testing 27 | Makefile 28 | build 29 | build-* 30 | cmake_install.cmake 31 | install_manifest.txt 32 | compile_commands.json 33 | CTestTestfile.cmake 34 | _deps 35 | .env 36 | -------------------------------------------------------------------------------- /projects/讲笑话机器人/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2020 Chatopera Inc. 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | -------------------------------------------------------------------------------- /projects/讲笑话机器人/README.md: -------------------------------------------------------------------------------- 1 | # 讲笑话机器人 2 | 3 | 4 | 能讲小笑话的机器人,向机器人发送:“笑话”。 5 | 6 | ## 体验本示例程序 7 | 8 | 打开链接或二维码。 9 | 10 | 链接:[https://h5.chatopera.com/im/text/0p5R0J.html](https://h5.chatopera.com/im/text/0p5R0J.html) 11 | 12 | ![Alt text](assets/screenshot_20240627141615.png) 13 | 14 | ## 导入机器人语料到 Chatopera 云服务 15 | 16 | 将本示例程序导入到您的机器人,见[参考文档](https://github.com/chatopera/chatbot-samples?tab=readme-ov-file#%E4%BD%BF%E7%94%A8-cli-%E5%AF%BC%E5%85%A5%E7%A4%BA%E4%BE%8B%E7%A8%8B%E5%BA%8F)。 17 | 18 | ## 调试对话 19 | 20 | 使用多轮对话设计器调试,见[参考文档](https://docs.chatopera.com/products/chatbot-platform/tutorials/3-add-scripts-function.html)。 21 | 22 | 23 | -------------------------------------------------------------------------------- /projects/讲笑话机器人/assets/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/projects/讲笑话机器人/assets/1.png -------------------------------------------------------------------------------- /projects/讲笑话机器人/assets/screenshot_20240627141615.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/projects/讲笑话机器人/assets/screenshot_20240627141615.png -------------------------------------------------------------------------------- /projects/讲笑话机器人/bot.conversations.c66: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/projects/讲笑话机器人/bot.conversations.c66 -------------------------------------------------------------------------------- /projects/讲笑话机器人/bot.dicts.json: -------------------------------------------------------------------------------- 1 | { 2 | "sysdicts": { 3 | "@ANY": { 4 | "name": "@ANY", 5 | "description": "任意字符串", 6 | "samples": "任意字符串", 7 | "createdate": "2020-03-27 14:32:20", 8 | "updatedate": "2020-03-27 14:32:20", 9 | "referred": false, 10 | "type": "any", 11 | "vendor": "Chatopera", 12 | "used": null 13 | }, 14 | "@PER": { 15 | "name": "@PER", 16 | "description": "人名", 17 | "samples": "郭德纲;于谦", 18 | "createdate": "2019-09-06 14:53:54", 19 | "updatedate": "2019-12-31 14:03:20", 20 | "referred": false, 21 | "type": "ml", 22 | "vendor": "Chatopera", 23 | "used": null 24 | }, 25 | "@TIME": { 26 | "name": "@TIME", 27 | "description": "时间", 28 | "samples": "今天;下午一时", 29 | "createdate": "2019-09-06 14:53:54", 30 | "updatedate": "2019-12-31 14:03:20", 31 | "referred": false, 32 | "type": "ml", 33 | "vendor": "Chatopera", 34 | "used": null 35 | }, 36 | "@LOC": { 37 | "name": "@LOC", 38 | "description": "地名", 39 | "samples": "北京市;东京", 40 | "createdate": "2019-09-06 14:53:54", 41 | "updatedate": "2019-12-31 14:03:20", 42 | "referred": false, 43 | "type": "ml", 44 | "vendor": "Chatopera", 45 | "used": null 46 | }, 47 | "@ORG": { 48 | "name": "@ORG", 49 | "description": "组织机构", 50 | "samples": "北京华夏春松科技有限公司", 51 | "createdate": "2019-09-06 14:53:54", 52 | "updatedate": "2019-12-31 14:03:20", 53 | "referred": false, 54 | "type": "ml", 55 | "vendor": "Chatopera", 56 | "used": null 57 | } 58 | }, 59 | "patterndicts": {}, 60 | "vocabdicts": {} 61 | } -------------------------------------------------------------------------------- /projects/讲笑话机器人/bot.faqs.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /projects/讲笑话机器人/bot.intents.json: -------------------------------------------------------------------------------- 1 | [] -------------------------------------------------------------------------------- /projects/讲笑话机器人/conversations/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "讲笑话机器人", 3 | "primaryLanguage": "zh_CN", 4 | "created": "2024-06-27T06:15:00.924Z", 5 | "modified": "2024-06-27T06:27:40.204Z", 6 | "description": "示例程序,https://github.com/chatopera/chatbot-samples,勿删!! ", 7 | "fallback": "我不明白您的意思。", 8 | "welcome": "你好!我是机器人客服。", 9 | "gambitLikeThreshold": 0.8, 10 | "gambitIntentQuestionMaxAttempts": 2, 11 | "historyCheckpoints": 100, 12 | "conversationTimeout": 1800, 13 | "faqBestReplyThreshold": 0.8, 14 | "faqSuggReplyThreshold": 0.5, 15 | "llmBaiduErnieBot": false, 16 | "trans_zhCN_ZhTw2ZhCn": false, 17 | "config": { 18 | "JOKES_DATA_URL": "https://www.chatopera.com/files/botsamples/jokes.json", 19 | "@SYS_INTENT_BRANCH": "dev" 20 | }, 21 | "version": "2_aoc3fqY", 22 | "conversations": [ 23 | { 24 | "name": "give_me_joke", 25 | "enabled": true 26 | }, 27 | { 28 | "name": "greetings", 29 | "enabled": true 30 | } 31 | ] 32 | } -------------------------------------------------------------------------------- /projects/讲笑话机器人/conversations/plugin.js: -------------------------------------------------------------------------------- 1 | const K_JOKES_TOLD = "jokes:told:"; 2 | const K_JOKES_EXPIRED = 3600 * 24; // 24 小时过期 3 | // https://gitee.com/chatopera/chatbot-samples/raw/master/projects/%E5%B0%8F%E7%AC%91%E8%AF%9D/assets/jokes.json 4 | const JOKES_DATA_URL = config["JOKES_DATA_URL"]; 5 | 6 | const fetchJokes = async function() { 7 | debug("fetchJokes: fetch from remote url %s ...", JOKES_DATA_URL); 8 | let resp = await http.get(JOKES_DATA_URL); 9 | // debug("fetchJokes: ", resp.data) 10 | return resp.data; 11 | }; 12 | 13 | exports.nextJoke = async function() { 14 | let uid = this.user.id; 15 | let K_UID_TOLD = K_JOKES_TOLD + uid; 16 | let told = await this.maestro.get(K_UID_TOLD); 17 | if (!told) told = ""; 18 | 19 | let toldLen = told.split(",").length; 20 | debug("[nextJoke] hit next joke %d ...", toldLen) 21 | 22 | // 今天就讲 10 个 23 | if (toldLen >= 10) { 24 | return "{@__reply_no_more_joke_now}"; 25 | } 26 | 27 | // 获取新的 28 | let jokes = await fetchJokes(); 29 | 30 | for (let x of jokes) { 31 | if (told.includes(x.id)) { 32 | continue; 33 | } 34 | told += `,${x.id}`; 35 | this.maestro.set(K_UID_TOLD, told, K_JOKES_EXPIRED); 36 | return { 37 | text: x.content, 38 | params: [{ 39 | label: "下一个", 40 | type: "button", 41 | text: "笑话", 42 | }, ], 43 | }; 44 | } 45 | 46 | return "{@__reply_no_more_joke_now}"; 47 | }; 48 | -------------------------------------------------------------------------------- /projects/讲笑话机器人/conversations/zh_CN.give_me_joke.ms: -------------------------------------------------------------------------------- 1 | + {keep} (*) 笑话 (*) 2 | - {CLEAR} ^nextJoke() 3 | 4 | + {keep} (不好笑|不逗) (*) 5 | - {@__reply_not_funny} 6 | 7 | 8 | /** 9 | * Group replies 10 | */ 11 | + {keep} __reply_not_funny 12 | - 笑点高,不容易笑 13 | - 小笑话不容易做包袱 14 | 15 | + {keep} __reply_no_more_joke_now 16 | - 编不出来了,等我想想明天再给你讲 17 | - 我先去吃饭了,明天再聊 18 | -------------------------------------------------------------------------------- /projects/讲笑话机器人/conversations/zh_CN.greetings.ms: -------------------------------------------------------------------------------- 1 | + 你好 2 | - {keep} 想听笑话吗?发送“笑话” 3 | - 你好,发送“笑话”,逗您一乐 4 | 5 | + __faq_hot_list 6 | - {keep} 想听笑话吗?发送“笑话” 7 | - 你好,发送“笑话”,逗您一乐 8 | -------------------------------------------------------------------------------- /projects/预定机票机器人/.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | *.swp 3 | *.swo 4 | *.sublime-* 5 | *.pyc 6 | jmeter.log 7 | __pycache__ 8 | tmp/ 9 | package-lock.json 10 | node_modules/ 11 | sftp-config.json 12 | .DS_Store 13 | *.iml 14 | *.ipr 15 | *.iws 16 | *.idea 17 | ~$*.xls* 18 | ~$*.ppt* 19 | ~$*.doc* 20 | nohup.out 21 | 22 | CMakeLists.txt.user 23 | CMakeCache.txt 24 | CMakeFiles 25 | CMakeScripts 26 | Testing 27 | Makefile 28 | build 29 | build-* 30 | cmake_install.cmake 31 | install_manifest.txt 32 | compile_commands.json 33 | CTestTestfile.cmake 34 | _deps 35 | .env 36 | -------------------------------------------------------------------------------- /projects/预定机票机器人/README.md: -------------------------------------------------------------------------------- 1 | # 预定机票机器人 2 | 3 | 4 | ## 体验本示例程序 5 | 6 | 打开链接或二维码。 7 | 8 | 链接:[https://h5.chatopera.com/im/text/1RAoY4.html](https://h5.chatopera.com/im/text/1RAoY4.html) 9 | 10 | ![Alt text](assets/screenshot_20240627140852.png) 11 | 12 | ## 导入机器人语料到 Chatopera 云服务 13 | 14 | 将本示例程序导入到您的机器人,见[参考文档](https://github.com/chatopera/chatbot-samples?tab=readme-ov-file#%E4%BD%BF%E7%94%A8-cli-%E5%AF%BC%E5%85%A5%E7%A4%BA%E4%BE%8B%E7%A8%8B%E5%BA%8F)。 15 | 16 | ## 调试对话 17 | 18 | 使用多轮对话设计器调试,见[参考文档](https://docs.chatopera.com/products/chatbot-platform/tutorials/3-add-scripts-function.html)。 -------------------------------------------------------------------------------- /projects/预定机票机器人/assets/screenshot_20240627140852.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/projects/预定机票机器人/assets/screenshot_20240627140852.png -------------------------------------------------------------------------------- /projects/预定机票机器人/bot.conversations.c66: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chatopera/chatbot-samples/ed9b10fbf84a5f70061d92336b5f7788fd362e3c/projects/预定机票机器人/bot.conversations.c66 -------------------------------------------------------------------------------- /projects/预定机票机器人/bot.dicts.json: -------------------------------------------------------------------------------- 1 | { 2 | "sysdicts": { 3 | "@ANY": { 4 | "name": "@ANY", 5 | "description": "任意字符串", 6 | "samples": "任意字符串", 7 | "createdate": "2020-03-27 22:32:20", 8 | "updatedate": "2020-03-27 22:32:20", 9 | "referred": true, 10 | "type": "any", 11 | "vendor": "Chatopera", 12 | "used": false 13 | }, 14 | "@PER": { 15 | "name": "@PER", 16 | "description": "人名", 17 | "samples": "郭德纲;于谦", 18 | "createdate": "2019-09-06 22:53:54", 19 | "updatedate": "2019-12-31 22:03:20", 20 | "referred": true, 21 | "type": "ml", 22 | "vendor": "Chatopera", 23 | "used": false 24 | }, 25 | "@TIME": { 26 | "name": "@TIME", 27 | "description": "时间", 28 | "samples": "今天;下午一时", 29 | "createdate": "2019-09-06 22:53:54", 30 | "updatedate": "2019-12-31 22:03:20", 31 | "referred": true, 32 | "type": "ml", 33 | "vendor": "Chatopera", 34 | "used": true 35 | }, 36 | "@LOC": { 37 | "name": "@LOC", 38 | "description": "地名", 39 | "samples": "北京市;东京", 40 | "createdate": "2019-09-06 22:53:54", 41 | "updatedate": "2019-12-31 22:03:20", 42 | "referred": true, 43 | "type": "ml", 44 | "vendor": "Chatopera", 45 | "used": true 46 | }, 47 | "@ORG": { 48 | "name": "@ORG", 49 | "description": "组织机构", 50 | "samples": "北京华夏春松科技有限公司", 51 | "createdate": "2019-09-06 22:53:54", 52 | "updatedate": "2019-12-31 22:03:20", 53 | "referred": true, 54 | "type": "ml", 55 | "vendor": "Chatopera", 56 | "used": false 57 | } 58 | }, 59 | "patterndicts": {}, 60 | "vocabdicts": { 61 | "verbs": [ 62 | { 63 | "word": "预约", 64 | "synonyms": "预定;订;预订", 65 | "createdate": "2021-09-05 12:55:13", 66 | "updatedate": "2021-09-07 20:04:55" 67 | } 68 | ] 69 | } 70 | } -------------------------------------------------------------------------------- /projects/预定机票机器人/bot.faqs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "docId": "AXvE2y1ndb9K4wW-82vK", 4 | "categories": [], 5 | "enabled": true, 6 | "post": "海口有几个机场", 7 | "replies": [ 8 | { 9 | "rtype": "plain", 10 | "content": "海口有海口美兰国际机场,位于海口市美兰区,航线飞往国内大中城市,也有飞往国际的专机。从海口去美兰国际机场,除了地铁快速到达外,有绕城高速直达,还有琼文高速和223国道,交通非常便利。海南有三个民用机场:海口美兰国际机场、三亚凤凰国际机场和琼海博鳌机场。\n\n" 11 | } 12 | ], 13 | "similarQuestions": [] 14 | } 15 | ] -------------------------------------------------------------------------------- /projects/预定机票机器人/bot.intents.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "book_airplane_ticket", 4 | "description": "预约飞机票", 5 | "createdate": "2021-09-05 12:49:32", 6 | "updatedate": "2021-09-05 12:49:41", 7 | "utters": [ 8 | { 9 | "utterance": "预约机票", 10 | "createdate": "2021-09-05 12:54:15", 11 | "updatedate": "2021-09-05 12:54:15" 12 | }, 13 | { 14 | "utterance": "预定飞机票", 15 | "createdate": "2021-09-05 12:54:15", 16 | "updatedate": "2021-09-05 12:54:15" 17 | }, 18 | { 19 | "utterance": "我想预约机票", 20 | "createdate": "2021-09-05 12:54:15", 21 | "updatedate": "2021-09-05 12:54:15" 22 | }, 23 | { 24 | "utterance": "我想预定机票", 25 | "createdate": "2021-09-05 12:54:15", 26 | "updatedate": "2021-09-05 12:54:15" 27 | }, 28 | { 29 | "utterance": "我要预约从{fromPlace}出发的机票", 30 | "createdate": "2021-09-05 12:54:15", 31 | "updatedate": "2021-09-05 12:54:15" 32 | }, 33 | { 34 | "utterance": "预约飞机票", 35 | "createdate": "2021-09-05 12:54:15", 36 | "updatedate": "2021-09-05 12:54:15" 37 | }, 38 | { 39 | "utterance": "预定机票", 40 | "createdate": "2021-09-05 12:54:15", 41 | "updatedate": "2021-09-05 12:54:15" 42 | }, 43 | { 44 | "utterance": "帮我预约{date}的机票", 45 | "createdate": "2021-09-05 12:54:15", 46 | "updatedate": "2021-09-05 12:54:15" 47 | }, 48 | { 49 | "utterance": "我想预约{date}的机票", 50 | "createdate": "2021-09-05 12:54:15", 51 | "updatedate": "2021-09-05 12:54:15" 52 | }, 53 | { 54 | "utterance": "我想订机票", 55 | "createdate": "2021-09-07 20:04:26", 56 | "updatedate": "2021-09-07 20:04:26" 57 | } 58 | ], 59 | "slots": [ 60 | { 61 | "name": "fromPlace", 62 | "requires": true, 63 | "createdate": "2021-09-05 12:54:15", 64 | "updatedate": "2021-09-05 12:54:15", 65 | "question": "您从哪个城市或机场出发?", 66 | "dict": { 67 | "name": "@LOC", 68 | "builtin": true, 69 | "description": "地名", 70 | "samples": "北京市;东京", 71 | "createdate": "2019-09-06 22:53:54", 72 | "updatedate": "2019-12-31 22:03:20", 73 | "type": null, 74 | "vendor": null, 75 | "used": null 76 | } 77 | }, 78 | { 79 | "name": "date", 80 | "requires": true, 81 | "createdate": "2021-09-05 12:54:15", 82 | "updatedate": "2021-09-07 19:15:57", 83 | "question": "您的计划出发日期是什么时候?", 84 | "dict": { 85 | "name": "@TIME", 86 | "builtin": true, 87 | "description": "时间", 88 | "samples": "今天;下午一时", 89 | "createdate": "2019-09-06 22:53:54", 90 | "updatedate": "2019-12-31 22:03:20", 91 | "type": null, 92 | "vendor": null, 93 | "used": null 94 | } 95 | }, 96 | { 97 | "name": "destPlace", 98 | "requires": true, 99 | "createdate": "2021-09-05 12:54:15", 100 | "updatedate": "2021-09-05 12:54:15", 101 | "question": "您要去的目的城市或机场是哪里?", 102 | "dict": { 103 | "name": "@LOC", 104 | "builtin": true, 105 | "description": "地名", 106 | "samples": "北京市;东京", 107 | "createdate": "2019-09-06 22:53:54", 108 | "updatedate": "2019-12-31 22:03:20", 109 | "type": null, 110 | "vendor": null, 111 | "used": null 112 | } 113 | } 114 | ] 115 | }, 116 | { 117 | "name": "ask_weather", 118 | "description": "查天气", 119 | "createdate": "2021-09-08 10:05:23", 120 | "updatedate": "2021-09-08 10:08:00", 121 | "utters": [ 122 | { 123 | "utterance": "{date}天气怎么样", 124 | "createdate": "2021-09-08 10:10:06", 125 | "updatedate": "2021-09-08 10:10:06" 126 | }, 127 | { 128 | "utterance": "查天气", 129 | "createdate": "2021-09-08 10:10:06", 130 | "updatedate": "2021-09-08 10:10:06" 131 | }, 132 | { 133 | "utterance": "{loc}{date}天气怎么样", 134 | "createdate": "2021-09-08 10:10:06", 135 | "updatedate": "2021-09-08 10:10:06" 136 | }, 137 | { 138 | "utterance": "我想查询天气", 139 | "createdate": "2021-09-08 10:10:06", 140 | "updatedate": "2021-09-08 10:10:06" 141 | }, 142 | { 143 | "utterance": "{date}{loc}天气怎么样", 144 | "createdate": "2021-09-08 10:10:06", 145 | "updatedate": "2021-09-08 10:10:06" 146 | }, 147 | { 148 | "utterance": "查询天气", 149 | "createdate": "2021-09-08 10:10:06", 150 | "updatedate": "2021-09-08 10:10:06" 151 | }, 152 | { 153 | "utterance": "{loc}的天气怎么样", 154 | "createdate": "2021-09-08 10:12:17", 155 | "updatedate": "2021-09-09 10:59:51" 156 | }, 157 | { 158 | "utterance": "我想查询{date}{loc}的天气", 159 | "createdate": "2021-09-08 10:12:17", 160 | "updatedate": "2021-09-08 10:12:17" 161 | }, 162 | { 163 | "utterance": "{loc}的天气情况", 164 | "createdate": "2021-09-08 10:12:17", 165 | "updatedate": "2021-09-08 10:12:17" 166 | }, 167 | { 168 | "utterance": "我想查询{loc}{date}的天气", 169 | "createdate": "2021-09-08 10:12:17", 170 | "updatedate": "2021-09-08 10:12:17" 171 | }, 172 | { 173 | "utterance": "我想查询{loc}的天气", 174 | "createdate": "2021-09-08 10:12:17", 175 | "updatedate": "2021-09-08 10:12:17" 176 | }, 177 | { 178 | "utterance": "{loc}的天气", 179 | "createdate": "2021-09-08 10:12:17", 180 | "updatedate": "2021-09-08 10:12:17" 181 | }, 182 | { 183 | "utterance": "{loc}{date}天气怎么演", 184 | "createdate": "2021-09-09 10:59:51", 185 | "updatedate": "2021-09-09 11:00:47" 186 | }, 187 | { 188 | "utterance": "{date}{loc}的天气", 189 | "createdate": "2021-09-09 10:59:51", 190 | "updatedate": "2021-09-09 10:59:51" 191 | }, 192 | { 193 | "utterance": "{loc}{date}天气", 194 | "createdate": "2021-09-09 10:59:51", 195 | "updatedate": "2021-09-09 10:59:51" 196 | } 197 | ], 198 | "slots": [ 199 | { 200 | "name": "loc", 201 | "requires": true, 202 | "createdate": "2021-09-08 10:10:06", 203 | "updatedate": "2021-09-08 10:10:06", 204 | "question": "您要问哪里的天气信息?", 205 | "dict": { 206 | "name": "@LOC", 207 | "builtin": true, 208 | "description": "地名", 209 | "samples": "北京市;东京", 210 | "createdate": "2019-09-06 22:53:54", 211 | "updatedate": "2019-12-31 22:03:20", 212 | "type": null, 213 | "vendor": null, 214 | "used": null 215 | } 216 | }, 217 | { 218 | "name": "date", 219 | "requires": false, 220 | "createdate": "2021-09-08 10:10:06", 221 | "updatedate": "2021-09-08 10:10:06", 222 | "question": "", 223 | "dict": { 224 | "name": "@TIME", 225 | "builtin": true, 226 | "description": "时间", 227 | "samples": "今天;下午一时", 228 | "createdate": "2019-09-06 22:53:54", 229 | "updatedate": "2019-12-31 22:03:20", 230 | "type": null, 231 | "vendor": null, 232 | "used": null 233 | } 234 | } 235 | ] 236 | } 237 | ] -------------------------------------------------------------------------------- /projects/预定机票机器人/conversations/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "预定机票机器人", 3 | "primaryLanguage": "zh_CN", 4 | "created": "2021-09-05T04:09:16.225Z", 5 | "modified": "2021-09-10T12:31:31.972Z", 6 | "description": "示例程序,https://github.com/chatopera/chatbot-samples,勿删!! ", 7 | "fallback": "我不明白您的意思,输入“帮助”,“help”得到帮助信息。", 8 | "welcome": "你好!我是春松机器人。【春松机器人的对话技能为示例对话,演示程序,仅为说明机器人可以实现的功能】", 9 | "config": { 10 | "@SYS_INTENT_BRANCH": "dev", 11 | "HEWEATHER_URL": "https://free-api.heweather.com/v5", 12 | "HEWEATHER_KEY": "182f1b6826d94c6285a489d2414f3ad0" 13 | }, 14 | "version": "HfKN5vf0B", 15 | "conversations": [ 16 | { 17 | "name": "__pre__", 18 | "enabled": true 19 | }, 20 | { 21 | "name": "greetings", 22 | "enabled": true 23 | }, 24 | { 25 | "name": "intents", 26 | "enabled": true 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /projects/预定机票机器人/conversations/plugin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 第三方服务类 3 | */ 4 | 5 | var WForewast = function(apiKey) { 6 | if (!apiKey) throw new Error('Invalid token, get it from http://www.heweather.com/my/service'); 7 | this.key = apiKey; 8 | } 9 | 10 | 11 | WForewast.prototype.getWeatherByCity = function(city) { 12 | return new Promise((resolve, reject) => { 13 | if (!city) 14 | return reject("城市名不能为空"); 15 | let url = config["HEWEATHER_URL"] + "/weather?city=" + encodeURIComponent(city) + "&key=" + this.key 16 | http 17 | .get(url) 18 | .then((res) => { 19 | if (res.data.HeWeather5[0] && res.data.HeWeather5[0].suggestion) { 20 | resolve(res.data.HeWeather5[0].suggestion); 21 | } else { 22 | reject("天气建议未返回约定结果!"); 23 | } 24 | 25 | }) 26 | .catch(function(err) { 27 | if (err) return reject(err); 28 | }); 29 | }) 30 | } 31 | 32 | const wf = new WForewast(config["HEWEATHER_KEY"]); 33 | 34 | 35 | /** 36 | * 提取时间实体 37 | */ 38 | async function extractTimeEntity(maestro, entities, property) { 39 | debug("extractTimeEntity name %s, value %s", property, entities[property]["val"]) 40 | let dates = await maestro.extractTime(entities[property]["val"], "YYYY年MM月DD日 HH:mm"); 41 | return dates.length > 0 ? dates[0] : ""; 42 | } 43 | 44 | // 问候语中关联常见问题 45 | exports.get_greetings = async function() { 46 | return { 47 | text: "机器人可以解答或提供的服务", 48 | params: [{ 49 | label: "1. 海口有几个机场", 50 | type: "qlist", 51 | text: "海口有几个机场" 52 | }, 53 | { 54 | label: "2. 我想查询天气", 55 | type: "qlist", 56 | text: "我想查询天气" 57 | }, 58 | { 59 | label: "3. 我想预定机票", 60 | type: "qlist", 61 | text: "我想预定机票" 62 | } 63 | ] 64 | }; 65 | } 66 | 67 | /** 68 | * 意图相关函数 69 | */ 70 | 71 | 72 | exports.handleAirplaneTicketOrder = async function() { 73 | 74 | debug("[handleAirplaneTicketOrder] this.intent", JSON.stringify(this.intent)) 75 | 76 | let entities = _.keyBy(this.intent.entities, 'name'); 77 | let date = await extractTimeEntity(this.maestro, entities, "date"); 78 | 79 | this.intent.extras = { 80 | date: date 81 | } 82 | 83 | return { 84 | text: `和您确认一下信息,出发地${entities["fromPlace"]["val"]},目的地${entities["destPlace"]["val"]},出发时间${this.intent.extras.date}`, 85 | params: [{ 86 | label: "没错,出票吧", 87 | type: "button", 88 | text: "没错,出票吧" 89 | }, 90 | { 91 | label: "信息有误,重新预约", 92 | type: "button", 93 | text: "我想预约机票" 94 | }, 95 | { 96 | label: "不预约了", 97 | type: "button", 98 | text: "不预约了" 99 | }, 100 | ] 101 | } 102 | } 103 | 104 | 105 | exports.placeAirplaneTicketOrder = async function() { 106 | this.intent.drop = true; 107 | 108 | let entities = _.keyBy(this.intent.entities, 'name'); 109 | 110 | return { 111 | text: "{CLEAR} 已帮您购买", 112 | params: [{ 113 | type: 'card', 114 | title: "查看详情", 115 | thumbnail: "https://img2.baidu.com/it/u=1105387277,858129327&fm=15&fmt=auto&gp=0.jpg", 116 | summary: `${this.intent.extras.date},国泰航空 CA001,国泰机场, ${entities["fromPlace"]["val"]} - ${entities["destPlace"]["val"]} `, 117 | hyperlink: "https://www.chatopera.com/" 118 | }] 119 | } 120 | } 121 | 122 | // 不预约了 123 | exports.cancelAirplanTicketReservation = async function() { 124 | // 声明丢弃当前进行的意图识别对话,默认不丢弃 125 | this.intent.drop = true; 126 | return { 127 | text: "{CLEAR} 好的,下次再帮您预约" 128 | } 129 | } 130 | 131 | // 重新预约机票 132 | exports.rebookAirplaneTicket = async function() { 133 | debug("rebookAirplaneTicket this.intent", this.intent); 134 | return "^topicRedirect(\"intents\", \"book_airplane_ticket\", true)" 135 | } 136 | 137 | exports.handleSuccAskWeather = async function() { 138 | debug("handleSuccAskWeather this.intent", this.intent); 139 | let entities = _.keyBy(this.intent.entities, 'name'); 140 | let loc = entities["loc"]["val"]; 141 | try { 142 | let result = await wf.getWeatherByCity(loc); 143 | debug("LOC %s result %j", loc, result); 144 | return loc + "天气:" + result["comf"]["txt"] + "(数据来源:和风天气)"; 145 | } catch (e) { 146 | debug(e) 147 | return `很抱歉,没有获得${loc}的天气信息。` 148 | } 149 | 150 | } 151 | 152 | exports.handleLoseAskWeather = async function() { 153 | debug("handleLoseAskWeather this.intent", this.intent); 154 | return "未得到您的查询信息,您可以说:我想查询北京的天气。"; 155 | } 156 | -------------------------------------------------------------------------------- /projects/预定机票机器人/conversations/zh_CN.__pre__.ms: -------------------------------------------------------------------------------- 1 | 2 | + ${0.7}{转人工|人工|有人吗} 3 | - 当前只有机器人客服在线,如需垂询 Chatopera 合作洽谈, 4 | ^ 通过网页获得联系方式 https://www.chatopera.com/mail.html 5 | 6 | -------------------------------------------------------------------------------- /projects/预定机票机器人/conversations/zh_CN.greetings.ms: -------------------------------------------------------------------------------- 1 | /** 2 | * 获得示例程序,快入开始! 3 | * https://github.com/chatopera/chatbot-samples 4 | */ 5 | 6 | + 你好 7 | - {@_greetings_} 8 | 9 | + _greetings_ 10 | - {keep} 你好! 11 | - 欢迎惠顾! 12 | 13 | // FAQ Hotlist 14 | + __faq_hot_list 15 | - ^get_greetings() 16 | 17 | + [帮助|help|\\h] 18 | - ^get_greetings() 19 | -------------------------------------------------------------------------------- /projects/预定机票机器人/conversations/zh_CN.intents.ms: -------------------------------------------------------------------------------- 1 | /** 2 | * 意图识别对话 3 | */ 4 | 5 | // 预定机票 6 | intent book_airplane_ticket 7 | - ^handleAirplaneTicketOrder() 8 | 9 | + ${0.6}{没错,出票吧|出票} 10 | % ^handleAirplaneTicketOrder() 11 | - ^placeAirplaneTicketOrder() 12 | 13 | + ${0.6}{不预约了} 14 | % ^handleAirplaneTicketOrder() 15 | - ^cancelAirplanTicketReservation() 16 | 17 | + ${0.6}{信息有误,重新预约} 18 | % ^handleAirplaneTicketOrder() 19 | - ^rebookAirplaneTicket() 20 | 21 | // 查询天气 22 | intent ask_weather 23 | - ^handleSuccAskWeather() 24 | - {x} ^handleLoseAskWeather() 25 | -------------------------------------------------------------------------------- /projects/预定机票机器人/sample.env: -------------------------------------------------------------------------------- 1 | # Chatopera Help Doc 2 | # https://docs.chatopera.com/products/chatbot-platform/integration/cli.html 3 | # bot --help 4 | # 5 | 6 | BOT_PROVIDER=https://bot.chatopera.com 7 | BOT_CLIENT_ID= 8 | BOT_CLIENT_SECRET= 9 | BOT_ACCESS_TOKEN= 10 | --------------------------------------------------------------------------------