asterisk_phpagi简单开发第六版

合集下载

Asterisk CLI 命令列表

Asterisk CLI 命令列表

以下的命令是在CLI控制台上用help命令列出的集合:!: 执行一个shell command用法:!<command>说明:执行一个shell命令abort halt: 取消一个暂停用法:abort shutdown说明:让Asterisk放弃一个正在执行的shutdown或者restart,正常继续运行呼叫操作add extension: 增加新的extension到context用法:add extension <exten>,<priority>,<app>,<app-data> into <context> [replace]说明:这个命令会增加一个新的extension到<context>。

如果已经有了同样的priority的extension‘,最后的replace’参数可以替代这个extension例子:add extension 6123,1,Dial,IAX/216.207.245.56/6123 into local现在,你可以拨打6123,并且和Markster交谈了。

add ignorepat:增加新的匹配模式用法:add ignorepat <pattern> into <context>说明:这个命令增加一个新的匹配模式到context <context>例子:add ignorepat _3XX into localadd queue member: 向指定的队列增加一个通道用法:add queue member <channel> to <queue> [penalty <penalty>]说明:向一个队列增加一个通道成员,[penalty <penalty>]指明这个通道成员的优先级ael debug contexts:启用AEL contexts调试ael debug macros:启用AEL macros调试ael debug read:启用AEL read调试ael debug tokens:启用AEL tokens调试ael no debug:关闭AEL调试信息ael reload:重载AEL配置agent logoff:让一个座席离线用法:agent logoff <channel> [soft]说明:让一个座席不在登录进来,如果指定了soft选项,不会强行挂机退出通话agi debug:启用AGI调试用法:agi debug说明:启用为调试目的而将AGI传输的内容输出agi no debug:关闭AGI调试用法:agi no debug说明:关闭为调试目的而将AGI传输的内容输出到控制台cb mysql status:显示CBMySQL的连接状态信息用法:cb mysql status说明:列出当前CBMySQL的mysql连接状态结果例子:Connected to conference@localhost, port 3306 with username mvb2000user for 6 days, 10 hours, 11 minutes, 40 seconds.Wrote 0 records since last restart.cdr mysql status:显示cdr_mysql的连接状态信息用法:cdr mysql status说明:显示cdr_mysql的当前连接状态例子:Connected to mvb2000cdrdb@localhost, port 3306 using table cdr for 6 days, 10 hours, 14 minutes, 46 seconds.Wrote 7 records since last restart.cdr status:Display the CDR status用法:cdr status说明:显示通话详细记录引擎的系统状态例子:CDR logging: enabledCDR mode: simpleCDR registered backend: csvCDR registered backend: mysqlCDR registered backend: cdr_managerdatabase del:删除数据库的key/value用法:database del <family> <key>说明:删除Asterisk数据库中指定的family和key的记录database deltree: Removes database keytree/values用法:database deltree <family> [keytree]说明:在Asterisk数据库中删除一个family或者指定的在family中的keytreedatabase get: Gets database value用法:database get <family> <key>说明:在Asterisk数据库中为指定的family和key检索记录database put: Adds/updates database value用法:database put <family> <key> <value>说明:在asterisk数据库中以指定的famliy、key、value新增或者修改一个记录database show显示数据库内容用法:database show [family [keytree]]说明:显示Asterisk数据库的内容,可选的关联一个指定的family或者family和keytreedatabase showkey显示数据库内容用法:database showkey <keytree>说明:显示Asterisk数据库内容,关联到指定的keydebug channel:启用在一个通道上的调试信息用法:debug channel <channel>说明:在指定的通道上打开调试信息debug level:设置全局调试信息的等级用法:debug level <level> [filename]说明:设置调试为指定的等级(0为关闭调试)。

tp6开发手册

tp6开发手册

tp6开发手册TP6(ThinkPHP 6)是一款流行的PHP开发框架,它可以帮助开发者快速构建Web应用程序。

为了更好地使用TP6,了解其开发手册是非常必要的。

首先,TP6的开发手册应该包含以下内容:1.概述:介绍TP6的背景、特点、适用场景以及与其他框架的对比。

让读者对TP6有一个大致的了解。

2.环境准备:详细介绍开发TP6应用程序所需的软件和工具,如PHP、Composer等,并提供安装和配置指南。

3.快速入门:提供创建TP6应用程序的基本步骤,如创建项目、路由定义、控制器等。

通过一个简单的示例,让读者快速入门。

4.核心概念:介绍TP6中的核心概念,如模型、视图、控制器、数据库等。

通过这些概念的介绍,帮助读者更好地理解TP6的开发思路。

5.数据库操作:详细介绍如何在TP6中进行数据库操作,包括数据库迁移、模型定义、查询构建等。

这部分内容对于进行数据交互的应用程序非常重要。

6.路由与URL:介绍TP6的路由机制以及如何生成动态URL。

让读者了解如何通过路由规则将URL映射到相应的控制器和方法。

7.控制器与视图:介绍如何在控制器中处理请求并返回响应,以及如何创建和渲染视图模板。

同时,介绍如何在视图中使用TP6提供的模板引擎和标签库。

8.插件与模块:介绍如何使用TP6的插件机制来扩展应用程序的功能,以及如何创建和管理自定义模块。

9.安全与验证:提供关于在TP6应用程序中实施安全措施的建议,如防止SQL注入、XSS攻击等。

同时,介绍如何在表单数据中进行验证。

10.性能优化:介绍如何优化TP6应用程序的性能,包括缓存机制、查询优化等。

帮助开发者提高应用程序的运行效率。

11.部署与上线:提供将TP6应用程序部署到生产环境的指南,包括服务器配置、环境变量设置等。

12.常见问题与解决方案:汇总开发过程中可能遇到的问题,并提供相应的解决方案和代码示例。

以上是TP6开发手册的大致内容,可以根据实际需要进行增删改。

基于Asterisk的VoIP开发指南--Asterisk AGI程序编写指南

基于Asterisk的VoIP开发指南--Asterisk AGI程序编写指南

基于Asterisk的VoIP开发指南——(1)实现基本呼叫功能2008/06/12说明:1.本文档探讨基于Asterisk如何实现VoIP的一些基本功能,包括基本呼叫功能的方案选取、主叫号码透传、如何编写Asterisk AGI程序、Radius认证计费模块等。

2.本文档VoIP软终端使用X-Lite,其它终端均可以接入测试。

3.文章内容仅供参考,转载请注明出处。

1 VoIP系统相关协议和标准由于I P电话技术标准的开发涉及多个领域,因此,VOIP系统要想实现这些IP 电话之间的通信,则必须提供支持这些协议的实现。

目前主要涉及的协议如图1-1所示,其中除了HTTP是与WWW相关的协议外,其它的都是VOIP相关协议。

图1-1 所有基于IP协议的协议族由图1 -1可以看出,与VOIP相关的协议共分五层,每一层又由许多协议组成。

目前有关IP电话制定的标准体现在应用层。

而应用层又可分为信令控制协议、网关控制协议、媒体编码和传输协议和QOS协议等。

1.信令控制协议,目前被广泛接受的IP电话控制信令体系主要有ITU-T的H.323系列和IETF的会话初始化协议(SIP)。

2.网关控制协议,网关控制协议主要有媒体网关控制协议(MGCP)。

该协议是为了解决目前IP电话负担过重,不能满足未来容量和业务扩展的要求而设计的。

3.媒体编码,媒体编码主要有两类——视频编码和音频编码。

视频编码主要有H.261和H.263。

音频编码主要有G. 7xx系列。

4.实时传输协,实时传输协议有包括了实时传输协议(RTP)、实时传输控制协议(RTCP)、实时流协议(RTSP)和资源预留协议(RSVP)。

相关的协议标准可以参考相应的网上资料,在这不细述。

2 Asterisk简介Asterisk是一个开源的软件包,它可以运行PBX的所有功能,通常运行在Linux 操作系统平台上。

它不仅包含了PBX的功能,同时还有其它一些附加特性。

Asterisk 可以用三种协议来实现VoIP,同时可以与目前电话使用的标准硬件进行交互通信。

tp6开发手册

tp6开发手册

tp6开发手册摘要:一、TP6开发手册简介二、TP6核心功能与特性1.数据库操作2.模板引擎3.缓存机制4.安全策略5.登录认证6.权限控制7.插件扩展三、TP6实战案例解析1.搭建博客系统2.电商平台实战3.社交平台实战四、TP6高级技巧与优化1.代码规范与架构优化2.数据库优化3.模板引擎优化4.缓存优化5.性能测试与优化五、TP6常见问题与解决方案六、TP6开发资源与社区推荐正文:一、TP6开发手册简介TP6(ThinkPHP 6.0)是一款国产的高效、简洁、灵活、开源的Web开发框架,基于PHP语言开发。

TP6继承了前几个版本的优点,同时在性能、安全性、功能特性等方面进行了大量优化和改进。

本开发手册旨在为广大开发者提供一个全面、详细的TP6学习指南。

二、TP6核心功能与特性1.数据库操作TP6对数据库操作进行了高度抽象,支持多种数据库(如MySQL、PostgreSQL、SQLite等),并提供了一套简洁、易用的操作API。

2.模板引擎TP6采用了最新的PHP模板引擎,支持变量、循环、条件判断等基本语法,让开发者能够轻松编写可复用的模板。

3.缓存机制TP6内置了多种缓存方式,如文件缓存、Redis缓存等,帮助开发者提高系统性能。

4.安全策略TP6从源头把控安全,对输入进行严格过滤和验证,防止SQL注入、XSS 攻击等安全隐患。

5.登录认证TP6提供了统一的登录认证接口,支持多种登录方式(如账号、邮箱、微信等),并可自定义登录逻辑。

6.权限控制TP6内置了权限控制功能,可对用户进行分组管理,实现对不同权限的用户分配不同权限资源。

7.插件扩展TP6具有良好的插件扩展性,开发者可通过编写插件实现各种功能,如广告插件、统计插件等。

三、TP6实战案例解析1.搭建博客系统本案例将演示如何使用TP6快速搭建一个简单博客系统,包括文章列表、文章详情、评论等功能。

2.电商平台实战本案例将演示如何使用TP6搭建一个简易电商平台,包括商品列表、商品详情、购物车、订单等功能。

Asterisk 入门一 --- Asterisk 1.6.2.6 安装

Asterisk 入门一 --- Asterisk 1.6.2.6 安装

Asterisk 入门一 --- Asterisk 1.6.2.6 安装2010-04-28 16:27其实asterisk安装灰常简单只要跟着安装包中的readme 文档一步一步走就可以了:1.安装测试环境虚拟机:Sun VirtualBox 3.1X操作系统:CentOS 52.Astrisk各稳定版本以及附加工具/downloads改页面有很多下载选项大概的介绍一下1.AsteriskAsterisk 源码压缩包,这就是我们要用的2.AsteriskNOWAsteriskNOW 是一个光盘镜像包含了linux 系统,一旦安装完成就有一套简单的PBX 系统了3.Asterisk Add-OnsAsterisk Add-Ons 是Asterisk 和Asterisk 一些相关的驱动和组件等。

3.下载安装# wget/pub/telephony/asterisk/releases/asteris k-1.6.2.6.tar.gz#tar -zxvf asterisk-1.6.2.6.tar.gz# cd asterisk-1.6.2.6运行配置脚本检测依赖关系并设置安装目录# ./configure --prefix=/usr/local/asterisk看到硕大的星号了嘛哈哈配置成功.$$$$$$$$$$$$$$$=...$7$7.. .7$$7:..$$:. ,$7.7.$7. 7$$$$ .$$77..$$. $$$$$ .$$$7..7$ .?. $$$$$ .?. 7$$$.$.$. .$$$7. $$$$7 .7$$$. .$$$..777. .$$$$$$77$$$77$$$$$7. $$$,$$$~ .7$$$$$$$$$$$$$7. .$$$..$$7 .7$$$$$$$7: ?$$$.$$$ ?7$$$$$$$$$$I .$$$7$$$ .7$$$$$$$$$$$$$$$$ :$$$.$$$ $$$$$$7$$$$$$$$$$$$ .$$$.$$$ $$$ 7$$$7 .$$$ .$$$.$$$$ $$$$7 .$$$.7$$$7 7$$$$ 7$$$$$$$$ $$$$$$$7. $$ (TM)$$$$$$$. .7$$$$$$ $$$$$$$$$$$$$$7$$$$$$$$$.$$$$$$ $$$$$$$$$$$$$$$$.该步骤可选,该步骤用于选择一些模块#make menuselect编译安装#make#make install安装一些简单的配置文件#make samples好了现在都安装结束了--------------------------------------------------------------------------------------------启动守护进程# safe_asterisk进入CLI#asteriks -r更多的命令可以使用 #man asterisk查看按q退出Asterisk 入门二 --- Asterisk 配置以及控制台命令2010-04-28 16:52接下来我们开始学习asterisk先提供个学习的教材和网址大部分的问题可以在/中找到解答其次提供一本 Asterisk 入门教程叫Asterisk,电话未来之路第二书签版.pdf自个摆渡下吧-------------------------------------------------------------------------------------Asterisk 几个相关目录配置文件/usr/local/asterisk/etc/asterisk可执行文件目录 /usr/local/asterisk/sbin先启动asterisk守护进程#safe_asterisk进入控制台#asterisk -rAsterisk 1.6.2.6, Copyright (C) 1999 - 2010 Digium, Inc. and others.Created by Mark Spencer <markster@>Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details. This is free software, with components licensed under the GNU General PublicLicense version 2 and other licenses; you are welcome to redistribute it under certain conditions. Type 'core show license' for details.=========================================================================Connected to Asterisk 1.6.2.6 currently running on localhost (pid = 18023)Verbosity is at least 3localhost*CLI>看看有啥命令>core show help或者具体的命令帮助>core show help <command>Asterisk app命令中文翻译2008-11-06 15:15常规指令Authenticate:鉴别用户VMAuthenticate:根据“voicemail.conf”鉴别用户Curl:接受外接URLs的修复。

PHP从入门到精通(第6版)

PHP从入门到精通(第6版)

2.1 在Windows下使用WampServer 2.2 在Linux下搭建PHP开发环境 2.3 PHP常用开发工具 2.4 第一个PHP实例 2.5 实践与练习
3.1 PHP的标记风格 3.2 PHP注释的应用 3.3 PHP的数据类型 3.4 PHP常量 3.5 PHP变量 3.6 PHP运算符 3.7 PHP表达式 3.8 PHP函数 3.9 PHP编码规范
17.1 认识phpMyAdmin 17.2 phpMyAdmin的使用 17.3 实践与练习
18.1 PHP操作MySQL数据库的方法 18.2 管理MySQL数据库中的数据 18.3 实践与练习
19.1 什么是PDO 19.2 PDO连接数据库 19.3 PDO中执行SQL语句 19.4 PDO中获取结果集 19.5 PDO中捕获SQL语句中的错误 19.6 PDO错误处理 19.7 PDO事务处理 19.8 PDO存储过程 19.9 实践与练习
25.1 项目设计思路 25.2 系统开发必备 25.3 数据库设计 25.4 前台模块设计 25.5 后台模块设计
作者介绍
明日科技(中国)有限公司为知名企业家温世仁先生创办的大型高科技企业。
读书笔记
这是《PHP从入门到精通(第6版)》的读书笔记模板,可以替换为自己的心得。
精彩摘录
这是《PHP从入门到精通(第6版)》的读书笔记模板,可以替换为自己的精彩内容摘录。
22.1 XML概述 22.2 XML语法 22.3 在PHP中创建XML文档 22.4 SimpleXML类库 22.5 动态创建XML文档 22.6 实践与练习
23.1 Ajax概述 23.2 Ajax使用的技术 23.3 Ajax开发需要注意的几个问题 23.4 PHP中Ajax技术的典型应用 23.5 实践与练习

asterisk模块编写

asterisk模块编写
让我们继续进行同时包含使用 Asteisk 日志模块接口,用于显示 Asterisk 日志信息,显
示日志信息也是本模块所要做的事情。 #include "asterisk/logger.h"
现在包含每个 Asterisk 模块必须的使用的两个函数,load_module()和 unload_module().
通过 CLI 命令可以自己卸载、加载你的模块,可以观测到日志信息。 *CLI> module unload res_helloworld.so
[Jun 19 10:50:57] NOTICE[26612]: res_helloworld.c:35 unload_module: Goodbye World! *CLI> module load res_helloworld.so
Asterisk1.6 的,为 Asterisk1.4 编写模块几乎一样。创建的文件名为 res_helloworld.c,存放在
Asterisk 的源代码树/res 目录下。
首先每个 Asterisk 模块都包含主要的 Asterisk 头文件,asterisk.h #include "asterisk.h“
ast_cdr_register("HelloWorld", "Hello World CDR Handler", cdr_helloworld); 在 unload_module() 中,需要对刚刚添加的应用注销。
ast_cdr_unregister("HelloWorld");
编译安装后,运行 Asterisk ,可以去确认你的新 CDR 应用是否被注册到了 Asterisk
这个功能。 复制代码 static char *handle_cli_echo(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) {

asterisk_phpagi简单开发第七版.

asterisk_phpagi简单开发第七版.

Asterisk phpagi开发入门第六版已经是一个初步完整的版本了,这一版,基本上算是第一阶段的收官之版了。

对于之前的录音问题,本人再次表示歉意。

本人水平有限,难免会有写的不周到或错误的地方, 欢迎指正。

首先拨号规则[ext-state]exten=> _XXXX,hint,SIP/${EXTEN}------------------------------------------------------没有变化重申一下 asterisk1.8的话,需要在 sip.conf 文件里需要改一个地方找到 ;callcounter=yes把前面的注释去掉好像有两处,随便某一处好像都可以context 我也做了一些优化和更新,请童鞋们注意[from-ivr-agi-transfer]exten => _XXXX,1,Dial(SIP/${EXTEN}exten => _XXXX,n,NoOp( Dial Status: ${DIALSTATUS}exten => _XXXX,n,Goto(s-${DIALSTATUS},1exten => s-NOANSWER,1,Goto(from-ivr-wait-hangup,w,1exten => s-CONGESTION,1,Goto(from-ivr-wait-hangup,w,1exten => s-CANCEL,1,Goto(from-ivr-wait-hangup,w,1exten => s-BUSY,1,Goto(from-ivr-wait-hangup,w,1exten => s-CHANUNAVAIL,1,Goto(from-ivr-wait-hangup,w,1-----------------------------------------------有变化了,这里主要解决了一个问题就是说在处理等待的 AGI 守护进程中再重定向之前,我会去判断一下被转移的目的分机是否状态正常正常则转移,不正常就继续等待,之前的 context 虽然实现了正常重定向转移但是对于 asterisk 的分机状态的获取很不稳定,也许判断的时候是正常的但是执行 AMI 指令开始重定向的时候分机是不正常的,导致来电会被挂掉这段新的 context 就是处理那种情况,让其继续等待,直到被转移成功或者时间到了挂掉,或者来电自己挂断[from-ivr-wait-hangup]exten => w,1,Playback(waitexten =>w,n,Playback(wait_mexten =>w,n,Hangup(exten => r,1,Playback(hungupexten =>r,n,Hangup([from-ivr-agi]exten => _66687XXX,1,Answer(exten => _66687XXX,n,Set(CHANNEL(language=cnexten => _66687XXX,n,Goto(from-ivr-agi,s,1exten => s,1,Background(companyexten =>s,n,Background(wait_mexten =>s,n,Hangup(exten =>_Z,1,AGI(script_mv_agi.php,${EXTEN},${CALLERID(num},${CHANNEL},0 exten => _Z,n,Hangup(include => from-ivr-wait-hangup-------------------------------------------------------注意exten =>_Z,1,AGI(script_mv_agi.php,${EXTEN},${CALLERID(num},${CHANNEL},0 最后一个参数表示多级分组的 ID 的字符串[two-from-ivr-agi]exten => s,1,Background(${IVR}exten =>s,n,Background(upexten =>s,n,Background(wait_mexten =>s,n,Hangup(exten =>_Z,1,AGI(script_mv_agi.php,${EXTEN},${CALLERID(num},${CHANNEL},${TEAM PATH} exten => _Z,n,Hangup(exten => *,1,Goto(from-ivr-agi,s,1exten => *,n,Hangup(include => from-ivr-wait-hangup----------------------------------------------------------exten =>_Z,1,AGI(script_mv_agi.php,${EXTEN},${CALLERID(num},${CHANNEL},${TEAM PATH} 最后一个参数表示多级分组的 ID 的字符串,这个是在 AGI 脚本里传过来的,下面我会说明 *号键返回上一级[three-from-ivr-agi]exten => s,1,Background(${IVR}exten =>s,n,Background(upexten =>s,n,Background(wait_mexten =>s,n,Hangup(exten =>_Z,1,AGI(script_mv_agi.php,${EXTEN},${CALLERID(num},${CHANNEL},${TEAM PATH} exten => _Z,n,Hangup(exten =>*,1,AGI(script_mv_agi.php,${EXTEN},${CALLERID(num},${CHANNEL},${TEAMP ATH} exten => *,n,Hangup(include => from-ivr-wait-hangup-------------------------------------------------------------------------这个是第三级目前是最后一级,当然是直接呼叫了*号键返回上一级 , 已经实现, AGI 脚本里会说明这个地方理论上可以支持无限分组了关键的exten =>_Z,1,AGI(script_mv_agi.php,${EXTEN},${CALLERID(num},${CHANNEL},${TEAM PATH} 和exten =>*,1,AGI(script_mv_agi.php,${EXTEN},${CALLERID(num},${CHANNEL},${TEAMP ATH} 这两段是不需要变的,这个也是核心,所以我说理论上原来的 test.php 我已经改名了 :script_mv_agi.php内容又变了#!/usr/bin/php -qanswer(;if($string{$res = explode('|',$string;$context = $res[4]; //当前所在的 contextif($res[0]==3{$agi->set_variable('IVR',$res[3];//这个就是对应分组播放的 IVR$team_path = $res[5];$agi->set_variable('TEAMPATH',$team_path;//这个就是当前分组的各级父分组的 ID 字符串$agi->exec_goto("$context,s,1";//注意 asterisk 1.8 这个地方是逗号。

用 Visual Basic6.0开发标准CGI程序

用 Visual Basic6.0开发标准CGI程序

用 Visual Basic6.0开发标准CGI程序
黄东军;孙薇嘉
【期刊名称】《微型电脑应用》
【年(卷),期】2000(016)009
【摘要】本文概述了CGI程序的工作原理,环境变量和标准输入标准输出的作用,详细给出了在WINDOWS9X/NT环境下开发CGI程序的平台构建,并通过一个实例程序解释了利用VB6.0中文版编写CGI程序的具体步骤.
【总页数】3页(P5-7)
【作者】黄东军;孙薇嘉
【作者单位】中南大学信息工程学院,长沙,410083;中南大学,长沙,410083
【正文语种】中文
【中图分类】TP3
【相关文献】
1.基于Visual Basic6.0的锅炉管道传热计算程序开发 [J], 席金菊;王群
2.用Visual Basic6.0为Authorware开发ActiveX控件 [J], 赵明友;;
3.用Visual Basic6.0开发电机转轴设计辅助程序 [J], 黄松海
4.Visual Basic6.0开发儿童影楼管理系统初探 [J], 武帅
5.基于Visual Basic
6.0开发的《倒闸操作危险点预控管理系统》 [J], 李智
因版权原因,仅展示原文概要,查看原文内容请购买。

Asterisk-相关知识与应用

Asterisk-相关知识与应用

DialPlan (拨号方案)
dial : 它是Asterisk 很有价值的一功能,当来电者使用不同的通信方式时,它可以进行转换并进 行呼叫连接,如SIP电话到PSTN呼叫
Contexts : 拨号方案(DialPlan)进入部分我我们称为Contexts,每个Contexts 有一些extensions(扩展)构成,来实现一系列相关服务。
举一个例子如下: [default]
在extensions.conf 配制文件中, [default]上下文是拨号方案默认的进入部分
DialPlan (拨号方案)
goto 功能是发送呼叫到拨号方案中的其它context部分.
语法: goto(context,extension,priority)
[default] exten => 123,1,Answer() exten => 123,n,Background(main-menu) exten => 1,1,Playback(digits/1)
支持一条线路,只需要增32KB 的带宽,但是需要网络 质量良好。 Asterisk可支持成千的客户端(需要板卡与带宽支持)
asterisk 安装与启动
1从官方网站下载 asterisk-1.2.26.tar包,拷备到LINUX 下的用户目录. 2 用tar xzvf asterisk-1.2.26.tar 解压到当目录. 3 进入 asterisk 目录 执行如下命令
/usr/lib/asterisk/modules/ 这个目录包含所有可以加载Asterisk模块(应用程序\ 编辑器\格式和有用 通道),在Asterisk启运时会加载这些模块(可以编辑 modules.conf).
/var/lib/asterisk 比较重要的是astdb文件与agi-bin目录;astdb包含Asterisk当地数 据库信息. sounds/ 所有声音提示的文件在里面 mohmp3/ 如果配置了音乐保持,应用程序会在这个目录下查找mp3 keys/ 使用公钥和私钥系统认证与一个由RSA数字签名形成的一对等 连接.公钥和私钥的扩展名分别为.pub和.key

asterisk_phpagi简单开发第五版

asterisk_phpagi简单开发第五版

asterisk_phpagi简单开发第五版Asterisk phpagi开发入门这一版改动相当大,可以说是一个全新的,因为从这一版开始,我的这个AGI需要实现一个asterisk支持多个企业(多个总机)的功能,具体点的话,就是通过判断被呼叫的总机获取该总机对应的企业信息(包括企业的IVR、企业设置的分组、设置的拨号规则、每个分组下面的分机)。

具体请看下文。

本人水平有限,难免会有写的不周到或错误的地方,欢迎指正。

首先我还是接第四版把来电超时转移简单说一下吧,其实很简单,就是再用一个MV中间件端的AGI守护进程来扫描数据库,来电等待是这样做的,来电超时转移也可以这样做呀,每隔几秒去扫一下数据库,哪些分机正在振铃(这个表就是第一版中我说的实现来电弹屏的基础表,同时也是判断分机状态的表,第二版有说明),然后挨个检查这些响铃的分机是否开启了呼叫转移,并且是否是超时转移,如果是判断一下响铃开始的时间到现在是否已经超过了设置的时间,超过了就转移。

当然,有些童鞋肯定会骂俺了,这样搞,效率不是吓死人的低啊。

对于这个问题,俺只能表示,俺是菜鸟,除了这种方法想不到其他的更好的办法了当然希望和童鞋们一起讨论,是不是说只能在这样的基础上去优化了,还是可以有一个全新的方案。

灰常的期待。

首先拨号规则,改动的相当大了支持多个企业[from-mytest-transfer]include => from-internal-additional-----------------------------------------------------------------------------------------------------上面这个呢就是第四版中说的呼叫转移(重定向)需要依赖的context[from-mytest]exten =>_.,1,Answer()exten => _.,n,AGI(script_mv_wivr.php,${CALLERID(num)},${EXTEN}) exten => _Z,1,AGI(script_mv_agi.php,${EXTEN},1,${CALLERID(num)},${CHA NNEL})exten => _Z,n,Hangup()exten => w,1,Background(wait)exten => w,2,Background(wait_m)exten => w,3,Goto(from-mytest,w,2);exten => ivr,1,Background(${IVR})exten => ivr,2,Goto(from-mytest,ivr,1);exten => r,1,Background(hungup)exten => r,2,Background(hungup_m)exten => r,3,Goto(from-mytest,r,2);----------------------------------------------------------------------------------------------解释一下exten => _.,n,AGI(script_mv_wivr.php,${CALLERID(num)},${EXTEN}) 这个就是通过被呼叫的总机比如66687100然后进入agi里再去调用mv中间件的接口查出数据库里设置的对应企业的IVR欢迎语音script_mv_wivr.php源码#!/usr/bin/php -qset_time_limit(60);ob_implicit_flush(false);include("phpagi.php");$caller = $argv[1];$num = $argv[2];$url="http://XXXX/index.php/asteriskagi/get_caller_info?caller=".$c aller."&tonum=".$num; $string = file_get_contents($url);//这里就是去查数据库啦$agi=new AGI;$agi->exec_setlanguage('cn');if($string){$agi->set_variable('IVR',$string);//这里是把被叫企业的IVR语音文件存入通道变量,因为下面的exten需要用到这个IVR语音变量$agi->exec_goto('from-mytest|ivr|1');//goto到播放IVR欢迎语音}else{$agi->exec_goto('from-mytest|r|1');}>/*说明:当然不仅仅是去数据库里查出对应企业的IVR语音文件就完事了,你还要把这个来电以及被叫总机存入数据库里以作记录,否则script_mv_agi.php再去调用MV中间件接口的时候,你知道它刚开始是打了哪个企业的总机么,如果不知道的话,如何去调用对应企业的分组和分机呢,是吧,具体怎么处理,童鞋们可以想想,也不复杂的*/exten => ivr,1,Background(${IVR})这里就是播放IVR欢迎语音,注意通道变量${IVR},这个就是在脚本里面设置的其他的童鞋们基本都能看懂吧,俺就不说了原来的test.php我已经改名了:script_mv_agi.php内容基本没变好像#!/usr/bin/php–qset_time_limit(60);ob_implicit_flush(false);include("phpagi.php");//引用phpagi接口$num = $argv[1]; //这个就是带过来的通道变量${EXTEN}的值,获取来电者按了哪一个键或者拨了哪个分机$flag = $argv[2];//表示是分组还是直接拨分机号$caller = $argv[3]; //来电号码$number = $num;//默认认为来电者直接拨分机号$group = 0;//默认分组是0,表示直接拨分机号的//表示是按了一个键,表示分组if($flag){$group = $num; //分组号$number =0;}$url="http://XX/?m=asteriskagi&act=agi&group=".$group. "&caller=".$caller."&tonum=".$numbe r;$string = file_get_contents($url);//这个字符串是MV中间件返回的$res = explode('|',$string);/* 说明,我改动了这一部分$res[0]:规则状位(0:挂机或返回上一级、1:等待、2:可以接通)$res[1]:振铃状态(0:普通方式、1:同时振铃)$res[2]:可以dial的分机(如果$res[0]为2并且$res[1]为0,这里就是一个分机号;如果$res[0]为2并且$res[1]为1,这里就是多个分机号(SIP/8260&SIP/8263....),表示同时振铃 )*//*调用远程接口去访问数据库,然后在接口里进行了复杂(嘻嘻)的运算,因为要考虑每个分机可能设置了呼叫转移啊,并且必须要满足一定的条件才可以触发呼叫转移,还有轮询查询每一个分机是否开启了呼叫保持,反正就是好几个递归,源码比较复杂,搞的我快精神崩溃了,呵呵,最终还是写出来了。

asterisk_phpagi简单开发第四版.

asterisk_phpagi简单开发第四版.

Asterisk phpagi开发入门不知不觉过了一个多月了哈,由于呼叫中心的项目进度比较缓慢,俺也就不急了,所以边做边玩,这一版俺讲讲 AGI 处理等待中的来电,当然这一个多月俺也把那个test.php 文件也做了一个比较大的改动。

具体请看下文。

本人水平有限,难免会有写的不周到或错误的地方,欢迎指正。

首先拨号规则基本没有动,前面几版都有说明,我就不再重复了先看看这个 test.php 脚本吧#!/usr/bin/php– q//说明上面这个是 php 脚步的写法, /usr/bin/php是你的 php 安装目录 (这段话是我写的说明,请勿放在 test.php 里answer(;//$agi->verbose($number;//表示可以接通(上面红色注解部分if($res[0]==2{$agi->exec_setlanguage('cn';$agi->stream_file('welcome','#';//表示是同时振铃(对于多个分机的情况if($res[1]==1{$agi->exec_dials($res[2];}//普通振铃(一个分机else{$agi->say_phonetic($res[2],'1234567890*#';$agi->stream_file('operator','#';$agi->exec_dial('SIP',$res[2];}}//表示进入等待else if($res[0]==1{$agi->exec_goto('from-mytest|w|1';//进入 IVR ,提示等待}//进入另一个 IVRelse{$agi->exec_goto('from-mytest|r|1';//进入 IVR ,提示挂机或者返回上一级}?>好,呼叫响铃咱们就不说了,我们说说进入等待吧我现在的实现还是比较简单的,在 MV 中间件的接口中我把需要进入等待的来电先扔进 memcached 中,让为防止 memcached 挂了,最好还是也先放入数据库中这里面还要考虑进入等待来电的一个排序,还有同时将来电的号码、被叫的分组、以及来电号码的通道,这些可以在 mv 中间件的接口处理好这样我们在 MV 中间件端又新加了一个 AGI ,我先简单介绍一下这个 AGI 的功能吧。

asterisk 编译

asterisk 编译

asterisk 编译Asterisk 是一个开源的电话交换机,它允许你连接各种电话设备,包括传统的电话线路、VoIP 网关、SIP 设备等。

要编译 Asterisk,你需要遵循以下步骤:1. 安装依赖:在编译 Asterisk 之前,你需要确保你的系统上安装了所有必需的依赖项。

这些依赖项可能因操作系统而异。

以下是在 Ubuntu 系统上的一些常见依赖项:arduinosudo apt-get updatesudo apt-get install build-essential libncurses5-dev libncursesw5-dev libcurl4-openssl-dev libsigc++-2.0-dev unixodbc-dev gcc-sodbc2. 下载源代码:从 Asterisk 的官方网站下载最新的源代码。

你可以从它们的网站上找到最新的版本和下载链接。

将下载的源代码解压到一个目录中。

3. 配置:进入解压后的源代码目录,运行以下命令进行配置:bashcd asterisk-*./configure这将检查你的系统上是否已安装所有必需的依赖项,并生成一些配置文件。

在配置过程中,你可以使用 --prefix 选项指定 Asterisk 的安装目录。

例如:bash./configure --prefix=/usr/local/asterisk4. 编译:运行以下命令开始编译 Asterisk:gomake这将编译 Asterisk 的源代码并生成可执行文件。

5. 安装:运行以下命令将 Asterisk 安装到你的系统中:gosudo make install这将把 Asterisk 可执行文件复制到指定的安装目录。

6. 配置环境变量:为了让系统能够找到 Asterisk 可执行文件,你需要将 Asterisk 的路径添加到 PATH 环境变量中。

例如,如果你将 Asterisk 安装在/usr/local/asterisk 目录下,你可以通过编辑 /etc/profile 文件来添加 PATH 环境变量:bashecho 'export PATH=/usr/local/asterisk/bin:$PATH' >>/etc/profilesource /etc/profile7. 设置权限:运行以下命令为 Asterisk 可执行文件设置适当的权限:bashsudo chmod +x /usr/local/asterisk/bin/asterisk。

asterisk 编译

asterisk 编译

asterisk 编译
摘要:
1.编译器简介
2.asterisk 编译器的发展历程
3.asterisk 编译器的特点
4.asterisk 编译器的使用方法
5.asterisk 编译器在编程领域的应用
6.asterisk 编译器的发展前景
正文:
asterisk 编译器是一种功能强大的编译器,广泛应用于编程领域。

本文将对其进行详细的介绍。

asterisk 编译器的发展历程可以追溯到20 世纪80 年代,经历了几个不同的发展阶段,不断地优化和完善。

它的设计初衷是为了满足编程人员的需求,提供一种高效、灵活的编程工具。

asterisk 编译器的特点包括高效性、灵活性和易用性。

高效性是指它能够在短时间内完成大量的编译任务,节省了编程人员的时间。

灵活性是指它能够适应不同的编程需求,提供多种编译选项。

易用性是指它具有友好的用户界面,方便编程人员使用。

asterisk 编译器的使用方法非常简单。

首先,需要下载并安装asterisk 编译器。

然后,编写程序代码,并使用asterisk 编译器进行编译。

最后,运行编译后的程序。

asterisk 编译器在编程领域的应用非常广泛。

例如,可以用于开发操作系统、编写编译器、开发游戏等。

它为编程人员提供了强大的编程工具,能够帮助他们更好地完成编程任务。

总之,asterisk 编译器是一种功能强大的编译器,具有高效性、灵活性和易用性。

它在编程领域有着广泛的应用,为编程人员提供了强大的支持。

Asterisk基础知识

Asterisk基础知识
– 对于初学者来说,或者只是简单应用者来说, trixbox已经足够了 – 界面相对友好,配置相对好理解
• 从功能和稳定性上,两者没有区别
asterisk和digium的板卡有何关系 和 的板卡有何关系
• 开源不代表不赚钱,开源的目的就是东方 不亮西方亮,靠硬件赚钱,那就是板卡 • 很多国外的人对digium是崇拜的,所以再贵 他们也要买digium的卡 • aserisk不是必须插板卡的,但是如果有板卡, ippbx的外部接口会更丰富 • 其它一些公司的板卡也能兼容asterisk,比 如eicon,比如yate。
asterisk 能够支持传统的线路
• tdm (time division multiplexing) • t1/ e1 pri/ pra & rbs (robbed bit signal)modes analog phone lines/ phones (pots) • isdn (integrated services digital network) both bri (basic rate)and pri (primary rate) • asterisk需要的带宽,一般为:32kb/ 线路。也 就是说每支持一条线路,只需要增32kb 的带 宽,但是需要网络质量良好
asterisk能做什么 能做什么
• asterisk,英文是“星号”的意思,设计的 初衷是,任何和电话系统有关的东西,它 都能做
– 并不是所有和电话有关的功能靠asterisk实现都 是最好的
• asterisk最擅长的就是做一个ippbx,
– 当然有人用它来做voicemail服务器、ivr服务器、 会议服务器、中继网关、sip server、发卡系统 等等
安装Asterisk-1

asterisk_phpagi简单开发第四版.

asterisk_phpagi简单开发第四版.

Asterisk phpagi开发入门不知不觉过了一个多月了哈,由于呼叫中心的项目进度比较缓慢,俺也就不急了,所以边做边玩,这一版俺讲讲 AGI 处理等待中的来电,当然这一个多月俺也把那个test.php 文件也做了一个比较大的改动。

具体请看下文。

本人水平有限,难免会有写的不周到或错误的地方,欢迎指正。

首先拨号规则基本没有动,前面几版都有说明,我就不再重复了先看看这个 test.php 脚本吧#!/usr/bin/php– q//说明上面这个是 php 脚步的写法, /usr/bin/php是你的 php 安装目录 (这段话是我写的说明,请勿放在 test.php 里answer(;//$agi->verbose($number;//表示可以接通(上面红色注解部分if($res[0]==2{$agi->exec_setlanguage('cn';$agi->stream_file('welcome','#';//表示是同时振铃(对于多个分机的情况if($res[1]==1{$agi->exec_dials($res[2];}//普通振铃(一个分机else{$agi->say_phonetic($res[2],'1234567890*#';$agi->stream_file('operator','#';$agi->exec_dial('SIP',$res[2];}}//表示进入等待else if($res[0]==1{$agi->exec_goto('from-mytest|w|1';//进入 IVR ,提示等待}//进入另一个 IVRelse{$agi->exec_goto('from-mytest|r|1';//进入 IVR ,提示挂机或者返回上一级}?>好,呼叫响铃咱们就不说了,我们说说进入等待吧我现在的实现还是比较简单的,在 MV 中间件的接口中我把需要进入等待的来电先扔进 memcached 中,让为防止 memcached 挂了,最好还是也先放入数据库中这里面还要考虑进入等待来电的一个排序,还有同时将来电的号码、被叫的分组、以及来电号码的通道,这些可以在 mv 中间件的接口处理好这样我们在 MV 中间件端又新加了一个 AGI ,我先简单介绍一下这个 AGI 的功能吧。

Asterisk常用文件位置以及常用的配置命令

Asterisk常用文件位置以及常用的配置命令
? ControlPlayback: 用快进,重绕和离开当前命令控制器播放声音文件
? DateTime: 显示日期/和时间
? Echo: 重复声音回复合成器朗诵课文
? Milliwatt: 在0分贝产生持续的1000赫兹的音调
Transfer:将访客转移到另一个扩展名
TrySystem:0回复执行系统命令
Wait:稍等
WaitExten稍等:
WaitForRing:等待呼叫申请
WaitMusicOnHold:等待,在线音乐
Billing
ForkCDR:将CDR分成两个独立的实体
asterisk.adsi
telcordia-1.adsi 配置模拟显示服务接口 capi.conf CAPI是计算机辅助面对面访问(Computer Assisted Personal
Interviewing)的简称,是使用基于计算机的问卷的一种调研技术,CAPI
可以像CATI一样控制复杂的逻辑,而且,它可以在各种各样的场所使
? Macro: 执行较大的程序
? NoOp: 不进行操作,可将数值打印到控制太进行调试
? Perl: res perl 是Apache 的 mod_perl, 只适用于 Asterisk
? PHP: res_php 不需要就可将PHP与进行一体化处理
Call management (hangup, answer, dial, etc)
Answer:如果呼叫回复一个信道
Busy:显示忙的情形等待挂断
ChanIsAvail:如果信道可以利用即核查
Congestion:显示拥塞等待挂断
Dial:设置一个指令连接当前的信道

Asterisk使用AGI脚本执行控制台命令获取通道参数

Asterisk使用AGI脚本执行控制台命令获取通道参数

Asterisk使⽤AGI脚本执⾏控制台命令获取通道参数脚本如下require_once("/var/lib/asterisk/agi-bin/phpagi-asmanager.php");require_once("/var/lib/asterisk/agi-bin/phpagi.php");//使⽤Command必须先使⽤phpagi-asmanager的connect函数连接⾄后台$host = '127.0.0.1';$username = 'admin';$secret = '29666985';define('MAX_TRY_TIMES',3); //定义重试次数define('TIMEOUT',4000); //定义超时时间,单位毫秒$agi = new AGI(); //调⽤phpagi脚本中的函数$ami = new AGI_AsteriskManager();//调⽤phpagi-asmanager脚本中的函数$conn = $ami->connect($host,$username,$secret);if( $conn == false ){ //连接失败echo "Connection failed.\n";die;}$channel = $agi->get_variable("CDR(channel)"); //获取通道值$channel = $channel["data"];$arrReturn = $ami->Command("core show channel $channel");//在脚本中执⾏asterisk后台命令获取通道参数$lines=explode("\n", str_replace("\r\n", "\n", $arrReturn["data"]));$ary = array();$ary['Channel'] = substr($lines[2],strpos($lines[2],":")+2); //客户通道$ary['Extension'] = substr($lines[8],strpos($lines[8],":")+2); //分机号$ary['ExtenChannel'] = substr($lines[41],strpos($lines[41],"=")+1); //坐席通道$agi->set_variable("WKK",$ary['Extension']); //通道变量-分机号$agi->set_variable("ExtenChannel",$ary['ExtenChannel']); //坐席通道$ami->disconnect();。

Asterisk实战

Asterisk实战

Asterisk目录
AGI脚本目录: /var/lib/asterisk/agi-bin/ Asterisk语音:/var/lib/asterisk/sounds/ Asterisk配置文件: /etc/asterisk/ 录音目录: /var/spool/asterisk/monitor/ Asterisk日志: /var/log/asterisk/
Asterisk实战
--samuel.li<weiyesoft@>
安装配置
1、Asterisk 官方站点: 2、Asterisk yum 安装 配置yum源: /downloads/yum 安装asterisk: yum -y install asterisk18 安装FreePBX yum -y install freepbx 3、FreePBX初始管理员账号密码: freepbx/fpbx
实践
1. 2. 3. 4. 5. 用FreePBX配置Asterisk 跟踪Dialplan流程 编写Dialplan:掌握context、Macro编写方法 编写AGI脚本 使用manager 编写客户端控制程序,如点击页面链接拨打顾客电 话。
其它
参考网址 免费的soft phone sjphone x-lite
令)、Orginate、SetVar、GetVar 4、Manager API的配置文件: /etc/asterisk/manager.conf 5、Manager 端 口: 5038 tcp
学习AGI
1、AGI: Asterisk Gateway Interface 用于扩展Asterisk功能,可以用Perl、PHP、SHELL或C来编 写、通过Application Comand中的AGI、DeadAGI调用。 2、通过EAGI、AGI、DeadAGI、FastAGI调用AGI程序。 3、AGI脚本中的几个重要变量: agi_channel、agi_uniqueid、agi_callerid、agi_dnidnds的库来进行AGI脚本编写。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Asterisk phpagi开发入门这一版改动相当大,而且是基于asterisk的,同时完善了之前版本中几个没有说清楚的拨号规则,可以说是一个非常大的进步。

这一版是单企业(一个总机)多级分组的实现。

同具体请看下文。

本人水平有限,难免会有写的不周到或错误的地方,欢迎指正。

首先拨号规则,改动的相当大了[ext-state]exten=> _XXXX,hint,SIP/${EXTEN}------------------------------------------------------这个是获取分机在asterisk上的实时状态所需要的context获取分机实时状态的AMI指令我在下面说asterisk1.8的话,需要在sip.conf文件里需要改一个地方找到; callcounter=yes把前面的注释去掉好像有两处,随便某一处好像都可以[from-ivr-agi-transfer]exten=> _XXXX,1,Dial(SIP/${EXTEN})exten=> _XXXX,n,Hangup()-----------------------------------------------这个就是呼叫转移即重定向需要依赖的context其实很简单[from-ivr-agi]exten => _66687XXX,1,Answer()exten => _66687XXX,n,Set(CHANNEL(language)=cn)exten => _66687XXX,n,Goto(from-ivr-agi,s,1)exten => s,1,Background(company)exten => s,n,Background(wait_m)exten => s,n,Hangup()exten => _Z,1,AGI(script_mv_agi.php,${EXTEN},${CALLERID(num)},${CHANNEL},1,0,0)exten => _Z,n,Hangup()exten => w,1,Background(wait)exten => w,2,Background(wait_m)exten => w,3,Goto(from-ivr-agi,w,2)exten => r,1,Background(hungup)exten => r,2,Background(hungup_m)exten => r,3,Goto(from-ivr-agi,r,2)-------------------------------------------------------这个是第一级,打入总机后进入的当按键后触发AGI再MV中间件处理决定是进入第二级还是开始呼叫[two-from-ivr-agi]exten => s,1,Background(${IVR})exten => s,n,Background(up)exten => s,n,Background(wait_m)exten => s,n,Hangup()exten => _Z,1,AGI(script_mv_agi.php,${EXTEN},${CALLERID(num)},${CHANNEL},2,${ONEID},0) exten => _Z,n,Hangup()exten => *,1,Goto(from-ivr-agi,s,1)exten => *,n,Hangup()exten => w,1,Background(wait)exten => w,2,Background(wait_m)exten => w,3,Goto(two-from-ivr-agi,w,2)exten => r,1,Background(hungup)exten => r,2,Background(hungup_m)exten => r,3,Goto(two-from-ivr-agi,r,2)----------------------------------------------------------这个是第二级,当按键后同理,调用AGI判断是呼叫还是进入第三级*号键返回上一级[three-from-ivr-agi]exten => s,1,Background(${IVR});exten => s,n,Background(up)exten => s,n,Background(wait_m)exten => s,n,Hangup()exten => _Z,1,AGI(script_mv_agi.php,${EXTEN},${CALLERID(num)},${CHANNEL},3,${ONEID},${TWOID}) exten => _Z,n,Hangup();exten => *,1,AGI(script_mv_agi.php,${EXTEN},${CALLERID(num)},${CHANNEL},1,0,0);exten => *,n,Hangup()exten => w,1,Background(wait)exten => w,2,Background(wait_m)exten => w,3,Goto(three-from-ivr-agi,w,2)exten => r,1,Background(hungup)exten => r,2,Background(hungup_m)exten => r,3,Goto(three-from-ivr-agi,r,2)解释一下exten => _.,n,AGI(script_mv_wivr.php,${CALLERID(num)},${EXTEN})-------------------------------------------------------------------------这个是第三级目前是最后一级,当然是直接呼叫了*号键返回上一级,不过这里没有实现,比较复杂,放下一版了。

呵呵这个地方还可以优化,支持无限分组的目前正在实现中,将在下一版中放出,敬请期待。

呵呵原来的test.php我已经改名了:script_mv_agi.php内容又变了#!/usr/bin/php -q<?phpset_time_limit(60);ob_implicit_flush(false);include("phpagi.php");$group = $argv[1];//分组号$caller = $argv[2];//来电号码$caller_chanel = $argv[3]; //来电通道$level = $argv[4]; //当前所处的级数$one_id = $argv[5]; //第一级的分组ID$two_id = $argv[6];//第二级的分组id$url="http://XXXX/asteriskagi?group=".$group."&caller=".$caller."&caller_chanel=".$caller_chan el."&level=".$level."&one_id=".$one_id."&two_id=".$two_id;$string = file_get_contents($url);$agi=new AGI;$agi->answer();//$agi->exec_setlanguage('cn');if($string){$res = explode('|',$string);$context = $res[4]; //context为变量if($res[0]==3){$agi->set_variable('IVR',$res[3]);$team_path = $res[5];$paths = explode('-',$team_path);$agi->set_variable('ONEID',empty($paths[1])?0:intval($paths[1]));//设置第一级的分组ID 的通道变量默认为0$agi->set_variable('TWOID',empty($paths[2])?0:intval($paths[2]));//设置第二级的分组ID 的通道变量默认为0$agi->exec_goto("{$context),s,1");}else if($res[0]==2){$agi->stream_file('transfer','#');if($res[1]==1){$agi->exec_dials($res[2]);}else{$agi->say_digits($res[2],'1234567890*#');$agi->stream_file('operator','#');$resdata = $agi->exec_dial('SIP',$res[2]);}}else if($res[0]==1){$agi->exec_goto("{$context},w,1");}else{$agi->exec_goto("{$context),r,1");}}else{$agi->exec_goto('from-ivr-agi,r,1');}?>这个也没什么好说的,就是判断出当前分组号对应的分组ID是第几级,如果当前的分组下面有子分组则就没有分机,就是播放IVR语音如果有分机就开始根据拨号规则来查询分机了分组号在同一组里面是唯一的,但是可能和其他组里面的分组号重复所以每次AGI带过去分组号的时候,必须带上一级的分组ID这样才能定位出当前分组号对应的分组ID当家可以对应10086的语音播放模式想一想其他的前面几版都有说明,就不再重复了最后说一下获取分机实时状态的AMI指令$request = "ACTION: ExtensionState\r\nContext: $context\r\nExten: $number\r\nActionID: 1\r\n\r\n";$context就是上面ext-state$number就是需要查询的分机号其他俺的俺就不多说了,下一版就是第一阶段的完整收官。

相关文档
最新文档