SIP协议消息

SIP协议消息

关于

SIP 协议指定在端点之间传送状态的消息。每条标准化消息都按下面列出的数字进行索引。

RFC 3261

单击此处展开目录

请求

  • 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>
 

 
posted @ 2024-02-25 17:20  孙同海  阅读(215)  评论(0编辑  收藏  举报