You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何将动态URL变量转为短信中的可点击链接?

问题解决:动态生成URL无法在短信中显示为可点击链接

问题分析

动态拼接的url_sale仅显示纯文本,但静态HTTPS URL能正常识别为可点击链接,核心原因大概率是动态URL的格式不符合短信系统的链接识别规则,常见场景包括:

  • base_url未包含完整的http://或https://协议头,导致生成的URL以域名/IP开头,无法被识别为有效链接
  • 多行字符串中URL周围的缩进空白字符干扰了链接识别
  • 部分短信服务对URL解析有严格格式要求,纯文本URL需满足规范才能被转换

解决方案

1. 确保base_url包含完整协议头

先检查Odoo配置项web.base.url是否带有协议头,若没有则手动补充:

base_url = self.env['ir.config_parameter'].get_param('web.base.url')
# 自动补全协议头,优先使用HTTPS
if not base_url.startswith(('http://', 'https://')):
    base_url = f'https://{base_url}'
# 使用f-string更简洁地拼接参数
url_sale = f"{base_url}/web#id={record.id}&view_type=form&model={record._name}"

2. 移除URL周围的空白字符

你的多行message字符串中,{url_sale}被大量缩进空格包裹,可能导致URL无法被正确识别。可以去除多余缩进或使用strip()清理:

vals = {'mobile': employee.mobile_phone,  # 注意原代码中`empoyee`拼写错误,已修正
        'message_type': 'message',
        'message': f"""Quotation approval request

Hello Approvers,

Quotation approval {record.name} has been raised by {record.user_id.name}.

Please review and approve or reject (with reason given) this quotation.

{url_sale.strip()}
"""
}

3. 手动使用短信支持的链接格式(若服务兼容)

如果你的短信网关支持Markdown格式,可以将URL包装为标准链接形式:

message = f"""Quotation approval request

Hello Approvers,

Quotation approval {record.name} has been raised by {record.user_id.name}.

Please review and approve or reject (with reason given) this quotation.

[查看报价单]({url_sale})
"""

注意:需先确认短信服务是否支持Markdown语法,不兼容的话会显示原始Markdown文本。

4. 验证生成的URL有效性

打印url_sale确认格式正确,示例有效输出:

print(url_sale)
# 输出:https://your-odoo-domain.com/web#id=123&view_type=form&model=sale.order

检查是否存在参数拼接错误、特殊字符未转义等问题。

额外提示

原代码中empoyee拼写错误,修正为employee可避免运行时报错。

内容的提问来源于stack exchange,提问作者Sidharth Panda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 14:54:26