首页 > 其他分享 >SIP协议消息

SIP协议消息

时间:2024-02-25 17:22:37浏览次数:40  
标签:表示 协议 SIP 请求 被叫 响应 消息 ivr 服务器

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>
 

 

标签:表示,协议,SIP,请求,被叫,响应,消息,ivr,服务器
From: https://www.cnblogs.com/sunth/p/18032637

相关文章

  • 9.消息队列
    9.1消息队列的使用场景。 消息队列在分布式场景中广泛应用,主要用于解决异步处理、解耦服务、流量削峰、数据一致性等多个场景。异步处理:在电商应用中,用户注册后,可以将发送验证邮件或短信的任务放入消息队列,由后台服务异步处理,这样主线业务逻辑(如保存用户信息)不会因为......
  • python基础学习8-网络协议、进程与线程
    UDP协议用户数据包协议socketbind()sendall()recvfrom()sendto()close()TCP服务器端流程:使用socket类创建一个套接字对象使用bind((ip,port))方法绑定ip地址和端口号使用listen()方法开始TCP监听使用accept()方法等待客户端的连接使用recv()/send()方法接受发送......
  • Kafka消息生产消费的过程
    生产消息流程:创建Topic首先,需要创建一个或多个Topic,它们是消息的存储单元。Topic定义了消息的类别。配置生产者在生产者端,需要配置生产者客户端,指定要连接的Kafka集群的地址和相关配置,比如序列化方式、消息发送确认策略等。生产消息:生产者将消息发送到指定的Topic。生......
  • HTTP 消息结构
    HTTP消息结构HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。一个HTTP"服务器"同样也是一个应用程......
  • C# Winform 为控件添加鼠标悬浮时的提示消息
    https://www.cnblogs.com/whr2071/p/16453901.html 学习自C#鼠标悬浮时,提示信息_20180509很简单也很详细,可直接查看原贴。发在这里主要是记录一下,方便我自己查找。绑定你想要在其上悬浮显示的控件的鼠标悬浮事件在其中创建ToolTip,设置属性,并绑定到该控件---以下就是链接......
  • 详解MQ消息队列及四大主流MQ的优缺点
    前言近期有了想跳槽的打算,所以自己想巩固一下自己的技术,想了解一些面试比较容易加分的项,近期准备深入研究一下Redis和MQ这两样,这总体上都是为了解决服务器并发的原因,刚翻到了一篇有关于MQ的,觉得写得特别好,特此记录一下,也算是为了加深自己的印象。面试题切入1、为什么要使用MQ......
  • 得物面试:Kafka消息0丢失,如何实现?
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • 引入JavaScript自定义提示信息(账户密码不为空,必须勾选用户协议)
     当不输入用户或密码就登录时不勾选用户协议就登录时form表单的修改,引入了onsubmit控件,提交表单时,调用validateForm函数<formaction="/home"method="post"onsubmit="returnvalidateForm()">validateForm函数内容functionvalidateForm(){//验证用户名和密......
  • MQTT协议及其使用案例
    MQTT概述MQTT是基于TCP/IP协议栈构建的异步通信消息协议,是一种轻量级的发布、订阅信息传输协议。可以在不可靠的网络环境中进行扩展,适用于设备硬件存储空间或网络带宽有限的场景。使用MQTT协议,消息发送者与接收者不受时间和空间的限制。Docker部署MQTT(采用docker-compose.y......
  • RabbitMq的实践中解决过消息丢失、消息幂等性、消息顺序消费、消息延迟消费等问题;
    1、RabbitMq如何实现消息延迟消费?1.1、延时插件答:延时插件rabbitmq_delayed_message_exchange,下载好之后放到对应plugins目录下,然后启用插件声明交换器类型为x-delayed-message来标示此交换机为延时交换机,发送消息时在header中添加x-delay参数来控制消息的延时时间......