Originate Using Asterisk Local Channels

Whenever you want to place a call between two extensions in the dialplan you have to use Local channels.


The OriginateAction that you use when placing calls through the Manager API requires a channel name for the first leg. Usually your application has no knowledge of the dialplan details, i.e. it does not know which channel is triggered by an extension (maybe it’s a SIP hardphone, an IAX device or a link to another Asterisk server). What you want to do is “place a call between number a and number b” and leave the rest to Asterisk.

Local channels act as a proxy to the real channels mapped to an extension. So to place a call from 1310 to 1299 your Originate looks like:

1
2
3
4
Channel: Local/1310@from-local
Context: from-local
Exten: 1310
Priority: 1

instead of

1
2
3
4
Channel: SIP/1310
Context: from-local
Exten: 1399
Priority: 1

There is an article about Local Channels at voip-info.org that covers the basics.

So that’s all very nice and looks straight forward. It becomes more interesting if you have a look at what happens under the hood:

A Local channel actually consists of two channels in Asterisk: Local/XXX,1 and Local/XXX,2. The Local/XXX,2 channel traverses the dialplan starting at the context and extension you provided. In our example this is the extension 1310 in from-local. If you watch the CLI or the events triggered you will see:

1
2
3
Set(_ALERT_INFO=<Bellcore-dr1>)
Macro(localexten|1310|SIP/1310)
Dial(SIP/1310|30|t)

This corresponds to the defintion of 1310 in my dialplan:

1
2
3
4
5
6
7
8
9
10
11
[from-local]
exten => 1310,1,Set(_ALERT_INFO=<Bellcore-dr1>)
exten => 1310,n,Macro(localexten,${EXTEN},SIP/${EXTEN})
 
[macro-localexten]
exten => s,1,Dial(${ARG2},30,t)
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s-NOANSWER,1,Voicemail(u${ARG1})
exten => s-NOANSWER,n,Hangup
exten => s-BUSY,1,Busy
exten => _s-.,1,Goto(s-NOANSWER,1)

The Dial command triggers an additional channel (SIP/1310). This is the actual channel that is proxied by the Local channel.

The other side of the Local channel, Local/XXX,1, is used for the desination. In our example this is the extension 1299 in from-local. You see similar events for this channel. The actual channel that is triggered for 1299 is an IAX channel to another Asterisk server: IAX2/iax_reucon_net-3.

Now we reach the point where we have four channels set up: The two sides of the Local channel and the two “real” channels SIP/1310 and IAX2/iax_reucon_net. Two channels are now longer needed and will vanish. Before this happens all data of the proxied channel is copied (masqueraded) to Local/XXX,1 so that Local/XXX,1 is renamed to SIP/1310. The “old” SIP/1310 channel is renamed to SIP/1310-0820f718<MASQ> and finally to Local/1310@from-local-1e71,1<ZOMBIE> before it is hung up. Local/XXX,2 is hung up without any renaming.


So in the end you have exactly what you would have expected: Two channels, SIP/1310 and IAX2/iax_reucon_net up and connected.

I have prepared a nice diagram that shows all these steps in detail and helps you understand what happens:

Asterisk-通道与桥接基础 引言: 通话离不开我们的生活,但通话究竟是如何建立的是我们很少去关注的。比如说,我们拨打中国移动的电话10086,一开始听到的是智能客服,我们根据提示音进行如何,选择自己想要的功能,如果我们想要联系人工客服则会输入0进行等待转接,即使接通之后,这个人工还可能会帮我们转接到另一个人工客服,这一系列的操作对拨号的我们来说都只是按键的操作,但想要知道其内部原理,是一个十分复杂的过程。我们以现在使用最多的通话系统Asterisk为例,具体讲述一下通话是如何建立与进行的。 一、关键概念: 1.1:通道(Channel 阅读详情

相关推荐

freeswitch对接WEBRTC的一个candidate问题

概述 近几年,WEBRTC的完善与成熟,使得网页上使用webrtc的应用越来越多。 Freeswitch是一个开源的软交换平台,可以直接支持webrtc的对接方式。 最近在测试fs和webrtc的对接中碰到一个问题。记录如下。 问题描述。 客户A,使用webrtc页面注册到fs,并发起呼叫到客户B。 A客户收到488 SIP响应码,结束呼叫。 环境 centos:CentOS release 7.0 (Final)或以上版本 freeswitch:v1.8.7 GCC:4...

求真得真的博客 2060

Asterisk originate的用途

Asterisk originate的用途 1,originate的用途是发起一个呼叫然后连接到指定的应用或上下文; 2,AMI里面的Originate动作让你可以通过TCP连接发送一个请求到Asterisk来发起一个呼叫,对于定制化应用来说,这是最常用的发起呼叫的方法. 这个例子首先让Asterisk呼叫到SIP/myphone,如果电话30秒内无人应答,就放弃呼叫。如果应答了,就连接

goautodial的专栏 3125

freeswitch报错 Reason: Q.850;cause=88;text=“INCOMPATIBLE_DESTINATION“

fs报错 Reason: Q.850;

宝安小雨 1418

Asterisk中实现回拔

在Asterisk1.6中似乎提供一个AMI指令实现回拔功能,就是通过指令让服务器分别拔打两个号码。  Asterisk.Api.Originate ori = new Asterisk.Api.Originate();                ori.Account = "30855";                ori.Channel = "SIP/100036";        ...

weixin_34090562的博客 154

Asterisk呼叫中心毕设:实时语音系统开发实战指南

Asterisk是一个开源的实时语音操作系统,本质是可编程的电信交换机内核,其核心涉及SIP协议栈、PBX状态机、音视频编解码与AMI事件驱动机制。理解其信令流(如INVITE/200 OK)、媒体流(RTP/RTCP)及Linux底层调度逻辑,是构建高可用VoIP系统的基础。该技术广泛应用于云通信、智能客服和统一通信(UC)平台,具备强工程实践性与安全纵深——如AMI认证加固、WebRTC兼容集成、通话质量MOS监控等。本文以计算机专业毕业设计为切入点,详解基于Asterisk的Web呼叫中心从环境搭建、

weixin_34408624的博客 392

Freeswitch外呼群呼接口

文档包含ivr外呼接口,不需要代码,根据freeswitch自己的接口mod_xml_rpc模块,外呼模式改为bgapi,就可以支持群呼了

FreeSWITCH安装后拨打第一个电话,[INFO] mod_dptools.c:3175 Originate Failed. Cause: INCOMPATIBLE_DESTINATION

FreeSWITCH安装后默认安装会建立20个内建用户 1000-1019,密码为1234, 域名设置为本机的IP 。 客户端填写用户名密码后可登录上(如果出现403 请关闭防火墙),但是应该无法拨通第一个电话。 systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewa...

行到水穷处,坐看云起时 6306

asterisk_phpagi简单开发第七版

asterisk_phpagi简单开发第七版, asterisk_phpagi 有兴趣的可以下载看看

Freeswitch挂断原因汇总

CAlL_REJECTED: 用户拒绝 USER_BUSY: 用户忙 NO_ANSWER: 用户无应答 NO_USER_RESPONSE: 用户无响应 NORMAL_TEMPORARY_FAILURE: 正常临时失败 TIMEOUT: 超时 NO_ROUTE_DESTINATION: 没有渠道 ORIGINATOR_CANCEL: 取消呼叫 NORMAL_CLEARING: 正常挂断 INCOMPATIBLE_DESTINATION:地址不兼容 UNALLOCATED_NUMBER...

wlg9527的博客 1万+

C++跨平台Word文档处理库DuckX实战指南:从原理到项目集成

在C++开发中,处理Office文档,尤其是Word文件,常因缺乏原生易用的库而面临挑战。Office Open XML(OOXML)作为.docx文件的基础标准,其本质是包含XML文件的ZIP压缩包。理解这一原理,开发者便能通过解析和操作XML来实现文档的读写。DuckX库正是基于此,为C++提供了轻量级的解决方案。它封装了底层的ZIP处理和XML解析,提供了简洁的面向对象API,其技术价值在于实现了跨平台、无外部依赖的Word文档自动化生成与处理。这尤其适用于服务器端、嵌入式环境或需要脱离Office软

weixin_33508411的博客 387

信号削峰CFR基础知识介绍(一)

接下来,将得到的峰值分成若干段,在每一段中,仅保留该段内所有峰值中幅度最大的峰值。为了减少不必要的带外泄露,削峰后的信号将通过一个低通滤波器,以减少对应于削峰后信号中尖锐拐角的高频信号。首先,它识别出高于由目标PAPR确定的阈值的峰值。在峰值加窗算法中,削峰是通过在峰值区域将原始信号与一个加窗函数相乘来实现的,如下图所示。其中,w(n) 是一种常见的加窗函数,如凯撒窗、高斯窗和汉明窗等,而 p(n) 是一个加权系数。如上图所示,削峰会导致削峰后的信号出现尖锐的拐角,从而引发不必要的带外辐射(ACP增加)。

weixin_49761275的博客 1549

Asterisk Manager api Originate的妙用

Originate Using Asterisk Local Channels Whenever you want to place a call between two extensions in the dialplan you have to use Local channels. The OriginateAction that you use when placing calls th...

shanghuzaixian的博客 343

WRF-BEM相关参数说明

本参数适用于WRF-BEM模拟武汉市气候。

m0_60013472的博客 1896

解决Freeswitch的INCOMPATIBLE_DESTINATION

通过启用 mod_opus 模块,您可以在 FreeSWITCH 中使用 Opus 编解码器进行语音通信,以获得高质量的音频传输和较低的延迟。它支持 Opus 的多种操作模式,包括宽带音频(48kHz采样率)、超宽带音频(32kHz采样率)和脉冲编码调制(8、16和32kHz采样率)。FreeSWITCH 的 mod_opus 是用于支持 Opus 音频编解码的模块。Opus 是一种开放的音频编解码器,广泛用于实时通信应用,如VoIP、视频会议、游戏音频等。

LCRxxoo的博客 2504

深度强化Q学习-基于微软AirSim仿真环境的自动驾驶案例(原理代码详解简易可行)

最近在学习《强化学习原理与Python实现》,肖智清著。参考第十二章的自动驾驶案例,写一篇总结,尽量做到简单可行,让有志于自动驾驶的小伙伴可以通过此篇博客可以管中窥豹,初步了解自动驾驶的强化学习训练过程。 本篇将自动驾驶问题转化为回合制的强化学习任务,设计以车辆观察图像和运行状态为输入的自动驾驶算法,并在AirSim仿真环境中进行训练和测试。本篇使用带经验回放和目标网络的基于深度Q网络算法设计并实现智能体,对经验回放、目标网络和深度Q学习算法进行简单介绍,并用代码实现。

shao918516的博客 8599

Python 爬虫实战:付费 IP 代理使用技巧与爬虫稳定性优化

付费IP代理实战指南:突破反爬与优化稳定性 本文系统讲解付费IP代理在爬虫项目中的高效应用方法。首先对比分析静态代理、动态代理和隧道代理的优缺点及适用场景,推荐高并发项目优先选择隧道代理。然后详细演示了主流代理服务商的集成方法,包括代理池的自动更新和健康检测机制。核心部分重点介绍了爬虫稳定性优化策略,如智能重试、频率控制和请求间隔优化等关键技术。最后通过压力测试验证优化效果,并提供成本控制方案,包括代理复用、错峰爬取等实用技巧。通过本教程,开发者可有效解决高并发爬虫中的IP封禁问题,显著提升系统稳定性和抗风

2503_91057718的博客 2449

Asterisk Originate 内部执行流程

<br />来自:http://blog.youkuaiyun.com/austingao/archive/2010/07/29/5774635.aspx

southflow的专栏 968

QcarCamera-EVS HAL实现(一)

高通车载EVS实现

qq_37057338的博客 2376

Local Channel

英文原址:http://www.voip-info.org/wiki/view/Asterisk+local+channels Local channel chan_local是一个伪造的channel。使用该channel将使呼叫回拨到拨号计划中的另外一个context。有助于实现递归的路由;同时它还能在呼叫结束后返回拨号计划。   语法   Local/extension@co...

Java企业应用 337

基于单片机的按键加1数码管显示(仿真+程序)5046

1、51+Proteus8.10;2、学习计数统计、数码管显示驱动;

理论结合实践,开启你的电子学习新方案! 1324

Unity 面试篇|(二)Unity基础篇 【全面总结 | 持续更新】

在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满足。一个程序在运行(执行)的过程中所需要的硬件和软件环境运行时的主要作用是提供程序运行所需要的环境和基础设施,通过为程序提供内存分配、线程管理、类型检查、对象实例化和垃圾回收等操作来支持程序的运行公共语言运行时(Common Language Runtime,CLR)是整个.NET框架的核心,它为.NET应用程序提供了一个托管的代码执行环境。

游戏开发小Y的博客 13万+

freeswitch jssip拨打linphone时候出现 INCOMPATIBLE_DESTINATION

通过查询 得知 INCOMPATIBLE_DESTINATION 大部分是编码导致的问题,已经在vars.xml 中设置了编码。采用晚期协商的方式处理编码 ,位置:sip_profiles/internal.xml。位置:sip_profiles/internal.xml。没有效果,最后发现是使用了代理媒体。修改代理媒体设置为 false。

tiaojiandan8332的博客 1747

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Asterisk local channels

  Asterisk local channels Local channel chan_local is a pseudo-channel. Use of this channel simply loops calls back into the dialplan in a different context. Useful for recursive routing; it ...

whatsyourname的专栏 351

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

asterisk 使用php脚本socket通过AMI端口实现自动打电话报警

最近花了些时间实现当服务器或应用服务出错进行打电话通知相关负责人,并告知那台主机什么服务出错了。应用的场合可以应用到安防、服务器或某应用服务运行是否正检测等任何你想用电话警报功能,如发生异常自动打电话通知你我的系统平台:1、一台装有NAGIOS进行判断相关设备和服务进行产生报警信息(待实现)2、一台装有ASTEISK IPPBX系统,事先录

Finder_Way 7519

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: Asterisk 1.8 chan_sip模块代码分析
下一篇: 对付 MYSQL 的死连接,SLEEP的进程的来源探究[转]
whatsyourname
博客等级 码龄23年 13粉丝 326原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值