SIP协议消息

随笔2个月前发布 黄河歌者
37 0 0

SIP协议消息

关于

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

RFC 3261

单击此处展开目录

要求
回应

1xx 信息性消息
2xx 成功响应
3xx 重定向响应
4xx 请求失败响应
5xx 服务器故障响应
6xx 全局故障响应

示例:播放自定义错误消息
也可以看看

请求

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>

 

 

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...