MiraiEz 常见问题与排查方法
MiraiEz 是一个支持 mirai-api-http 的 PHP 机器人框架
本文将列出一些部署中可能经常遇到的问题,并附上排查方案。
基础排查
在开始之前,要先了解基础结构。
Mirai —— mirai-api-http —— MiraiEz
以上任何一个部分出现问题或配置不当都会导致最终无法正常处理消息。
当我们部署后遇到问题时,可以逐个排查。
检查 mirai-api-http
- 查看 Mirai 控制台输出,检查是否有错误信息。
- 访问 HTTP 监听地址,检查是否正常响应。
- 检查配置文件,确认未开启单会话模式。
- 检查配置文件中的 Webhook 回调地址,确保其包含协议头。例如 http://
检查 MiraiEz
- 访问 MiraiEz 的地址,确认 Web 服务正常运行。
- 检查使用的 PHP 版本是否为 7.0 以上。
- 检查
config.php
,确认其中的配置无误。
一般来说检查以上项目就可以了。如果你的 MiraiEz 仍然无法正常工作,请继续进行下面的高级排查。
高级排查
[tip type="info"]
本章节内容是在确保 mirai-api-http 可以正常发送 webhook 请求的情况下进行的,如果你的 mirai-api-http 不能正常发送 webhook 请求,请到其官方仓库提交 Issue。
[/tip]
首先将 config.php
中的 logging_level
设置为 1 以启用调试日志记录,并将除示例插件外的插件禁用。
向机器人发送 /ping
消息。开始排查
检查 /logs/webhook.log
中是否记录该消息。
如果没有记录消息,说明 MiraiEz 没有收到 mirai-api-http 的 webhook 请求(或鉴权失败)。
进一步排查:修改 config.php
中的 Authorization 值为空字符串以关闭鉴权,并再次发送 /ping
。
解决方案:检查 mirai-api-http 配置文件中的 webhook 地址与 Authorization 值是否正确。
webhook.log
中有记录但是没有回复消息。
检查 /logs/adapter.log
中是否有发送消息的记录。
如果有发送 pong
消息的记录,说明 MiraiEz 已经正确处理;而第一次发送消息的操作默认使用 webhook 适配器进行,则可能是 mirai-api-http 的 webhook 不处理响应中的命令导致的。你就可以向 mirai-api-http 提交 Issue 了
先别急着提交 Issue,为了万无一失,建议你使用 HTTP 测试工具向 /webhook.php 发送请求模拟一次 webhook,请求内容可以在 webhook.log 中找到。
如果响应内容是正确的 webhook 命令格式,那么你可以向 mirai-api-http 提交 Issue 了;如果响应中包含其他内容(如 PHP 错误信息等),则你应该检查你的 Web 环境是否正常。
[collapse]
[collapse-item label="webhook 适配器不执行返回命令的临时解决方案"]
在 config.php
中将 adapter_always_use_http
改为 true
使 MiraiEz 只通过 HTTP 适配器发送命令即可。 但该方式会导致响应时间变长, 在 Bug 修复后建议还原。
[/collapse-item]
[/collapse]
如果日志中没有发送消息的记录,说明 MiraiEz 未能正确处理该消息。
这时你可以检查 errorHandle.log
日志中是否包含错误信息,如果有则可以查看具体错误原因。
如果没有记录错误信息或不存在该文件,请修改 errorHandle.php
中的 WEBHOOK_ERROR_REPORT_LEAVE
值为 -1 以直接输出所有错误。使用 HTTP 测试工具模拟刚才的 webhook 请求,观察响应内容。