SIP协议消息
关于
SIP 协议指定在端点之间传送状态的消息。每条标准化消息都按下面列出的数字进行索引。
单击此处展开目录
请求
- INVITE表示正在邀请用户加入会话。
- ACK确认客户端已收到对邀请消息的响应。
- BYE结束通话。
- 取消取消任何待处理的搜索。
- OPTIONS功能查询。
- REGISTER将标头字段中列出的地址注册到 SIP 服务器。
回应
1xx 信息性消息
- 100 Trying:表示主叫已发起请求,但尚未定位到被叫。
- 180 振铃:表示已找到被叫方并正在收到呼叫通知。
- 181 呼叫正在转移:表示被叫方已将呼叫重新路由至另一方。
- 182 已排队:表示被叫方当前不可用,已将呼叫放入队列。
- 183 会议进行中
2xx 成功响应
- 200 OK:表示请求已成功处理。
3xx 重定向响应
- 300 多项选择:表示该地址已解析到多个位置。
- 301 永久移动:表示用户在此位置不再可用,标头中应包含备用位置。
- 302 暂时移动:表示用户暂时不可用,应在标头中包含备用位置。
- 305 Use Proxy:该响应表明主叫方必须使用代理来联系被叫方。
- 380 呼叫不成功,但有替代服务可用。
4xx 请求失败响应
- 400 Bad Request:表示发送的请求无法被理解。
- 401 Unauthorized Request:表示该请求需要授权。
- 402 需要付款:表示需要付款才能完成呼叫。
- 403 Forbidden:表示服务器已收到请求,但不会提供服务。
- 404 Not Found:表示未找到服务器。
- 405 Method Not allowed:表示请求包含不允许的方法列表。
- 406 Not Accepted:表示请求无法被客户端处理。
- 407 需要代理验证:客户端必须首先使用代理验证自己的身份。
- 408 请求超时:服务器无法在给定超时之前生成响应。
- 409 Conflict:表示与资源的当前状态发生冲突。
- 410 Gone:资源在服务器上不再可用,并且未找到转发地址。
- 411 Length required:用户拒绝没有指定长度的请求。
- 412 请求实体太大:服务器拒绝处理请求,因为 URI 太长。
- 415 Unsupported Media:表示目标端点不支持正文格式。
- 420 Bad Extension:服务器无法理解所需标头中指示的协议扩展。
- 480 暂时不可用:表示已联系被叫方,但暂时不可用。
- 481 Call Leg Transaction does Not Exist:表示服务器忽略了 bye 或 cancel 的请求,因为没有匹配的 Invite 事务。
- 482 检测到循环:(另外,请求合并)服务器收到一个请求,该请求在路径中具有自身。
- 483 Too Many Hops:服务器收到的请求需要的跳数超过允许的跳数。
- 484 Incomplete Address:服务器收到地址不完整的请求。
- 485 Ambigously:服务器收到一个请求,其中被叫地址不明确。
- 486 Busy Here:已联系被叫方,但系统无法再接听任何呼叫。
- 487 请求终止:主叫方在使用 200 OK 建立对话之前取消了请求。
- 第488章 这里不行
- 489 不良事件:参见RFC3265
- * *491 请求待处理
- 493 无法解读
- 494 需要安全协议:参见RFC3329
5xx 服务器故障响应
- 500 服务器内部错误:服务器遇到意外错误,无法处理请求
- 501 Not Implemented:服务器不支持完成请求所需的功能。
- 502 错误网关:服务器收到上游无效请求。
- 503 服务不可用:服务器出现过载或维护问题。
- 504 网关超时:服务器没有收到其他服务器的及时响应。
- 505 Version Not Supported:服务器不支持请求中使用的 SIP 协议。
6xx 全局故障响应
- 600 Busy Everywhere:被叫方正忙,此时无法接听电话。
- 603 Decline:已联系被叫方,但不想参加呼叫。
- 604 不存在于任何地方:被叫方不存在于网络中的任何位置。
- 606 不可接受:被叫方因不可接受而拒绝了呼叫会话描述的某些部分。
示例:播放自定义错误消息
拨号方案示例
<action application="set" data="hangup_on_bridge=true"/>
<action application="set" data="continue_on_fail=true"/>
<action application="bridge" data="..."/>
<action application="lua" data="playerror.lua"/>
这将在桥接之后运行 lua 脚本,但前提是桥接失败。
在lua脚本中:
拿剧本
cause = session:getVariable("originate_disposition")
if (cause == "USER_BUSY") then
session:streamFile("ivr/ivr-user_busy.wav");
elseif (cause == "UNALLOCATED_NUMBER") then
session:streamFile("ivr/ivr-unallocated_number.wav");
elseif (cause == "NO_USER_RESPONSE" or cause=="NO_ANSWER") then
session:streamFile("ivr/ivr-no_user_response.wav");
else
session:streamFile("ivr/ivr-please_check_number_try_again.wav");
end
有关完整的原因列表,请参阅挂断_原因。
或者,您现在可以像这样使用transfer _ on _ failed
拨号方案示例传输_ on _失败
<action application="set" data="hangup_on_bridge=true"/>
<action application="set" data="continue_on_fail=true"/>
<action application="set" data="transfer_on_fail=UNALLOCATED_NUMBER auto_cause xml error"/>
<action application="bridge" data="A..."/>
<action application="bridge" data="B..."/>
然后在您的拨号方案中有一个“错误”上下文。
拨号方案上下文错误
<context name="error">
<extension name="UNALLOCATED_NUMBER" continue="true">
<condition field="${originate_disposition}" expression="UNALLOCATED_NUMBER" continue="false" break="on-true">
<action application="playback" data="/usr/local/freeswitch/sounds/NotInService.wav"/>
<action application="hangup" data="NORMAL_CLEARING"/>
</condition>
</extension>
</context>