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

Asterisk拨号计划技术求助:实现通话接通后播报指定日期

解决Asterisk拨号计划播报指定日期的问题

嘿,我懂你现在的困扰——默认用SayUnixTime只能读当前时间,没法播报指定日期对吧?其实这个函数本身就藏着你要的功能,只是你可能没注意到它支持传入自定义的Unix时间戳!

下面给你一步步拆解解决方法:

第一步:把指定日期转成Unix时间戳

Unix时间戳是从1970年1月1日到目标日期的秒数,你可以用两种方式获取:

  • 用Linux命令行直接计算:比如要转2024年10月1日,执行 date -d "2024-10-01" +%s,会得到类似1727798400的数字
  • 用本地工具或离线时间戳转换工具计算(不用依赖外部网站)

第二步:在拨号计划里调用带自定义时间戳的SayUnixTime

默认情况下SayUnixTime会用当前时间,但你可以把第一步得到的时间戳作为第一个参数传进去,再通过格式字符串控制只播报日期部分(不报时分秒)。

举个实际的拨号计划例子:

[custom-call-announce]
exten => _X.,1,Answer()
; 替换这里的1727798400为你需要的指定日期的Unix时间戳
exten => _X.,n,SayUnixTime(1727798400,,ABdY)
; 格式符说明:A=星期全称,B=月份全称,d=两位日期,Y=四位年份
exten => _X.,n,Dial(SIP/${EXTEN},20)
exten => _X.,n,Hangup()

如果需要中文播报,记得在第二个参数指定语言(前提是你已经安装了中文语音包):

exten => _X.,n,SayUnixTime(1727798400,zh,ABdY)

进阶技巧:用变量灵活控制日期

如果不想硬编码时间戳,可以把时间戳存在变量里,甚至从数据库或配置文件读取,比如:

[custom-call-announce]
exten => _X.,1,Answer()
exten => _X.,n,Set(TARGET_DATE_TS=1727798400)
exten => _X.,n,SayUnixTime(${TARGET_DATE_TS},zh,ABdY)
exten => _X.,n,Dial(SIP/${EXTEN},20)
exten => _X.,n,Hangup()

注意事项

  • 确保你的Asterisk安装了对应语言的语音包,比如中文的asterisk-sounds-zh_CN-wav或asterisk-sounds-zh_CN-g729,不然会默认用英文播报
  • 格式符可以根据需求调整,比如只播报年月的话用BY,或者只播报日期用d

内容的提问来源于stack exchange,提问作者Ricardo Alberto Mercedes Garca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:48:53