Giter VIP home page Giter VIP logo

mochat's Introduction

logo

MoChat —— 让企业微信开发更简单

Php Version Swoole Version MoChat License

输入图片说明

中文 | Java

文档 | 安装 | 截图 | 架构 | 数据库字典 | API文档 | 快速开始

项目简介

MoChat, easy way to WeWork

MoChat 是开源的企业微信应用开发框架&引擎,是一套通用的企业微信多租户SaaS管理系统,得益于 SwooleHyperf 框架的优秀,MoChat 可提供超高性能的同时,也保持着极其灵活的可扩展性。

应用场景

可用于电商、金融、零售、餐饮服装等服务行业的企业微信用户,通过简单的分流、引流转化微信客户为企业客户,结合强大的后台支持,灵活的运营模式,建立企业与客户的强联系,让企业的盈利模式有了多种不同的选择。

功能特性

六大模块助力企业营销能力升级:

  • 引流获取:通过多渠道活码获取客户,条理有序分类
  • 客户转化:素材库、欢迎语互动客户,加强与客户联系
  • 客户管理:精准定位客户,一对一标签编辑,自定义跟踪轨迹,流失客户提醒与反馈
  • 客户群管理:于客户的基础,进一步获取客户裂变,自动拉群。集中管理,快速群发
  • 聊天侧边栏:提高企业员工沟通效率,精准服务
  • 企业风控:客户聊天记录存档,并设立敏感词库、敏感词报警,多方位跟进管理员工服务

业务架构

严格的分层来保证架构的灵活性

架构

核心技术

  • 前端技术栈: VueVuexVantAnt Design of Vue
  • 后端技术栈: PHPMySQLRedisSwooleHyperf

特此鸣谢

MoChat 的诞生离不开社区其他优秀的开源项目,在此特别鸣谢:

Swoole Hyperf EasyWechat Vue Vant Ant

环境部署

准备工作

PHP >= 7.4 (推荐7.4版本)
Swoole >= 4.5
Wxwork_finance_sdk(so扩展)
pcntl扩展
Composer
MySQL >= 5.7
Redis
FFmpeg
Node.js >= 10

运行系统

后端运行
# 目录
git clone https://github.com/mochat-cloud/mochat.git

cd /path/to/mochat/api-server

# 安装依赖
composer install

# 运行PHP服务
php bin/hyperf.php start
前端运行
# 进入项目目录
cd /path/to/mochat/dashboard

# 安装依赖
yarn install

# 编译生成dist
yarn run build
必要配置

1、后端配置运行脚本

  • php bin/hyperf.php mc:init,根据提示完成配置

2、前端配置

  • 修改 .env 中的配置 VUE_APP_API_BASE_URL= 接口地址

部署系统

后端部署
  • Docker:推荐根据api-server/Dockerfile使用K8S部署
  • Shell: 使用linux-install.sh安装必要依赖
cd /usr/local/src && wget https://mochatcloud.oss-cn-beijing.aliyuncs.com/deploy/CentOS-install.sh && ./CentOS-install.sh
  • Nginx 配置:具体参考开发文档
前端部署

当项目开发完毕,只需要运行一行命令就可以打包你的应用

# dashboard 打包正式环境
yarn run build

# sidebar 打包正式环境
yarn run build

构建打包成功之后,会在根目录生成 dist 文件夹,里面就是构建打包好的文件,通常是 .js.cssindex.html 等静态文件。

通常情况下 dist 文件夹的静态文件发布到你的 nginx 或者静态服务器即可,其中的 index.html 是后台服务的入口页面。

更详细安装见: 传送门

项目介绍

文件结构

.
├── api-server------------------------------------------ 后端接口代码
├── dashboard------------------------------------------- 商户后台前端代码
├── sidebar--------------------------------------------- 聊天侧边栏前端代码
└── workbench------------------------------------------- 工作台前端代码
└── operation------------------------------------------- 运营工具前端代码
后端结构
.
├── app
│   ├── core-------------------------------------------- 核心应用目录
│   │   ├── chat-tool----------------------------------- 聊天侧边栏
│   │   ├── common-------------------------------------- 公共
│   │   ├── corp---------------------------------------- 企业
│   │   ├── index--------------------------------------- 首页
│   │   ├── install------------------------------------- 安装
│   │   ├── medium-------------------------------------- 媒体库
│   │   ├── official-account---------------------------- 公众号
│   │   ├── rbac---------------------------------------- RBAC权限
│   │   ├── tenant-------------------------------------- 租户
│   │   ├── user---------------------------------------- 用户
│   │   ├── work-agent---------------------------------- 企微应用
│   │   ├── work-contact-------------------------------- 客户
│   │   ├── work-department----------------------------- 部门
│   │   ├── work-employee------------------------------- 员工
│   │   └── work-room----------------------------------- 客户群
│   └── utils------------------------------------------- 工具类
├── plugin
│   └── mochat------------------------------------------ 官方插件目录
│       ├── channel-code-------------------------------- 渠道活码插件
│       ├── contact-message-batch-send------------------ 批量发送客户消息插件
│       ├── contact-transfer---------------------------- 在职转接&离职继承插件
│       ├── greeting------------------------------------ 个人欢迎语插件
│       ├── radar--------------------------------------- 雷达插件
│       ├── room-auto-pull------------------------------ 自动拉群插件
│       ├── room-fission-------------------------------- 群裂变插件
│       ├── room-message-batch-send--------------------- 批量发送群消息插件
│       ├── room-tag-pull------------------------------- 标签拉群
│       ├── room-welcome-------------------------------- 群欢迎语插件
├── public
├── bin
├── composer.json
├── composer.lock
├── config
├── docker-compose.sample.yml
├── docker-entrypoint.sh
├── Dockerfile
├── migrations
├── package.json
├── phpstan.neon
├── phpunit.xml
├── README.MD
├── runtime
├── seeders
├── storage
├── test
└── vendor
前端结构
dashboard 和 sidebar 项目结构类似
.
├── README.md------------------------------------------- 项目说明
├── babel.config.js------------------------------------- babel配置文件
├── config
│   ├── plugin.config.js-------------------------------- 插件配置文件
│   └── themePluginConfig.js---------------------------- 主题配置文件
├── jest.config.js
├── jsconfig.json
├── package.json
├── postcss.config.js
├── public
│   ├── favicon.ico------------------------------------- 浏览器icon
│   └── index.html-------------------------------------- Vue 入口模板
├── src
│   ├── App.vue----------------------------------------- Vue 模板入口
│   ├── api--------------------------------------------- Api ajax 等
│   ├── assets------------------------------------------ 本地静态资源
│   ├── components-------------------------------------- 业务通用组件
│   ├── core-------------------------------------------- 项目引导, 全局配置初始化,依赖包引入等
│   ├── global.less------------------------------------- 全局样式
│   ├── layouts----------------------------------------- 控制器
│   ├── main.js----------------------------------------- Vue 入口 JS
│   ├── router------------------------------------------ Vue-Router
│   ├── store------------------------------------------- Vuex
│   ├── utils------------------------------------------- 工具库
│   └── views------------------------------------------- 业务页面入口和常用模板
├── vue.config.js--------------------------------------- Vue主配置
└── webstorm.config.js---------------------------------- ide配置文件

联系作者加入群

输入图片说明

部分演示图,持续更新

输入图片说明 输入图片说明 输入图片说明 输入图片说明 输入图片说明 输入图片说明 输入图片说明 输入图片说明 输入图片说明

版权声明

MoChat 开源版遵循 GPL-3.0 开源协议发布,并提供免费研究使用,但绝不允许修改后和衍生的代码做为闭源的商业软件发布和销售!

mochat's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mochat's Issues

composer install

我用的环境

  • PHP 版本:7.4
  • MoChat 版本:v1.1.5
  • Swoole 版本:swoole4

问题及现象

composer install找不到库

operation 前端 执行 yarn install 出错

我用的环境

  • PHP 版本:7.4
  • MoChat 版本:v1.1.5
  • Swoole 版本:4.5

问题及现象

operation 前端 执行 yarn install 出错

gyp info spawn args '-Goutput_dir=.'
gyp info spawn args ]
gyp verb command build []
gyp verb build type Release
gyp verb architecture x64
gyp verb node dev dir /root/.node-gyp/16.15.0
gyp verb which succeeded for make /usr/bin/make
gyp info spawn make
gyp info spawn args [ 'V=1', 'BUILDTYPE=Release', '-C', 'build' ]
make: Entering directory /www/wwwroot/mochat/operation/node_modules/node-sass/build' g++ '-DNODE_GYP_MODULE_NAME=libsass' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-DV8_DEPRECATION_WARNINGS' '-DV8_IMMINENT_DEPRECATION_WARNINGS' '-D_GLIBCXX_USE_CXX11_ABI=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-D__STDC_FORMAT_MACROS' '-DOPENSSL_NO_PINSHARED' '-DOPENSSL_THREADS' '-DLIBSASS_VERSION="3.5.5"' -I/root/.node-gyp/16.15.0/include/node -I/root/.node-gyp/16.15.0/src -I/root/.node-gyp/16.15.0/deps/openssl/config -I/root/.node-gyp/16.15.0/deps/openssl/openssl/include -I/root/.node-gyp/16.15.0/deps/uv/include -I/root/.node-gyp/16.15.0/deps/zlib -I/root/.node-gyp/16.15.0/deps/v8/include -I../src/libsass/include -fPIC -pthread -Wall -Wextra -Wno-unused-parameter -m64 -O3 -fno-omit-frame-pointer -std=gnu++14 -std=c++0x -fexceptions -frtti -MMD -MF ./Release/.deps/Release/obj.target/libsass/src/libsass/src/ast.o.d.raw -c -o Release/obj.target/libsass/src/libsass/src/ast.o ../src/libsass/src/ast.cpp g++: error: unrecognized command line option ‘-std=gnu++14’ make: *** [Release/obj.target/libsass/src/libsass/src/ast.o] Error 1 make: Leaving directory /www/wwwroot/mochat/operation/node_modules/node-sass/build'
gyp ERR! build error
gyp ERR! stack Error: make failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/www/wwwroot/mochat/operation/node_modules/node-gyp/lib/build.js:262:23)
gyp ERR! stack at ChildProcess.emit (node:events:527:28)
gyp ERR! stack at Process.ChildProcess._handle.onexit (node:internal/child_process:291:12)
gyp ERR! System Linux 3.10.0-1160.53.1.el7.x86_64
gyp ERR! command "/www/server/nvm/versions/node/v16.15.0/bin/node" "/www/wwwroot/mochat/operation/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd /www/wwwroot/mochat/operation/node_modules/node-sass
gyp ERR! node -v v16.15.0

无法登录 dashboard

我用的环境

  • PHP 版本:7.4.3
  • MoChat 版本:latest
  • Swoole 版本:4.6.5
  • Nodejs 版本:14.15.3

问题及现象

安装配置成功后,无法登录dashboard,提示未认证,没有token

  • api, dashboard, sidebar 都部署完毕,域名和 nginx 反向代理都按照文档设置并且能够访问。
  • php bin/hyperf.php mc:init 成功, 数据库各种表已经创建起来了
  • mc_user 没有数据,执行了文档里写的两条sql:
INSERT INTO `mc_user` (`phone`,`password`,`status`,`isSuperAdmin`) VALUES ('13412347867','$2y$10$6PedNV6SVNQNpUMjZgauvewh7wfFjbSWbh2k9yGJ9dhAIBVcL4gKm',1,1);

INSERT INTO `mc_tenant` (`server_ips`) VALUES ('["182.92.11.11"]');

1
2
3

后台服务异常.hard错误

我用的环境

  • PHP 版本:7.4
  • MoChat 版本:最新
  • Swoole 版本:4.5

问题及现象

部署完请求接口报 后台服务异常.hard

初始化安装建议

我用的环境

  • PHP 版本:7.3.1
  • MoChat 版本:2.0
  • Swoole 版本:4.6

查询不到数据表

PHP Fatal error: Uncaught PDOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'mochat.user' doesn't exist in vendor/hyperf/database/src/Connection.php:282

建议在初始化安装提供表前缀填写

外部群聊机器人

问题1:

企业微信外部群聊机器人有相关第三方应用或者有开发计划吗?

问题2:

群管理支持对发广告自动踢人吗?

问题3:

dotnet core 版本的 mochat 在不在开发计划内呀?

无法获取消息存档数据

我用的环境

  • PHP 版本:7.4
  • MoChat 版本:2.0
  • Swoole 版本:swoole4.x

问题及现象

  • 安装环境根据文档使用宝塔进行安装,安装完毕后,均可以正常登录后台,接口正常,访问显示“Hello MoChat”。成员、客户、组织架构均能正常同步。
  • 问题:在mochat后台配置完消息存档,重复确认并排除文档“会话内容未拉取”中的问题不存在,且微信用户”同意了存档会话内容“。但后台依旧无法有消息存档。
    image

在api-service/runtime/logs 中

info-2021-06-28.log  wechat.log

只有这两个日志,也没有报错信息。

报错500

我用的环境

  • PHP 版本:7.2
  • MoChat 版本:
  • Swoole 版本:4.5

问题及现象

General error: 1525 Incorrect TIMESTAMP value: ''2021-11-17'' (SQL: select count(id) as aggregate from mc_shop_code_record where corp_id = 1 and type = 1 and created_at > '2021-11-17' and mc_shop_code_record.deleted_at is null)[1082] in /opt/www/vendor/hyperf/database/src/Connection.php","type":"mochat","channel":"sys","level":"ERROR","monolog_level":400}

image
image

消息存档不好用!

我用的环境

docker版本

问题及现象

我添加完了企业,并配置好企业的信息,使用消息存档功能没有任何消息,我查看源代码后发现MessageSyncDataTask的注释上写着TODO 本功能暂未启用。消息存档这个功能现在是咱不可用么?

使用docker-compose方式安装mochat时,在执行docker-composer up后 一直报redis连接失败的错误的解决方法

问题:使用docker-compose方式安装mochat时,在执行docker-composer up后 一直报redis连接失败的错误
mochat_init | sh: /tmp/wait-for: not found
backend | [ERROR] RedisException:Connection refused(0) in /opt/www/vendor/hyperf/redis/src/RedisConnection.php:246

分析:主要是/docker-compose/services/mochat_init/wait-for这个sh文件没有被linux服务器识别 导致mochat_init初始化失败。
原因是shell脚本编写时的系统跟执行脚本的系统不一致,比如在window系统编写脚本,拷贝到Linux系统执行时就会遇见此问题。原因是在windows下编辑的.sh文件的格式为dos格式,而linux只能执行格式为unix格式的脚本。因为在dos/window下按一次回车键实际上输入的是“回车(CR)”和“换行(LF)”,而Linux/unix下按一次回车键只输入“换行(LF)”,所以修改的sh文件在每行都会多了一个CR,所以Linux下运行时就会报错找不到命令。
另外就是在github上使用windows系统下载源文件中包含shell脚本文件时,解压并拷贝到Linux系统执行时,也可能发生此问题。

解决办法:
通过vi编辑器来查看文件的format格式
用vi命令打开文件vi wait-for
在vi命令模式中使用 :set ff 命令 可以看到文件的格式为
fileformat=dos
使用vi/vim修改文件format为unix
:set ff=unix
或者::set fileformat=unix
然后:wq保存退出,重新执行docker-composer up就正常了。

跨域问题

我用的环境

  • PHP 版本:7.4
  • MoChat 版本:1.1
  • Swoole 版本:4.7.1

问题及现象

服务部署好了,前端页面也弄好了,我在我本地电脑上任何浏览器访问是正常的,但是除了这台电脑以外,其他的电脑,包括手机,用浏览器访问就会报跨域错误

Access to XMLHttpRequest at 'http://api.yowub.com/dashboard/user/auth. from origin 'http://dashboard.yowub.com/' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

初始化报错php bin/hyperf.php mc:init。 PHP Fatal error: Uncaught Symfony\Component\Console\Exception\RuntimeException: Unable to hide the response. in /www/wwwroot/mochat/api-server/vendor/symfony/console/Helper/QuestionHelper.php:434

我用的环境

  • PHP 版本:7.4
  • MoChat 版本:最新(2022.4)
  • Swoole 版本:4

问题及现象

执行如下指令时报错:php bin/hyperf.php mc:init
刚开始初始化时正常,当配置到管理员手机并回车确定时,看到提示输入管理员密码,接着就是报错信息了。

 输入redis.db [0]:
 > 

+------------+-----------+
| 属性名称   | 属性值    |
+------------+-----------+
| REDIS_HOST | 127.0.0.1 |
| REDIS_PORT | 6379      |
| REDIS_AUTH |           |
| REDIS_DB   | 0         |
+------------+-----------+
重载配置成功

 输入管理员的手机号:
 > 18888888888

 输入管理员密码:
 > PHP Fatal error:  Uncaught Symfony\Component\Console\Exception\RuntimeException: Unable to hide the response. in /www/wwwroot/mochat/api-server/vendor/symfony/console/Helper/QuestionHelper.php:434

完整报错信息如下:

 > PHP Fatal error:  Uncaught Symfony\Component\Console\Exception\RuntimeException: Unable to hide the response. in /www/wwwroot/mochat/api-server/vendor/symfony/console/Helper/QuestionHelper.php:434
Stack trace:
#0 /www/wwwroot/mochat/api-server/vendor/symfony/console/Helper/QuestionHelper.php(120): Symfony\Component\Console\Helper\QuestionHelper->getHiddenResponse()
#1 /www/wwwroot/mochat/api-server/vendor/symfony/console/Helper/QuestionHelper.php(67): Symfony\Component\Console\Helper\QuestionHelper->doAsk()
#2 /www/wwwroot/mochat/api-server/vendor/symfony/console/Style/SymfonyStyle.php(361): Symfony\Component\Console\Helper\QuestionHelper->ask()
#3 /www/wwwroot/mochat/api-server/vendor/hyperf/command/src/Command.php(182): Symfony\Component\Console\Style\SymfonyStyle->askQuestion()
#4 /www/wwwroot/mochat/api-server/runtime/container/proxy/MoChat_App_Install_Command_McInitCommand.proxy.php(203): Hyperf\Command\Command->secret()
#5 /www/wwwroot/mochat/api-server/runtime/container/proxy/MoChat_App_Install_Command_McInitCommand.pro in /www/wwwroot/mochat/api-server/vendor/symfony/console/Helper/QuestionHelper.php on line 434

Fatal error: Uncaught Symfony\Component\Console\Exception\RuntimeException: Unable to hide the response. in /www/wwwroot/mochat/api-server/vendor/symfony/console/Helper/QuestionHelper.php:434
Stack trace:
#0 /www/wwwroot/mochat/api-server/vendor/symfony/console/Helper/QuestionHelper.php(120): Symfony\Component\Console\Helper\QuestionHelper->getHiddenResponse()
#1 /www/wwwroot/mochat/api-server/vendor/symfony/console/Helper/QuestionHelper.php(67): Symfony\Component\Console\Helper\QuestionHelper->doAsk()
#2 /www/wwwroot/mochat/api-server/vendor/symfony/console/Style/SymfonyStyle.php(361): Symfony\Component\Console\Helper\QuestionHelper->ask()
#3 /www/wwwroot/mochat/api-server/vendor/hyperf/command/src/Command.php(182): Symfony\Component\Console\Style\SymfonyStyle->askQuestion()
#4 /www/wwwroot/mochat/api-server/runtime/container/proxy/MoChat_App_Install_Command_McInitCommand.proxy.php(203): Hyperf\Command\Command->secret()
#5 /www/wwwroot/mochat/api-server/runtime/container/proxy/MoChat_App_Install_Command_McInitCommand.pro in /www/wwwroot/mochat/api-server/vendor/symfony/console/Helper/QuestionHelper.php on line 434

成员统计访问有问题

我用的环境

  • PHP 版本:7.4
  • MoChat 版本:2.0
  • Swoole 版本:4.5.9

问题及现象

访问 http://mochat.test/workEmployee/index?page=1&perPage=10 显示 500错误
报错信息如下:

// api-server\app\Service\WorkEmployeeStatisticService.php
    /**
     *  查询多条 - 根据成员ID.
     */
    public function getEmployeeStatisticIdsByEmployeeIds(array $employeeIds, array $columns = ['*'], array $options = []): array
    {
        $model = $this->model::query()
            ->select('id', Db::raw('MAX(id) as id'))
            ->whereIn('employee_id', $employeeIds);
        if (! empty($options['groupBy'])) {
            $model = $model->groupBy($options['groupBy']);
        }
        return $model->get()->toArray();
    }

// api-server\app\Logic\WorkEmployee\IndexLogic.php
   /**
     * 成员统计
     */
    protected function getEmployeeStatistics(array $employeeIds): array
    {
        $employeeStatisticsIds = $this->workEmployeeStatisticService->getEmployeeStatisticIdsByEmployeeIds($employeeIds, ['id', 'employee_id'], ['groupBy' => ['employee_id']]);
    }

最终生成的SQL语句是

id 不在 group by 的字段中,查询为报错。MySQL 版本为5.7.26.

前端部署时,提示缺少必要文件

我用的环境

  • PHP 版本:7.3.22
  • MoChat 版本:latest
  • Swoole 版本:4.6.5

问题及现象

安装配置dashboard时,执行yarn run build后,一直提示缺少必要的文件,提示信息如下:
ERROR Error: Cannot find module './public/dll/antDesignVue-manifest.json'

尝试过node16/15/14/13/10等多个版本,均如此

安装报错 it is missing from your system. Install or enable PHP's wxwork_finance_sdk extension.

我用的环境

  • PHP 版本:7.4.10
  • MoChat 版本:master
  • Swoole 版本:4.5.4

问题及现象

执行composer install

 Problem 1
    - Root composer.json requires mochat/wework-finance-sdk ^1.0 -> satisfiable by mochat/wework-finance-sdk[v1.0.0].
    - mochat/wework-finance-sdk v1.0.0 requires ext-wxwork_finance_sdk * -> it is missing from your system. Install or enable PHP's wxwork_finance_sdk extension.

群打卡sql错误

我用的环境

  • PHP 版本:7.4
  • MoChat 版本:1.0 最新
  • Swoole 版本:

问题及现象

{"@timestamp":"2021-08-24T14:09:32.295530+08:00","@Version":1,"host":"442901984fb7","message":"SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mochat_v1.mc_room_clock_in_contact.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by (SQL: select id, nickname, avatar, total_day, series_day from mc_room_clock_in_contact where clock_in_id = 1 and total_day > 0 and mc_room_clock_in_contact.deleted_at is null group by union_id, total_day order by total_day desc limit 10)[1082] in /opt/www/vendor/hyperf/database/src/Connection.php","type":"mochat","channel":"sys","level":"ERROR","monolog_level":400}

前端项目 dashboard 编译失败

我用的环境

  • PHP 版本:7.4.3
  • MoChat 版本:latest
  • Swoole 版本:4.6.5
  • Nodejs 版本:14.15.3

问题及现象

dashboard 编译失败, 看起来是去 require 不存在的 json文件,./public/ 下边没有 dll 文件夹,自然也不会有 dll/antDesignVue-manifest.json, 看起了也不像是 vue 或 webpack 会自动去创建文件夹和下载对应文件。

# 报错代码位置:
...
const dll = ['antDesignVue', 'vueCropper', 'echarts', 'corejs', 'vueContainerQuery']
      dll.map(item => {
        const path = `./public/dll/${item}-manifest.json`
        config.plugins.push(new webpack.DllReferencePlugin({
          manifest: require(path)
        }))
      })
...

# 报错命令:
$ yarn run build
yarn run v1.22.10
$ vue-cli-service build
✔  Building for production...
 ERROR  Error: Cannot find module './public/dll/antDesignVue-manifest.json'
Require stack:
- /home/thomas/scp_root/mochat/dashboard/vue.config.js
- /home/thomas/scp_root/mochat/dashboard/package.json
Error: Cannot find module './public/dll/antDesignVue-manifest.json'
Require stack:
- /home/thomas/scp_root/mochat/dashboard/vue.config.js
- /home/thomas/scp_root/mochat/dashboard/package.json
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:815:15)
    at Function.Module._load (internal/modules/cjs/loader.js:667:27)
    at Module.require (internal/modules/cjs/loader.js:887:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at /home/thomas/scp_root/mochat/dashboard/vue.config.js:65:21
    at Array.map (<anonymous>)
    at configureWebpack (/home/thomas/scp_root/mochat/dashboard/vue.config.js:62:11)
    at /home/thomas/scp_root/mochat/dashboard/node_modules/@vue/cli-service/lib/Service.js:251:21
    at Array.forEach (<anonymous>)
    at Service.resolveWebpackConfig (/home/thomas/scp_root/mochat/dashboard/node_modules/@vue/cli-service/lib/Service.js:248:30)
    at PluginAPI.resolveWebpackConfig (/home/thomas/scp_root/mochat/dashboard/node_modules/@vue/cli-service/lib/PluginAPI.js:132:25)
    at module.exports (/home/thomas/scp_root/mochat/dashboard/node_modules/@vue/cli-service/lib/commands/build/resolveAppConfig.js:46:14)
    at build (/home/thomas/scp_root/mochat/dashboard/node_modules/@vue/cli-service/lib/commands/build/index.js:147:50)
    at /home/thomas/scp_root/mochat/dashboard/node_modules/@vue/cli-service/lib/commands/build/index.js:89:13
    at Service.run (/home/thomas/scp_root/mochat/dashboard/node_modules/@vue/cli-service/lib/Service.js:230:12)
    at Object.<anonymous> (/home/thomas/scp_root/mochat/dashboard/node_modules/@vue/cli-service/bin/vue-cli-service.js:36:9)
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

消息存档的相关问题

我用的环境

  • PHP 版本:7.4
  • MoChat 版本:2.0
  • Swoole 版本:4.6

问题及现象

1、消息存档在下载时间比较短的音频文件转mp3的时候会失败,返回为空,不知道是我的ffmpeg问题还是什么,我转成了wav就没啥问题

2、消息存档如果有语音通话的记录,在程序获取同步的时候会因为没有对语音通话类型作处理(并未传回roomid)导致异步
[redis异步队列错误-message:] Undefined index: roomid
应该视频通话也会导致这个错误吧,望下个版本进行完善下

经常超时错误

我用的环境

  • PHP 版本:
  • MoChat 版本:
  • Swoole 版本:

问题及现象

您好,在测试的时候有个问题,就是会经常报超时错误,刷新页面也不行,但是过几分钟就正常了,想问下是配置的nginx有问题?还是后台不稳定造成的

MySQL 8.0 无法创建企业临时解决方案

修改文件 :vendor/hyperf/database/src/Schema/Grammars/MySqlGrammar.php

找到 compileColumnListing 方法,修改如下:

 /**
     * Compile the query to determine the list of columns.
     */
    public function compileColumnListing(): string
    {
        return 'select `column_key` as `column_key`, `column_name` as `column_name`, `data_type` as `data_type`, `column_comment` as `column_comment`, `extra` as `extra`, `column_type` as `column_type` from information_schema.columns where `table_schema` = ? and `table_name` = ? order by ORDINAL_POSITION';
    }

聊天侧边栏加载错误

我用的环境

  • PHP 版本:7.4.15
  • MoChat 版本:1.x
  • Swoole 版本:4.6

问题及现象

聊天侧边栏加载错误

前端提示 :{"code":100012,"msg":"资源未找到","data":[]}

后端错误代码截图如下:
屏幕快照 2021-02-25 15 47 32

管理员密码修改问题

初始化时设置管理员密码如果用了符号,就无法修改了。
因为修改密码界面做了限制,只能是字母和数字
所以判断旧密码时无法通过验证

初始化项目报错 php bin/hyperf.php mc:init 报错 PHP Fatal error: Uncaught Error: Class 'Swoole\Coroutine' not found in /www/wwwroot/mochat/api-server/vendor/hyperf/engine/src/Coroutine.php:60

我用的环境

  • PHP 版本:7.4
  • MoChat 版本:最新版,2022.2.15获取(git clone)
  • Swoole 版本:4

问题及现象

执行项目初始化时,报错,

php bin/hyperf.php mc:init

PHP Warning: Use of undefined constant SWOOLE_HOOK_ALL - assumed 'SWOOLE_HOOK_ALL' (this will throw an Error in a future version of PHP) in /www/wwwroot/mochat/api-server/bin/hyperf.php on line 12

Warning: Use of undefined constant SWOOLE_HOOK_ALL - assumed 'SWOOLE_HOOK_ALL' (this will throw an Error in a future version of PHP) in /www/wwwroot/mochat/api-server/bin/hyperf.php on line 12
PHP Warning: Use of undefined constant SWOOLE_HOOK_CURL - assumed 'SWOOLE_HOOK_CURL' (this will throw an Error in a future version of PHP) in /www/wwwroot/mochat/api-server/bin/hyperf.php on line 12

Warning: Use of undefined constant SWOOLE_HOOK_CURL - assumed 'SWOOLE_HOOK_CURL' (this will throw an Error in a future version of PHP) in /www/wwwroot/mochat/api-server/bin/hyperf.php on line 12

PHP Fatal error: Uncaught Error: Class 'Swoole\Coroutine' not found in /www/wwwroot/mochat/api-server/vendor/hyperf/engine/src/Coroutine.php:60
Stack trace:
#0 /www/wwwroot/mochat/api-server/vendor/hyperf/utils/src/Coroutine.php(90): Hyperf\Engine\Coroutine::id()
#1 /www/wwwroot/mochat/api-server/vendor/hyperf/utils/src/Context.php(41): Hyperf\Utils\Coroutine::inCoroutine()
#2 /www/wwwroot/mochat/api-server/vendor/hyperf/utils/src/Context.php(76): Hyperf\Utils\Context::has()
#3 /www/wwwroot/mochat/api-server/vendor/hyperf/di/src/Resolver/DepthGuard.php(59): Hyperf\Utils\Context::override()
#4 /www/wwwroot/mochat/api-server/vendor/hyperf/di/src/Resolver/DepthGuard.php(72): Hyperf\Di\Resolver\DepthGuard->increment()
#5 /www/wwwroot/mochat/api-server/vendor/hyperf/di/src/Resolver/ResolverDispatcher.php(63): Hyperf\Di\Resolver\DepthGuard->call()
#6 /www/wwwroot/mochat/api-server/vendor/hyperf/di/src/Container.php(184): Hyperf\Di\Resolver\ResolverDispatcher->resolve()
#7 /www/wwwroot/mochat/api-server/vendor/hyperf/di/src/Containe in /www/wwwroot/mochat/api-server/vendor/hyperf/engine/src/Coroutine.php on line 60

Fatal error: Uncaught Error: Class 'Swoole\Coroutine' not found in /www/wwwroot/mochat/api-server/vendor/hyperf/engine/src/Coroutine.php:60
Stack trace:
#0 /www/wwwroot/mochat/api-server/vendor/hyperf/utils/src/Coroutine.php(90): Hyperf\Engine\Coroutine::id()
#1 /www/wwwroot/mochat/api-server/vendor/hyperf/utils/src/Context.php(41): Hyperf\Utils\Coroutine::inCoroutine()
#2 /www/wwwroot/mochat/api-server/vendor/hyperf/utils/src/Context.php(76): Hyperf\Utils\Context::has()
#3 /www/wwwroot/mochat/api-server/vendor/hyperf/di/src/Resolver/DepthGuard.php(59): Hyperf\Utils\Context::override()
#4 /www/wwwroot/mochat/api-server/vendor/hyperf/di/src/Resolver/DepthGuard.php(72): Hyperf\Di\Resolver\DepthGuard->increment()
#5 /www/wwwroot/mochat/api-server/vendor/hyperf/di/src/Resolver/ResolverDispatcher.php(63): Hyperf\Di\Resolver\DepthGuard->call()
#6 /www/wwwroot/mochat/api-server/vendor/hyperf/di/src/Container.php(184): Hyperf\Di\Resolver\ResolverDispatcher->resolve()
#7 /www/wwwroot/mochat/api-server/vendor/hyperf/di/src/Containe in /www/wwwroot/mochat/api-server/vendor/hyperf/engine/src/Coroutine.php on line 60

多次检查,api-server目录下并无vendor文件夾和子文件。

关于 “未认证,没有token”的问题

这个问题历史问题中也都有问过,但是都没给满意的答复,就关闭了,我觉得这种行为是很草率的。这里我给大家彻底的解释一下,为什么会报 未认证,没有token 这个问题。

导致的原因:报这个问题的人大多数是未使用初始化脚本去配置,而是自己直接去改配置文件 .env
追问:那为什么没用过初始化脚本,就会报这个问题呢?

1、未通过初始化脚本初始配置项,系统没办法生成一条默认账号。这时候,我们通过简单的代码调试,就知道 mc_user表缺数据,就会去添加数据。

2、面临的第二个问题就是,密码是加密后的,这是我们追源码,也很容易知道密码是
password_hash(md5($signatureString . $this->getSecret()), PASSWORD_BCRYPT);
这么来的。这也是官方,给的原因,说你密码错了,这个那个的。

3、你发现你的密码是对的,为什么还是报呢?继续追代码你会发现,token 其实是生成了,只是调用 /role/permissionByUser 报莫名其妙的错误 未认证,没有token。这个错误极具误导性,让人以为是header中未携带token,其实好好的携带着呢。
/role/permissionByUser发现并没有进入这个方法,之前就被拦住了,报错了。那就是中间件的问题了。最终找到
mochat/api-server/app/Model/Traits/UserTrait.php 的 72 - 73行。有如下代码:
$redis = $container->get(Redis::class); $cacheData = $redis->get('mc:user.' . $id);
jwt这个组件,需要用到redis 去存储用户的信息,未连上报的错误。我想大多数的人,都是因为,并没有去连接redis也能启动,而忽略了。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.