本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

Unoapi Cloud是基于Baileys([***])实现的RESTful API服务,支持多设备连接,兼容*** Cloud API格式([***])。该服务可将媒体文件存储在文件系统(data目录)、S3兼容存储或Redis中,提供消息收发、状态管理、联系人验证等功能,适用于构建基于的自动化消息系统、客户服务平台等应用。
http://localhost:9876/session/XXX(XXX为手机号,如http://localhost:9876/session/5549988290955)QR码也会发送到配置的Webhook,可在Chatwoot等收件箱中查看。
使用 /ws 端点并监听 broadcast 事件,qrcode 类型事件的 content 属性包含QR码的base64 URL:
import { io } from 'socket.io-client'; const socket = io('http://localhost:9876/ws', { path: '/ws' }); socket.on('broadcast', data => { console.log('broadcast', data); });
消息 payload 基于*** Cloud API格式,支持多种消息类型:
curl -i -X POST \ http://localhost:9876/v15.0/554931978550/messages \ -H 'Content-Type: application/json' \ -H 'Authorization: 1' \ -d '{ "messaging_product": "***", "to": "5549988290955", "type": "text", "text": { "body": "hello" } }'
curl -i -X POST \ http://localhost:9876/v15.0/5549988290955/messages \ -H 'Content-Type: application/json' \ -H 'Authorization: 1' \ -d '{ "messaging_product": "***", "to": "5549999621461", "type": "contacts", "contacts": [ { "name": { "formatted_name": "Clairton - Faça um pix nessa chave e contribua com a unoapi" }, "phones": [ { "wa_id": "554988290955", "phone": "+5549988290955" } ] } ] }'
curl -i -X POST \ http://localhost:9876/v15.0/5549988290955/messages \ -H 'Content-Type: application/json' \ -d '{ "messaging_product": "***", "to": "***", "type": "text", "text": { "body": "hello" } }'
curl -i -X POST \ http://localhost:9876/v15.0/5549988290955/messages \ -H 'Content-Type: application/json' \ -H 'Authorization: 1' \ -d '{ "messaging_product": "***", "status": "read", "message_id": "MESSAGE_ID" }'
curl -i -X GET \ http://localhost:9876/v15.0/5549988290955/3EB005A626251D50D4E4 \ -H 'Content-Type: application/json'
返回的URL可用于下载媒体:
curl -i -X GET \ [***] \ -H 'Content-Type: application/json'
curl -i -X POST \ http://localhost:9876/v15.0/5549988290955/messages \ -H 'Content-Type: application/json' \ -d '{ "messaging_product": "***", "to": "5549988290955", "type": "image", "image": { "link" : "[***]" } }'
Webhook事件格式兼容*** Cloud API,并扩展了群组相关字段(group_id、group_subject、group_picture)和个人资料图片字段(picture):
{ "object": "***_business_account", "entry": [{ "id": "***_BUSINESS_ACCOUNT_ID", "changes": [{ "value": { "messaging_product": "***", "metadata": { "display_phone_number": PHONE_NUMBER, "phone_number_id": PHONE_NUMBER_ID }, "contacts": [{ "profile": { "name": "NAME", "picture": "图片URL" // *** Cloud API扩展字段 }, "group_id": "***", // 群组ID,扩展字段 "group_subject": "Awesome Group", // 群组名称,扩展字段 "group_picture": "图片URL", // 群组头像,扩展字段 "wa_id": PHONE_NUMBER }], "messages": [{ "from": PHONE_NUMBER, "id": "wamid.ID", "timestamp": TIMESTAMP, "text": { "body": "MESSAGE_BODY" }, "type": "text" }] }, "field": "messages" }] }] }
自定义错误码(基于*** Cloud API错误码扩展):
仅在yarn standalone模式下可用:
curl -i -X POST \ http://localhost:9876/5549988290955/contacts \ -H 'Content-Type: application/json' \ -H 'Authorization: 1' \ -d '{ "blocking": "no_wait", "contacts": [ "16315551000" ], "force_check": true }'
返回结果:
{ "contacts": [ { "wa_id": "16315551000", "input": "16315551000", "status": "valid" } ] }
# docker-compose.yml version: '3' services: app: image: clairton/unoapi-cloud:latest volumes: - ./data:/home/u/app/data ports: - 9876:9876 environment: - NODE_ENV=development deploy: restart_policy: condition: on-failure
启动命令:docker compose up,访问http://localhost:9876/ping验证服务是否正常运行(返回"pong!")。
# docker-compose.yml version: '3' services: app: image: clairton/unoapi-cloud:latest volumes: - ./data:/home/u/app/data ports: - 9876:9876 deploy: restart_policy: condition: on-failure
启动命令:docker compose up。
yarn start: 启动单服务器,会话和媒体文件存储在文件系统yarn cloud: 启动单服务器,消息存储在Redis和RabbitMQyarn web 和 yarn worker: 启动Web和Worker服务,使用Redis和RabbitMQyarn standalone: 根据环境变量选择存储方式(Redis/S3/文件系统)yarn waker: 将死信队列中的消息移回处理队列重试创建.env文件自定义配置(默认值如无说明则为默认配置):
CONSUMER_TIMEOUT_MS=30000 # 任务消费超时时间(毫秒) AVAILABLE_LOCALES=["en", "pt_BR", "pt"] # 支持的语言 DEFAULT_LOCALE=en # 默认语言 ONLY_HELLO_TEMPLATE=false # 是否仅启用hello模板 MAX_CONNECT_RETRY=3 # 最大连接重试次数 MAX_CONNECT_TIME=3000 # 最大连接时间间隔(毫秒) CONNECTION_TYPE=qrcode # 连接类型(qrcode/pairing_code) QR_TIMEOUT_MS=60000 # QR码超时时间(毫秒) WEBHOOK_SESSION= # 接收状态和QR码事件的Webhook BASE_URL= # 媒体下载基础URL PORT=9876 # HTTP端口 BASE_STORE=./data # 数据存储目录 LOG_LEVEL=warn # 日志级别 UNO_LOG_LEVEL= # Unoapi日志级别(默认同LOG_LEVEL) UNOAPI_RETRY_REQUEST_DELAY_MS=1000 # 解密失败重试延迟(毫秒) UNOAPI_DELAY_AFTER_FIRST_MESSAGE_MS=0 # 首条消息后延迟(毫秒) UNOAPI_DELAY_AFTER_FIRST_MESSAGE_WEBHOOK_MS=0 # 首条消息Webhook后延迟(毫秒) UNOAPI_DELAY_BETWEEN_MESSAGES_MS=0 # 消息间延迟(毫秒) CLEAN_CONFIG_ON_DISCONNECT=false # 断开连接时清理Redis配置 CONFIG_SESSION_PHONE_CLIENT=Unoapi # 客户端名称 CONFIG_SESSION_PHONE_NAME=Chrome # 浏览器名称 ***_VERSION= # ***版本(默认使用Baileys版本) VALIDATE_SESSION_NUMBER=true # 验证会话号码是否匹配 OPENAI_API_KEY= # OpenAI API密钥(用于音频转文字)
STORAGE_BUCKET_NAME= # 存储桶名称 STORAGE_ACCESS_KEY_ID= # 访问密钥 STORAGE_SECRET_ACCESS_KEY= # 密钥 STORAGE_REGION= # 区域 STORAGE_ENDPOINT= # 端点URL STORAGE_FORCE_PATH_STYLE= # 是否强制路径样式 STORAGE_TIMEOUT_MS= # 超时时间(毫秒)
AMQP_URL= # RabbitMQ连接URL REDIS_URL= # Redis连接URL
WEBHOOK_URL_ABSOLUTE= # Webhook完整URL WEBHOOK_URL= # Webhook URL(自动追加电话号码) WEBHOOK_TOKEN= # Webhook令牌 WEBHOOK_HEADER= # Webhook令牌头名称 WEBHOOK_TIMEOUT_MS=5000 # Webhook超时时间(毫秒) WEBHOOK_SEND_NEW_MESSAGES=false # 是否发送新消息到Webhook WEBHOOK_SEND_GROUP_MESSAGES=true # 是否发送群组消息到Webhook WEBHOOK_SEND_OUTGOING_MESSAGES=true # 是否发送 outgoing消息到Webhook WEBHOOK_SEND_INCOMING_MESSAGES=true # 是否发送 incoming消息到Webhook WEBHOOK_SEND_TRANSCRIBE_AUDIO=false # 是否发送音频转文字结果 WEBHOOK_SEND_UPDATE_MESSAGES=true # 是否发送消息状态更新 IGNORE_GROUP_MESSAGES=true # 是否忽略群组消息 IGNORE_BROADCAST_STATUSES=true # 是否忽略广播状态 IGNORE_NEWSLETTER_MESSAGES=false # 是否忽略新闻通讯消息 IGNORE_STATUS_MESSAGE=true # 是否忽略状态消息 READ_ON_RECEIPT=false # 是否接收后标记为已读 IGNORE_BROADCAST_MESSAGES=false # 是否忽略广播消息 IGNORE_HISTORY_MESSAGES=true # 是否忽略历史消息 IGNORE_OWN_MESSAGES=true # 是否忽略自己的消息 IGNORE_YOURSELF_MESSAGES=true # 是否忽略发给自己的消息 COMPOSING_MESSAGE=false # 是否在发送前显示"正在输入" REJECT_CALLS= # 拒接电话时发送的消息 REJECT_CALLS_WEBHOOK= # 拒接电话时发送到Webhook的消息(已弃用) MESSAGE_CALLS_WEBHOOK= # 接收到电话时发送到Webhook的消息 SEND_CONNECTION_STATUS=true # 是否发送连接状态到Webhook IGNORE_DATA_STORE= # 是否忽略数据存储 AUTO_CONNECT=true # 是否自动连接 AUTO_RESTART_MS=0 # 自动重启间隔(毫秒,0为不自动重启) THROW_WEBHOOK_ERROR=false # Webhook错误是否抛出异常 NOTIFY_FAILED_MESSAGES=true # 消息失败时通知自己 SEND_REACTION_AS_REPLY=false # 是否将反应作为回复发送 SEND_PROFILE_PICTURE=true # 是否发送个人资料图片 PROXY_URL= # SOCKS代理URL WEBHOOK_FORWARD_PHONE_NUMBER_ID= # 转发到*** Cloud API的号码ID WEBHOOK_FORWARD_BUSINESS_ACCOUNT_ID= # 转发的商业账户ID WEBHOOK_FORWARD_TOKEN= # 转发的令牌 WEBHOOK_FORWARD_VERSION=v17.0 # 转发的API版本 WEBHOOK_FORWARD_URL=[***] # 转发的API URL WEBHOOK_FORWARD_TIMEOUT_MS=360000 # 转发超时时间(毫秒)
按会话存储配置(键格式:unoapi-config:PHONE_NUMBER):
{ "authToken": "令牌", "rejectCalls": "拒接电话消息", "ignoreGroupMessages": true, "ignoreBroadcastStatuses": true, "ignoreBroadcastMessages": false, "ignoreHistoryMessages": true, "ignoreOwnMessages": true, "ignoreYourselfMessages": true, "sendConnectionStatus": true, "composingMessage": false, "sessionWebhook": "", "autoConnect": false, "autoRestartMs": 3600000, "retryRequestDelayMs": 1000, "throwWebhookError": false, "webhooks": [ { "url": "http://localhost:3000/***/webhook", "token
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429