fs_ext01 originate

阅读说明

  笔记根据freeswitch官方文档和FreeSWITCH权威指南简单介绍originate的基本用法,最后概述下自己的阅读测试结论

originate 概述

-Originate a new call.

Usage

  originate <call_url> <exten>|&<application_name>(<app_args>) [<dialplan>] [<context>] [<cid_name>] [<cid_num>] [<timeout_sec>]

  尖括号中是必选参数,方括号中是可选参数

 

  FreeSWITCH will originate a call to <call_url> as Leg A. If that leg supervises within 60 seconds FS will continue by searching for an extension definition in the specified dialplan for <exten> or else  execute the application that follows the & along with its arguments.

  使用<call_url> (即呼叫字符串)作为A腿,如果60s超时后执行call_url后的<exten> dialplan或执行&后的APP。

  supervises within 60 seconds 这里如果将supervises翻译为监督感觉怪怪的,我到FreeSWITCH mod_commands中看了下源码,在originate中调用了switch_ivr_originate接口,其中入参timelimit_sec 默认值为60 seconds,如果该函数在60s内执行成功,则后续会执行 <exten> 拨号计划或者 &后的APP。那么如何判断是执行<exten>还是&APP呢?源码中有一句话

    if (*exten == '&' && *(exten + 1))

  即如果 <call_url> 后面是 & 符号,且&后的<application_name>字符长度不为0,则执行APP,如果不是&符号,就执行<exten>的dialplan

 

originate 用法

  originate是FreeSWITCH开发和测试中最常用的命令之一,在FreeSWITCH权威指南 10.4节详细讲述了该命令的用法及实例,有条件的可以到书中详细阅读用法及操作说明,这里仅根据我个人的阅读理解做几点笔记。

1. 更改主叫号码

  FreeSWITCH中如果没有指定主叫号码,默认的主叫号码是0000000000。如使用下面命令,可以测试

    originate user/1001 &echo

 

 

 

  这里测试首先需要将软电话注册到FS,然后再fs_cli上输入上面命令即可,其中1001是自己注册的号码,如果自己注册号码为1000,改一下就行了。

  

  那么如何能把0000000000主叫号码改为自己需要的号码呢?可以使用下面命令:

    originate user/1001 &echo XML default 'CPP MUGGLE' 100000 

 

  上面的命令是什么意思呢?回过头来再看originate用法

    originate <call_url> <exten>|&<application_name>(<app_args>) [<dialplan>] [<context>] [<cid_name>] [<cid_num>] [<timeout_sec>]

  其中 user/1001  是呼叫字符串,call_url

    &echo 为APP

    XML 为dialplan

    default 为context

    'CPP MUGGLE' 为cid_name

    100000 为cid_num

 

2. 处理呼叫超时

  上面命令再加一个秒数即可处理呼叫超时,如

    originate user/1001 &echo XML default 'CPP MUGGLE' 100000 15

  该命令增加了一个超时时间为15秒,其中对于呼叫超时时间,再权威指南上给出了详细的解释:

    最后一个参数是超时的秒数。指的注意的是,它并不是对方不接电话的秒数,而是对方再收到我们INVITE消息后,不回复100 Trying消息的时间。一般来说这种情况是IP地址不可达。

  其中默认的timeout_sec 为60秒

 

 

 

 

3. 防止命令阻塞

  originate 命令是阻塞的,如果使用该命令,则无法输入其他命令或取消该呼叫。如果要使用非阻塞方式执行API,可以使用bgapi

  如 bgapi originate...

 

posted @   cpp-muggle  阅读(217)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示