Converse.js 14.0.1 配置参数详解
逐项详解 Converse.js 14.0.1 全部 153 个初始化配置项(默认值/类型/取值/场景),按 11 个功能域分组,附企业内网、公共社区、嵌入浮窗三套生产配置模板与 6 个高频踩坑排障实录。
Converse.js 14.0.1 配置参数详解
目标:逐项讲清 Converse.js 14.0.1 全部 153 个初始化配置项(
converse.initialize({...})的入参)——默认值、类型、取值范围与使用场景,按 11 个功能域分组,附三套生产配置模板与高频踩坑。配置项清单实查自官方 configuration 文档(2026-10-25),关键项已在 Ubuntu 22.04 自托管实例 + Chromium 实测验证。
一、环境信息
- Converse.js:14.0.1(npm 包
converse.js,2026-10-17 发布) - 参数来源:官方配置文档
conversejs.org/docs/html/configuration.html(2026-10-25 采集,共 153 项) - 验证环境:Ubuntu 22.04(x86_64)+ nginx/1.18.0 自托管 dist(安装方法见本专栏《Ubuntu 22.04 安装 Converse.js 14 指南》),Chromium 无头模式实测
- 联调服务端:Prosody IM 0.12(WebSocket 传输)
二、前置条件
- 已完成 Converse.js 14.0.1 的部署(自托管或 CDN,方法见本专栏安装与部署篇目);
- 能修改承载页面的 HTML/JS——Converse.js 没有服务端配置文件,全部配置都是页面侧 JS 对象;
- 一个可连接的 XMPP 服务器端点(本文示例用
wss://conversejs.org/xmpp-websocket公共端点与自托管 Prosody 端点)。
三、参数查看与修改方式
Converse.js 是浏览器端库,配置只有「初始化入参」一个来源,有三种等价写法:
方式 1(最常用):converse.initialize() 传对象
converse.initialize({
websocket_url: "wss://conversejs.org/xmpp-websocket",
view_mode: "fullscreen",
i18n: "zh_CN"
});
方式 2:外部 config.js 注入(推荐生产使用)
页面先加载 /config.js(定义 window.CONVERSE_CONFIG 对象),初始化时透传,改配置不动页面代码:
converse.initialize(window.CONVERSE_CONFIG || {});
方式 3:URL 片段临时调日志级别
个别参数支持 URL 覆盖用于现场调试,如 https://<站点>/#converse?loglevel=debug 临时把 loglevel 提到 debug,刷新即生效、不影响其他访客。
查看生效值:浏览器控制台经插件 API 读取(api.settings.get('websocket_url') 等,插件写法见本专栏《Converse.js 嵌入集成使用指南》篇)。
⚠️ 注意:配置必须在
converse.initialize()调用之前就位。initialize之后再改window.CONVERSE_CONFIG或全局变量不会生效,必须重新初始化(刷新页面)。
四、参数总览
153 个参数按功能域分为 11 组:
| 组 | 参数数 | 管辖范围 |
|---|---|---|
| 5.1 连接与传输 | 13 | WebSocket/BOSH 端点、连接保持、流管理 |
| 5.2 认证与账号 | 15 | 登录方式、域名锁定、注册引导 |
| 5.3 视图与界面 | 21 | 三种视图模式、主题、语言、工具栏 |
| 5.4 联系人与在线状态 | 15 | 花名册、订阅、presence |
| 5.5 消息行为 | 12 | 修正/撤回、输入状态、已读标记 |
| 5.6 媒体渲染与链接处理 | 11 | 图片/音视频内联、域名白名单、链接清洗 |
| 5.7 表情 | 5 | 系统 emoji、图片 emoji、快捷反应 |
| 5.8 群聊 MUC | 34 | 房间域、自动加入、管理员工具、书签 |
| 5.9 历史归档与本地存储 | 10 | MAM 归档、IndexedDB、消息裁剪 |
| 5.10 通知与声音 | 8 | 桌面通知、提示音、@提醒 |
| 5.11 插件扩展与高级 | 9 | 插件白/黑名单、OMEMO、日志 |
五、核心参数分类详解
5.1 连接与传输
| 参数 | 默认值 | 类型 | 说明 |
|---|---|---|---|
websocket_url | undefined | 字符串 | XMPP WebSocket 端点,如 wss://xmpp.example.com/xmpp-websocket。与 bosh_service_url 至少配一个 |
bosh_service_url | undefined | 字符串 | BOSH 长轮询端点,如 https://xmpp.example.com:5280/bosh/。与 websocket_url 二选一 |
discover_connection_methods | true | 布尔 | 按 XEP-0156 请求 https://<JID域>/.well-known/host-meta 自动发现端点。JID 域不可解析时必须置 false,否则发现失败阻断登录(实测见七、7.2) |
connection_options | {} | 对象 | 透传给底层 Strophe.js 连接对象的选项 |
keepalive | true | 布尔 | 跨页面刷新保持登录态(凭据缓存于所选存储) |
auto_reconnect | false | 布尔 | 连接意外断开时自动重连;生产建议开 |
ping_interval | 60 | 数字(秒) | 空闲时向服务器发 ping 保活的间隔;设为正值才生效 |
stanza_timeout | 20000 | 数字(毫秒) | 等待 Stanza 应答(如 IQ 请求)的超时,超时抛错 |
enable_smacks | true | 布尔 | XEP-0198 流管理,弱网断线后可续传未确认 Stanza |
smacks_max_unacked_stanzas | 5 | 数字 | 累计多少条未确认 Stanza 后主动向服务器请求确认 |
csi_waiting_time | 0 | 数字(秒) | XEP-0352 客户端状态指示:页面转入后台多少秒后声明 inactive,省服务端推送开销 |
reuse_scram_keys | true | 布尔 | 缓存 SCRAM 派生密钥加速后续登录;换密码后旧缓存自动失效 |
show_connection_url_input | false | 布尔 | 登录表单显示「连接地址」输入框,用户提交的 ws/http 地址会分别写入 websocket_url/bosh_service_url |
关键项示例(对接自托管服务端、关发现、开自动重连):
converse.initialize({
websocket_url: "wss://im.example.com/xmpp-websocket",
discover_connection_methods: false,
auto_reconnect: true,
ping_interval: 60
});
5.2 认证与账号
| 参数 | 默认值 | 类型 | 说明 |
|---|---|---|---|
authentication | 'login' | 枚举 | 认证方式:login(账号密码表单)/ external(外部 SSO 会话)/ anonymous(匿名)/ prebind(服务端预绑定,免二次登录) |
credentials_url | null | 字符串 | 配合 authentication: 'login':初始化前向该 URL 取凭据(由后端会话换发 JID/密码) |
prebind_url | null | 字符串 | prebind 模式下向该 URL 请求预绑定的 BOSH 会话令牌 |
oauth_providers | [] | 数组 | 允许用户选择的 OAuth 登录提供商列表 |
jid | '' | 字符串 | 预置登录 JID(配合 SSO/prebind 场景免输入) |
default_domain | undefined | 字符串 | 默认域名:用户只输用户名即可登录,自动补全 JID 域名 |
locked_domain | undefined | 字符串 | 锁定域名:比 default_domain 更强,不允许登录其他域 |
auto_login | false | 布尔 | 页面加载即自动登录(须配合 jid+凭据来源或 keepalive 已缓存会话) |
allow_logout | true | 布尔 | 为 false 时不显示登出按钮(SSO 场景常关) |
allow_registration | true | 布尔 | 显示 XEP-0077 带内注册表单(需服务端开启注册) |
registration_domain | '' | 字符串 | 指定注册域名,注册表单免输服务器域名 |
providers_link | 'https://xmpp.net/directory.php' | 字符串 | 注册表单上「公共服务器名录」链接 |
xmpp_providers_url | 'https://data.xmpp.net/providers/v2/providers-B.json' | 字符串 | 注册表单展示的公共 XMPP 服务商列表数据源 |
autocomplete_providers_url | 'https://data.xmpp.net/providers/v2/providers-Ds.json' | 字符串 | 添加联系人时 JID 域名自动补全的数据源 |
domain_placeholder | 'e.g. conversejs.org' | 字符串 | 注册表单域名输入框的占位文本 |
💡 技术拓展:四种认证方式对应四类部署形态——
方式 用户输入 典型场景 loginJID + 密码 默认表单登录,独立 IM 站 external无(外部会话) 已登录业务系统后免密进入 anonymous无 访客临时聊天(需服务端开匿名域) prebind无 后端先与 XMPP 建会话再交给前端,单点登录体验最好 本文示例与专栏各篇默认用
login;给既有系统做嵌入且要免登录时选prebind(需后端配合,见本专栏《Converse.js 嵌入集成使用指南》篇)。
5.3 视图与界面
| 参数 | 默认值 | 类型 | 说明 |
|---|---|---|---|
view_mode | 'fullscreen' | 枚举 | 视图模式:fullscreen 整页 / overlayed 右下角浮窗 / embedded 嵌入页面指定 DOM 区域 |
singleton | false | 布尔 | 为 true 时只允许同时存在一个会话窗(嵌入客服场景常用) |
sticky_controlbox | fullscreen 时为 true,否则 false | 布尔 | 控制框(登录/联系人/群聊面板)不可关闭 |
show_controlbox_by_default | fullscreen 时为 true,否则 false | 布尔 | 打开页面即显示控制框 |
show_client_info | true | 布尔 | 控制框显示版本信息图标(点开「关于」弹窗) |
show_background | true | 布尔 | 显示带 Converse logo 的背景 |
theme | 'default' | 字符串 | 亮色主题名 |
dark_theme | 'dracula' | 字符串 | 暗色模式使用的主题 |
colorize_username | false | 布尔 | 按 XEP-0392 一致性算法给昵称着色 |
i18n | 自动侦测浏览器语言(缺省 en) | 字符串 | 界面语言,简体中文为 'zh_CN';语言包按 chunk 异步加载 |
locales | 内置全集 | 数组 | 限定可切换的语言列表 |
rtl_langs | ["ar","fa","he","ug"] | 数组 | 需要从右到左渲染的语言清单 |
time_format | 'HH:mm' | 字符串 | 消息时间格式,如 hh:mm a |
root | window.document | DOM 对象 | 把 Converse 挂进 Web Component 的 shadow DOM 时设为该 shadow-root |
assets_path | '/dist/' | 字符串 | 异步资源(语言包、emoji、提示音、字体)加载基路径;平铺部署必须改(见七、7.4) |
allow_dragresize | true | 布尔 | 允许拖拽边缘调整聊天窗大小(overlayed 模式) |
dragresize_top_margin | 0 | 数字(像素) | 聊天窗上边缘拖拽时距窗口顶部的最小间距 |
auto_focus | true | 布尔 | 打开会话自动聚焦输入框;登录框加载后自动聚焦用户名 |
show_send_button | true | 布尔 | 显示发送按钮(移动端点按场景建议保留) |
visible_toolbar_buttons | 内置全集 | 对象 | 精细控制消息工具栏各按钮(表情/上传/纠正等)显隐 |
allow_url_history_change | true | 布尔 | 允许 Converse 用 History API 改地址栏(如 #converse/room?jid=...);嵌入路由敏感的站点时置 false |
三种 view_mode 的实测差异与嵌入示例见本专栏《Converse.js 嵌入集成使用指南》篇。
5.4 联系人与在线状态
| 参数 | 默认值 | 类型 | 说明 |
|---|---|---|---|
allow_contact_requests | true | 布尔 | 允许加好友/处理订阅请求;置 false 则隐藏相关 UI 并忽略一切入站请求 |
allow_contact_removal | true | 布尔 | 允许用户删除花名册联系人 |
allow_non_roster_messaging | false | 布尔 | 是否接收非花名册用户消息;开放联邦场景开启会增加垃圾消息面 |
auto_subscribe | false | 布尔 | 自动回订所有入站订阅请求(客服机器人式账号可用) |
roster_groups | true | 布尔 | 按分组展示花名册 |
hide_offline_users | false | 布尔 | 花名册隐藏离线用户 |
show_self_in_roster | true | 布尔 | 花名册显示自己(可与自己对话做草稿/自测) |
lazy_load_vcards | true | 布尔 | vCard(头像等)按需加载;置 false 则一登录就全量拉取 |
enable_roster_versioning | true | 布尔 | 花名册版本协商(XEP-0237),只同步变更;置 false 每次全量拉 |
nickname | undefined | 字符串 | 预置当前用户昵称,用于 presence 与 MUC 默认昵称 |
priority | 0 | 数字 | 本资源(此 Converse 实例)presence 优先级 |
idle_presence_timeout | 300 | 数字(秒) | 无操作多少秒后按 XEP-0319 发送 idle 状态 |
auto_away | 0 | 数字(秒) | 多少秒后自动置 away;0 关闭 |
auto_xa | 0 | 数字(秒) | 多少秒后自动置 extended away;0 关闭 |
synchronize_availability | true | 布尔 | 与本账号其他客户端同步在线状态(别处改 busy 这里同步) |
5.5 消息行为
| 参数 | 默认值 | 类型 | 说明 |
|---|---|---|---|
allow_message_corrections | 'all' | 枚举 | 消息修正(XEP-0308):'all' 可改任意自己的消息 / 'last' 仅最近一条 / 其他值关闭 |
allow_message_retraction | 'all' | 枚举 | 消息撤回(XEP-0424):'all' 用户可撤回自己的、 moderator 可撤回他人的 |
show_retraction_warning | true | 布尔 | 撤回前弹出确认提示 |
allow_message_styling | true | 布尔 | XEP-0393 消息样式提示(*粗体*、`代码` 等) |
message_limit | 0 | 数字 | 单条消息字符数上限,0 不限(仅前端 UX 限制,不构成安全边界) |
send_chat_state_notifications | true | 布尔/数组 | XEP-0085 输入状态通知(active/composing/gone/inactive/paused),可传数组只发部分状态 |
send_chat_markers | ['received','displayed','acknowledged'] | 数组 | XEP-0333 消息标记:收到/已读/确认 |
chatstate_notification_blacklist | [] | 数组 | 这些 JID 的输入状态不触发桌面通知 |
auto_join_private_chats | [] | 数组 | 登录后自动打开与这些 JID 的单聊窗口 |
filter_by_resource | false | 布尔 | 只接收发向当前资源的消息(1.0.3 之前的老行为,兼容用) |
show_message_avatar | true | 布尔 | 消息旁显示发送者头像 |
show_tab_notifications | true | 布尔 | 浏览器标签页标题显示未读计数 |
5.6 媒体渲染与链接处理
| 参数 | 默认值 | 类型 | 说明 |
|---|---|---|---|
render_media | true | 布尔 | 消息中的媒体 URL(图/音/视频)渲染为内联播放器/图片 |
show_images_inline | true | 布尔 | 为 false 时图片只显示链接不渲染 |
image_urls_regex | null | 正则 | 自定义「哪些 URL 视为图片」的匹配规则 |
allowed_image_domains | null | 数组/null | 图片域名白名单;null 不限制 |
allowed_audio_domains | null | 数组/null | 音频域名白名单 |
allowed_video_domains | null | 数组/null | 视频域名白名单 |
embed_3rd_party_media_players | true | 布尔 | 把第三方媒体站链接(如 Spotify)转为嵌入式播放器 |
fetch_url_headers | false | 布尔 | 主动抓取消息中 URL 的响应头以判断可否内联嵌入(增加流量与延迟) |
filter_url_query_params | null | 字符串/数组 | 匹配到的 query 参数从 URL 中剥除(去追踪参数场景) |
geouri_regex | openstreetmap 匹配正则 | 正则 | 从 OSM 链接提取经纬度 |
geouri_replacement | OSM 定位链接模板 | 字符串 | 把 geo URI 替换为可点击地图链接,$1/$2 为经纬度 |
内网部署收紧示例(只渲染本站媒体):
converse.initialize({
allowed_image_domains: ["im.example.com"],
allowed_audio_domains: ["im.example.com"],
allowed_video_domains: ["im.example.com"],
embed_3rd_party_media_players: false
});
5.7 表情
| 参数 | 默认值 | 类型 | 说明 |
|---|---|---|---|
use_system_emojis | true | 布尔 | 用操作系统原生 emoji 渲染;置 false 走图片 emoji |
emoji_image_path | 'https://twemoji.maxcdn.com/2/' | 字符串 | 图片 emoji 的取图基地址(use_system_emojis: false 时生效) |
popular_emojis | [':thumbsup:',':heart:',':laughing:',':joy:',':tada:'] | 数组 | 表情面板与消息反应(XEP-0444)的快捷 emoji |
emoji_categories | 内置全集 | 对象 | 自定义表情面板分类 |
emoji_categories_label | 内置全集 | 对象 | 自定义各分类的显示名 |
5.8 群聊 MUC
| 参数 | 默认值 | 类型 | 说明 |
|---|---|---|---|
muc_domain | undefined | 字符串 | 默认 MUC 组件域名,如 conference.example.com |
locked_muc_domain | false | 布尔/'hidden' | 锁定 MUC 域只能用 muc_domain;'hidden' 连域名输入框都隐藏 |
locked_muc_nickname | false | 布尔/字符串 | 锁定群聊昵称,用户不能改 |
muc_nickname_from_jid | false | 布尔 | 用 JID 节点部分自动作 MUC 昵称;撞名自动加数字 |
muc_instant_rooms | true | 布尔 | 允许创建即时房间(免配置即开聊) |
auto_join_rooms | [] | 数组 | 登录后自动加入的群聊 JID 列表 |
auto_join_on_invite | false | 布尔 | 被邀请时无需确认直接进房 |
auto_register_muc_nickname | 'unregister' | 布尔/'unregister' | 进房时自动注册昵称 |
muc_fetch_members | true | 布尔 | 进房即拉取成员列表 |
muc_history_max_stanzas | undefined | 数字 | 进房时拉取历史消息的最大条数(缺省按房间/服务器配置) |
muc_mention_autocomplete_min_chars | 0 | 数字 | 输入几个字符后弹出昵称补全 |
muc_mention_autocomplete_filter | 'contains' | 枚举 | 昵称补全过滤方式:contains / starts_with |
muc_mention_autocomplete_show_avatar | true | 布尔 | 昵称补全列表显示头像 |
muc_show_info_messages | 状态码/角色变化/进出房等事件集合 | 数组 | 群内显示哪些提示类消息(进出房、角色变更等) |
muc_show_logs_before_join | false | 布尔 | 首次进房时先显示历史(需 MAM)与昵称表单 |
muc_clear_messages_on_leave | true | 布尔 | 离房即清空本地缓存的该房消息(8.0 起默认行为) |
muc_send_probes | false | 布尔 | 对资料缺失的消息作者发 presence probe |
muc_respect_autojoin | 遵循书签(true) | 布尔 | 是否按书签中的 autojoin 标记自动进房 |
muc_roomid_policy | null | 正则 | 房间名合法性格式约束 |
muc_roomid_policy_hint | null | 字符串 | 配合上一条,给用户看的房间名规则说明(支持 <br>/<b>/<em>) |
muc_subscribe_to_rai | false | 布尔 | XEP-0437 房间活跃度指示订阅 |
muc_hats | ['xep317'] | 数组 | XEP-0317 Hats(群内身份徽标)支持 |
muc_disable_slash_commands | false | 布尔 | 禁用 /kick、/ban 等斜杠管理命令 |
allow_muc_invitations | true | 布尔 | 允许邀请他人进房(显示邀请控件) |
allow_bookmarks | true | 布尔 | 群聊书签功能(需 converse-bookmarks 插件) |
allow_public_bookmarks | false | 布尔 | 公共书签(服务端不支持私有 PEP 节点时的降级) |
auto_list_rooms | false | 布尔 | 「查询群聊」弹窗自动列出当前服务器上的房间 |
muc_search_service | 'api@search.jabber.network' | 字符串 | MUC 搜索服务 JID;置空字符串关闭房间搜索补全 |
enable_muc_push | false | 布尔 | 新进房时按 XEP-0357 注册推送 App Server |
modtools_disable_assign | false | 布尔/数组 | 管理员工具中禁用指派某些身份/角色 |
modtools_disable_query | [] | 数组 | 管理员工具中禁用查询某些身份/角色;全禁则对应标签页不显示 |
roomconfig_whitelist | [] | 数组 | 房间配置表单只显示列出的配置项(默认全显示) |
hide_muc_participants | false | 布尔 | 默认隐藏群成员列表 |
muc_grouped_by_domain | false | 布尔 | 群聊按域名分组折叠展示 |
常用群聊初始化示例:
converse.initialize({
muc_domain: "conference.example.com",
locked_muc_domain: true,
auto_join_rooms: ["lobby@conference.example.com"],
muc_nickname_from_jid: true
});
5.9 历史归档与本地存储
| 参数 | 默认值 | 类型 | 说明 |
|---|---|---|---|
message_archiving | undefined | 字符串 | MAM(XEP-0313)归档服务位置;需服务端启用 MAM 才有效 |
message_archiving_timeout | 20000 | 数字(毫秒) | 请求归档消息的等待超时 |
archived_messages_page_size | 50 | 数字 | 每页拉取的归档消息条数 |
auto_fill_history_gaps | true | 布尔 | 自动补齐历史缺口;置 false 则缺口处显示可点击占位 |
mam_request_all_pages | false | 布尔 | 从比最新缓存更新的位置起拉归档时是否翻完所有页 |
persistent_store | 'IndexedDB' | 枚举 | 本地持久化存储:IndexedDB / localStorage / sessionStorage |
clear_cache_on_logout | false | 布尔 | 登出时清空全部本地缓存(不论哪种存储) |
clear_messages_on_reconnection | false | 布尔 | 重连后清空已缓存消息(强一致性诉求场景) |
prune_messages_above | undefined | 数字 | 设为正整数则把聊天历史裁剪到该条数 |
pruning_behavior | 'unscrolled' | 枚举 | 裁剪时机:默认仅当聊天窗未上翻时裁剪,避免打断阅读 |
💡 技术拓展:三种
persistent_store的取舍——IndexedDB容量大、异步不阻塞 UI,是默认;localStorage兼容性最老但容量小且同步阻塞;sessionStorage关标签即清,适合「公用电脑不留痕」场景。
5.10 通知与声音
| 参数 | 默认值 | 类型 | 说明 |
|---|---|---|---|
show_desktop_notifications | true | 布尔 | HTML5 桌面通知总开关 |
show_chat_state_notifications | false | 布尔 | 聊天对象状态变化(上线/离开等)也弹桌面通知 |
notify_all_room_messages | false | 布尔 | 群里所有消息都通知;默认仅被@时通知 |
notify_nicknames_without_references | false | 布尔 | 对没有 XEP-0372 引用标记的昵称提及也发通知 |
notification_delay | 5000 | 数字(毫秒) | 桌面通知展示时长;0 为常驻直到用户关闭(需浏览器支持) |
notification_icon | 'logo/conversejs-filled.svg' | 字符串 | 桌面通知图标 |
play_sounds | false | 布尔 | 收到私聊/被@时播放提示音 |
sounds_path | '${assets_path}/sounds/'(随 assets_path) | 字符串 | 提示音文件目录(msg_received.mp3/ogg) |
5.11 插件扩展与高级
| 参数 | 默认值 | 类型 | 说明 |
|---|---|---|---|
whitelisted_plugins | [] | 数组 | 初始化时加载的插件白名单;自定义插件必须列在这里才会加载(v14 实测,见七、7.3) |
blacklisted_plugins | [] | 数组 | 插件黑名单:即使在白名单也不初始化,用于裁剪内置功能 |
strict_plugin_dependencies | false | 布尔 | 插件覆盖了不存在的对象时抛错(插件开发期建议开) |
omemo_default | false | 布尔 | 支持的会话默认开启 OMEMO 端到端加密 |
allow_user_trust_override | true | 布尔/'off' | 允许用户自行决定此浏览器是否可信(OMEMO 信任模型) |
allow_adhoc_commands | true | 布尔 | 特权用户可在设置弹窗执行 XEP-0050 Ad-Hoc 管理命令 |
xhr_user_search_url | null | 字符串 | 用户搜索接口地址(花名册加人的另一种数据源) |
push_app_servers | [] | 数组 | XEP-0357 推送 App Server 配置 |
loglevel | 'info' | 枚举 | 'debug'/'info'/'warn'/'error'/'fatal';可用 URL 片段 #converse?loglevel=debug 临时覆盖 |
六、生产配置模板
6.1 企业内网自托管(对接内网 Prosody/ejabberd)
适用:公司内网 IM,静态资源托管在一台 2C4G 的 Nginx 服务器即可(Converse.js 自身几乎零资源消耗),账号体系收敛到内网 XMPP 服务器:
converse.initialize({
websocket_url: "wss://im.internal.example.com/xmpp-websocket",
discover_connection_methods: false, // 内网域名不可被公共解析,必须关
locked_domain: "internal.example.com",
muc_domain: "conference.internal.example.com",
locked_muc_domain: true,
allow_registration: false, // 账号由管理员在服务端开通
auto_reconnect: true,
i18n: "zh_CN",
view_mode: "fullscreen",
allow_non_roster_messaging: false,
show_desktop_notifications: true,
play_sounds: true
});
6.2 公共社区聊天站(开放注册)
适用:面向访客的公开社区,允许自助注册、自动发现端点:
converse.initialize({
websocket_url: "wss://im.example.com/xmpp-websocket",
authentication: "login",
allow_registration: true,
registration_domain: "example.com",
discover_connection_methods: true,
view_mode: "fullscreen",
i18n: "zh_CN",
auto_reconnect: true,
message_archiving: "im.example.com", // 服务端已启用 MAM
allow_message_corrections: "all",
send_chat_markers: ["received", "displayed"]
});
6.3 嵌入既有网站的客服/社区浮窗
适用:把聊天嵌入产品页右下角,一次只开一个会话、不打扰页面路由:
converse.initialize({
websocket_url: "wss://im.example.com/xmpp-websocket",
view_mode: "overlayed",
singleton: true,
allow_url_history_change: false, // 不动宿主页面地址栏
locked_domain: "example.com",
allow_registration: false,
hide_offline_users: true,
show_controlbox_by_default: false,
i18n: "zh_CN"
});
⚠️ 注意:三套模板都以 HTTPS 端点为前提——
wss://与页面 HTTPS 缺一不可,SCRAM 认证在非安全上下文会直接失败(见七、7.5)。
七、常见问题(FAQ)
7.1 改了配置但不生效
按序排查:① 配置必须在 converse.initialize() 调用之前定义完成——用外部 config.js 时确认它先于初始化内联脚本加载;② 若用静态服务器 7 天缓存策略托管了 .js(含 config.js),浏览器可能拿到旧缓存,硬刷新(Ctrl+F5)验证;③ 确认改的是实际被访问的页面文件。
7.2 登录时 TypeError: Failed to fetch,无法提交
discover_connection_methods 默认为 true,初始化或登录时会先请求 https://<JID域名>/.well-known/host-meta 做 XEP-0156 端点发现;JID 域名不可解析(内网域名、localhost)或该地址无 HTTPS 服务时请求失败并阻断登录。解决:显式配置 websocket_url 并置 discover_connection_methods: false。实测案例(含 WebSocket 握手 101 验证)见本专栏《Converse.js 嵌入集成使用指南》篇。
7.3 自定义插件的 initialize() 不执行
v14 实测:自定义插件名必须列入 whitelisted_plugins 才会被加载——
converse.plugins.add('myplugin', {
initialize() {
const api = this._converse.api; // v14 的 API 面从这里取
api.listen.on('connected', () => console.log('connected'));
}
});
converse.initialize({
websocket_url: "wss://im.example.com/xmpp-websocket",
whitelisted_plugins: ['myplugin']
});
另注意 v14 全局 converse 对象上没有 .api,API 只能在插件内部经 this._converse.api 获取。
7.4 表情面板空白、语言不切换,控制台 Failed to load emoji.json
异步资源按 assets_path(默认 /dist/)加载。把 dist 内容平铺到站点根会导致 /dist/emoji.json 404。保持 /dist/ 子路径部署,或显式设置 assets_path 为实际路径。语言包 chunk 同理(i18n: "zh_CN" 生效前提是语言 chunk 可加载)。
7.5 HTTP 站点登录直接失败
SCRAM 密码认证的密钥派生走浏览器 WebCrypto(crypto.subtle),该 API 只在安全上下文(HTTPS、localhost、127.0.0.1)可用。实测在非安全上下文登录报 Cannot read properties of undefined (reading 'deriveBits'),SASL 失败。生产必须全站 HTTPS(页面与 wss:// 端点);仅本机测试可临时用 http://localhost。
7.6 如何现场抓登录/收发日志
不重发版本即可提日志级别:地址栏追加 #converse?loglevel=debug 刷新(等价于 loglevel: 'debug'),Stanza 收发、SASL 流程会打进浏览器控制台;配合服务端日志(如 Prosody 的 Authenticated as ...)即可两端对照定位。
八、参考链接
- 官方配置项文档(本文 153 项来源):https://conversejs.org/docs/html/configuration.html
- 官方插件开发文档(
whitelisted_plugins/this._converse.api):https://conversejs.org/docs/html/plugin_development.html - XEP-0156 连接端点发现:https://xmpp.org/extensions/xep-0156.html
- XEP-0313 消息归档(MAM):https://xmpp.org/extensions/xep-0313.html
- XEP-0198 流管理:https://xmpp.org/extensions/xep-0198.html
本专栏其他篇目:《Converse.js 介绍与选型指南》、《Ubuntu 22.04 安装 Converse.js 14 指南》、《Converse.js Docker Compose 部署指南》、《Converse.js 嵌入集成使用指南》。