Asterisk-Java 教程(中文版) --FastAGI协议

编译测试asterisk-java FastAGI 一、准备环境 Asterisk版本(Asterisk-16.0.0) Asterisk-java(Asterisk-Java 3.x, GIT地址:https://github.com/asterisk-java/asterisk-java.git) Java版本(jdk-8u171-linux-x64.tar.gz) mvn版本(apache-maven-3.6.3-bin.tar.gz) 二、安装必备库 假设已经安装了asterisk,接下来就开始安装java,mvn和asterisk-jav 阅读详情

Asterisk-Java 教程(中文版) --FastAGI协议

FastAGI协议

 

通过FastAGI协议能够用最简单的方法使我们的JAVA应用程序和Asterisk交互。AGI脚本能够处理任何呼入或通过Manager API发起的呼出。

这此缺点已经由FastAGI解决,FastAGI基于AGI通过TCP/IP Socket连接替代标准输入和标准输出做为沟通的媒介。

 

你可以使用FastAGI运行Java应用程序(可以在不同的机器上运行Asterisk) ,它仅启动一次AGI 脚本直到它被关闭。使用此协议结合Java的多线程支持可以构建非常快的脚本。

 

Asterisk-Java提供了一个容器帮助你运行你的JAVA脚本,并接收Asterisk服务器连接的,解析请求或通过URL调用你的脚本。

写AGI脚本你必需实现AgiScript的接口,你可以通过继承实现了AgiScript接口的BaseAgiScript并覆盖它的方法来进一步简化这一工作。

 

查看BaseAgiScript的文档,你将发现更多的可以用在你的脚本中的方法。如你想用的方法不在BaseAgiScript中,或你想用你的命令扩展FastAGI,你可以用channel.sendCommand(AgiCommand)方法发送任意的命令。

 

 

 

 

 

FastAGI协议

 

通过FastAGI协议能够用最简单的方法使我们的JAVA应用程序和Asterisk交互。AGI脚本能够处理任何呼入或通过Manager API发起的呼出。

 

AGI(Asterisk Gateway Interface)让你可以向Asterisk的拨号计划发送脚本,传统的脚本和Asterisk之间的通讯是通过标准输入和标准输出,并且脚本必需和Asterisk运行在同一服务器上。

 

这此缺点已经由FastAGI解决,FastAGI基于AGI通过TCP/IP Socket连接替代标准输入和标准输出做为沟通的媒介。

 

你可以使用FastAGI运行Java应用程序(可以在不同的机器上运行Asterisk) ,它仅启动一次AGI 脚本直到它被关闭。使用此协议结合Java的多线程支持可以构建非常快的脚本。

 

Asterisk-Java提供了一个容器帮助你运行你的JAVA脚本,并接收Asterisk服务器连接的,解析请求或通过URL调用你的脚本。

 

Hello AGI!

 

写AGI脚本你必需实现AgiScript的接口,你可以通过继承实现了AgiScript接口的BaseAgiScript并覆盖它的方法来进一步简化这一工作。

 

一个简单的AGI脚本的例子:

 

import org.asteriskjava.fastagi.AgiChannel;

 

importorg.asteriskjava.fastagi.AgiException;

 

import org.asteriskjava.fastagi.AgiRequest;

 

import org.asteriskjava.fastagi.BaseAgiScript;

 

public class HelloAgiScript extendsBaseAgiScript

 

{

 

public void service(AgiRequest request,AgiChannel channel)

 

throws AgiException

 

{

 

// Answer the channel...

 

answer();

 

 

 

// ...say hello...

 

streamFile("welcome");

 

 

 

// ...and hangup.

 

hangup();

 

}

 

}

 

编译:

 

$ javac -cp asterisk-java.jarHelloAgiScript.java

 

$

 

下一步,在Asterisk拨号规则里为你的脚本添加一个呼叫。

 

你可能需要在extensions.conf默认的节里添加一个分机1300:

 

[default]

 

...

 

exten =>1300,1,Agi(agi://localhost/hello.agi)

 

用运行Asterisk-Java机器的IP地址代替代码中的“localhost”。

 

重新加载Asterisk确保更改生效。

 

现在你必须映射脚本的名称hello.agi到我们刚刚创建的HelloAgiScript。默认情况下通过启动AgiServer时调用classpath 路径下的fastagi-mapping.properties属性文件来完成。如:

 

hello.agi = HelloAgiScript

 

您的目录现现在应包含以下文件:

 

$ ls -l

 

-rw-r--r-- 1 srt srt 163689 2005-03-11 22:07asterisk-java.jar

 

-rw-r--r-- 1 srt srt 26 2005-03-11 20:50fastagi-mapping.properties

 

-rw-r--r-- 1 srt srt 624 2005-03-11 22:07HelloAgiScript.class

 

-rw-r--r-- 1 srt srt 438 2005-03-11 20:50HelloAgiScript.java

 

最后我们运行 AgiServer:

 

$ java -jar asterisk-java.jar

 

如果是 Asterisk-Java 0.3.1 或更早的版本,你需要用

 

$ java -cp asterisk-java.jar:.org.asteriskjava.fastagi.DefaultAgiServer

 

在Windows平台:

 

$ java -cp asterisk-java.jar;.org.asteriskjava.fastagi.DefaultAgiServer

 

如果你看到一些类似于如下的日志输出表示AgiServer已经成功开始运行:

 

Mar 11, 2005 10:20:12 PMorg.asteriskjava.fastagi.DefaultAgiServer run

 

INFO: Thread pool started.

 

Mar 11, 2005 10:20:12 PMorg.asteriskjava.fastagi.DefaultAgiServer run

 

INFO: Listening on *:4573.

 

When you call extension 1300 you will seethe AGI script being launched:

 

Mar 11, 2005 10:22:47 PMorg.asteriskjava.fastagi.DefaultAgiServer run

 

INFO: Received connection.

 

Mar 11, 2005 10:22:47 PMorg.asteriskjava.fastagi.AgiConnectionHandler run

 

INFO: Begin AgiScript HelloAgiScript onAgiServer-TaskThread-0

 

Mar 11, 2005 10:22:48 PMorg.asteriskjava.fastagi.AGIConnectionHandler run

 

INFO: End AgiScript HelloAgiScript onAgiServer-TaskThread-0

 

扩展范例

 

查看BaseAgiScript的文档,你将发现更多的可以用在你的脚本中的方法。如你想用的方法不在BaseAgiScript中,或你想用你的命令扩展FastAGI,你可以用channel.sendCommand(AgiCommand)方法发送任意的命令。

 

使用AGI命令你可以通过URL传递参数给你的脚本,在AgiRequest中你可以通过调用getParameter(String)或getParameterValues(String)读取这些参数。

 

如果你想传递名称为user,值为john的参数给你的脚本hello.agi,你可以这样写:

 

exten =>1300,1,Agi(agi://localhost/hello.agi?user=john)

 

你可以传递多个参数,参数中的特殊字符必需为URL编码。

 

如果你要写一个复杂的脚本,请注意您的AgiScript必须是线程安全的。只有一个实例被用来处理所有请求,这是一个类似于servlet容器的引擎。

 

配置

 

你可以通过设置两个属性来调整DefaultAgiServer:bindPort、poolSize;

 

bindPort为设置TCP端口服务器侦听端口。FastAGI默认端口为4573,如果你修改了,在extensions.conf中请使用你设置的新端口。如你将bindPort属性修改为1234,在extensions.conf中设置如下:

 

exten =>1300,1,Agi(agi://localhost:1234/hello.agi)

 

DefaultAgiServer为AgiScripts使用一个固定大小的线程池。poolSize确定有多少线程可以同时使用,因此,你应该将它设置为AgiServer能够处理的并发的数量。poolSize默认值为10。

 

这些属性配置可以通过classpath下的fastagi.properties的文件进行配置。

 

如下:

 

bindPort = 1234

 

poolSize = 20

Asterisk FastAGI IVR:FastAGI是一种IVR,可让用户使用用户ID和密码进行呼叫-开源 Asterisk FastAGI IVR是一个简单的IVR程序,在允许用户使用Asterisk服务器打出电话之前,会提示用户ID和密码。 立即下载

相关推荐

通过asterisk-java操作asterisk

NULL 博文链接:https://nettm.iteye.com/blog/1824964

探索Asterisk Java:一款强大的VoIP开发框架

探索Asterisk Java:一款强大的VoIP开发框架 项目地址:https://gitcode.com/gh_mirrors/as/asterisk-java 是一个开源的Java库,用于与Asterisk PBX(私有企业交换机)进行交互和编程。它是开发VoIP(Voice over Internet Protocol)应用、集成电话系统到你的业务流程中的理想工具。本文将深入解析其技术特性...

gitblog_00088的博客 1056

asterisk-java:用于Asterisk PBX集成的免费Java库

适用于Asterisk-Java的自述文件 介绍 Asterisk-Java软件包包含一组Java类,使您可以轻松构建与交互的Java应用程序。 Asterisk-Java支持Asterisk为此场景提供的两个接口: 协议和 。 您可以在这里找到最新版本的Java文档: FastAGI FastAGI使您可以创建一种服务来管理呼叫,该服务的管理方式类似于网络服务器处理http请求的方式。 FastAGI可以(并且应该)用来代替Dialplan。 FastAGI比Dialplan快数千倍,更易于调试,并允许您使用熟悉的语言进行呼叫控制。 FastAGI实现支持Asterisk当前提供的所有命令。 经理API Manager API实现支持从Asterisk服务器接收事件(例如,呼叫过程,注册的对等方,通道状态),并向Asterisk发送动作(例如,发起呼叫,座席登录/注销,开始/停

asterisk java 开发_asterisk-java

README for Asterisk-JavaINTRODUCTIONThe Asterisk-Java package consists of a set of Java classes that allow you to easily build Java applications that interact with an Asterisk PBX Server. Asterisk-Jav...

weixin_39653622的博客 827

asterisk-java-2.0.3jar包及示例.rar

asterisk-java-2.0.3jar包及示例

asterisk-java-1.0.0-m2-sources.zip_asterisk

java程序实现asterisk的AGI接口,便于ASTERISK系统接口开发

java 连接asterisk_asterisk-java ami 入门篇,连接与关闭服务器

我选择的是通过AsteriskServer 来生成连接,因为后面要通过AsteriskServer来进行监听通话属性的改变。demo:AsteriskServer asteriskServer=new DefaultAsteriskServer("服务器ip", "账号","密码");if(asteriskServer!=null){ManagerConnection conn=asteriskS...

weixin_31653971的博客 712

EFR32BG22 Thunderboard开发板 使用SPI 读取加速度计

Simplicity Studio v5 创建Silicon Labs蓝牙SoC EFR32BG22 Thunderboard模块的加速度计工程,模块上有一个ICM-20648 6轴运动跟踪设备,集成3轴加速度计和3轴陀螺仪功能,使用SPI接口跟EFR32BG22芯片连接。 我尽量以图片的形式展示(少打字): 将EFR32BG22的Thunderboard模块通过USB线插入到电脑,打开Simplicity Studio v5软件。 下面看重点: 点击搜索到的IO Stream: USART,点击Ins

qq_25727979的博客 1494

开源项目Asterisk-Java安装与配置完全指南

开源项目Asterisk-Java安装与配置完全指南 项目基础介绍及编程语言 Asterisk-Java是一款免费的Java库,专为与Asterisk PBX服务器集成而设计。它支持两种与Asterisk交互的主要接口:FastAGI协议和Manager API。这款开源工具适用于希望在Java应用中实现电话系统控制的开发者。项目采用Java作为其主要编程语言,并遵循Apache-2.0许可证。 ...

gitblog_01288的博客 1033

单片机NTC热敏电阻测温:六种实用电路方案与选型指南

本文详细介绍了单片机系统中NTC热敏电阻测温的六种实用电路方案,包括分压法、恒流源法、RC充放电法、电桥法、频率法及集成专用IC方案,并提供了关键的硬件选型指南和软件处理技巧,帮助工程师实现高精度、低成本的温度测量。

herb5的博客 815

从理论到代码:如何用随机矩阵理论(RMT)优化你的微生物共现网络分析?

本文详细介绍了如何利用随机矩阵理论(RMT)优化微生物共现网络分析,解决传统阈值法的主观性和不稳定性问题。通过R语言实现端到端的分析流程,包括矩阵标准化、本征值谱分析和自动阈值确定,显著提升网络构建的准确性和可靠性。该方法特别适用于高通量测序数据,能自动识别噪声与真实信号的边界,为微生物组学研究提供更精确的互作网络分析工具。

weixin_29096377的博客 360

Asterisk-Java 项目下载及安装教程

Asterisk-Java 项目下载及安装教程 1. 项目介绍 Asterisk-Java 是一个用于与 Asterisk PBX 服务器集成的 Java 库。它支持两种 Asterisk 提供的接口:FastAGI 协议和 Manager API。FastAGI 允许你创建一个服务来管理呼叫,类似于 Web 服务器处理 HTTP 请求的方式。Manager API 则支持从 Asterisk 服...

gitblog_01294的博客 736

手把手教你用CubeMX给GD32F103点灯、调串口(附完整工程)

本文详细介绍了如何使用CubeMX为GD32F103开发板配置GPIO点灯和串口通信,包含完整的工程创建、代码构建和测试流程。特别强调了GD32与STM32的差异点及常见避坑技巧,帮助开发者快速上手GD32开发。

weixin_42566424的博客 311

Asterisk-Java:简化Asterisk交互的Java神器

Asterisk-Java:简化Asterisk交互的Java神器 在现代通信解决方案中,融合传统电话系统与高级软件应用的能力变得至关重要。这就是【Asterisk-Java】库大放异彩之处,它为开发者打开了一扇门,将Java编程语言的强大功能带入到Asterisk PBX服务器的世界。 项目介绍 Asterisk-Java是一个精心设计的Java库,它无缝桥接了你的Java应用程序和强大的Ast...

gitblog_00970的博客 984

BUCK电路三种工作模式全解析:CCM、BCM、DCM到底怎么选?

本文深入解析BUCK电路的CCM、DCM和BCM三种工作模式,通过对比其电流波形、效率、纹波及环路特性,提供基于计算公式的量化判断方法。文章结合电池供电、高精度模拟等具体应用场景,给出明确的模式选型策略与实战设计指南,帮助工程师根据核心需求做出最优决策。

ee345的博客 482

Modelsim:LPDDR5仿真(含美光仿真模型官方sv&vcs代码)

虽然,三星在设计跟量产上,早于其他家存储产商,但是镁光后来居上了,是业界首家支持全速 LPDDR5 的供应商,并且开发者在做开发的时候,也是用美光颗粒比较多,所以这里就先以美光的仿真模型为主进行仿真。 本工程为美光官方工程,支持Modelsim、VCS、ncverilog三种仿真器仿真。模型破解过,为完整system-verilog代码。

千歌叹尽执夏的博客 1280

Asterisk-Java技术文档

Asterisk-Java技术文档 概述 Asterisk-Java 是一个专为Java开发者设计的库,它简化了与Asterisk PBX服务器交互的过程。本库支持FastAGI协议和Manager API两种主要接口,允许你在Java应用中灵活地控制电话呼叫和管理Asterisk服务器状态。 本文档将引导你了解安装过程、基础使用方法、API详情以及如何从源代码进行构建。 安装指南 Maven依赖...

gitblog_01243的博客 1104

R语言Rstudio突然无法启动且报错:ERROR system error 42 [str: 一, len: 3, from: UTF-8, to: ISO8859-1]...如何解决

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 2846

Asterisk-Java 开源项目推荐

Asterisk-Java 开源项目推荐 1. 项目基础介绍和主要编程语言 Asterisk-Java 是一个用于与 Asterisk PBX(Private Branch Exchange)服务器集成的开源 Java 库。该项目的主要编程语言是 Java,旨在为开发者提供一个简单而强大的工具,以便在 Java 应用程序中与 Asterisk PBX 进行交互。 2. 项目的核心功能 Asteri...

gitblog_01289的博客 806

基于OpenClaw的自动化文件管理与文档分类系统设计与实现

本文介绍了一种基于OpenClaw的自动化文件管理与文档分类系统。系统采用三层架构设计,包含数据层、逻辑层和应用层,核心组件涵盖文件扫描、处理、分类、移动等功能。技术选型上使用Python/FastAPI作为后端,结合PostgreSQL/Elasticsearch/MinIO存储方案,并整合scikit-learn/PyTorch等AI技术实现智能分类。系统实现了文件递归扫描、增量扫描、元数据提取等功能,通过文件哈希和修改时间检测变化。该方案能有效提升文件管理效率,实现文档的自动化分类与智能管理。

一键难忘的博客 753

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Asterisk-Java 项目常见问题解决方案

Asterisk-Java 项目常见问题解决方案 项目基础介绍 Asterisk-Java 是一个用于与 Asterisk PBX 服务器集成的 Java 库。该项目的主要目的是提供一个简单易用的 Java 接口,使得开发者能够轻松地与 Asterisk PBX 进行交互。Asterisk-Java 支持两种主要的 Asterisk 接口:FastAGI 协议和 Manager API。FastA...

gitblog_01291的博客 674

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Asterisk-Java 教程(中文版)…

原文地址:教程(中文版) -- FastAGI协议">Asterisk-Java 教程(中文版) -- FastAGI协议作者:天那边的米高FastAGI协议 通过FastAGI协议能够用最简单的方法使我们的JAVA应用程序和Asterisk交互。AGI脚本能够处理任何呼入或通过Manager API发起的呼出。 AGI(Asterisk Gateway Interface)让你可以向Aste

前车之鉴的专栏 3532

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Fastagi使用-6

<br />Asterisk支持多种语言实现AGI脚本,因此运行AGI脚本需要服务器支持脚本语言环境,例如某个AGI脚本是通过JAVA语言编写,那么服务器需要运行整个JAVA虚拟机环境。这给对于多个AGI脚本并发执行给服务器带来的负担是不可忽略的。那么是否可以提供一种机制,使得执行AGI脚本与运行Asterisk的服务器从物理上独立开来,即AGI脚本<br />在其他机器上执行,执行的结果送到Asterisk服务器,由AGI服务器与Asterisk服务器交互来完成命令的发起与执行动作。<br />Fasta

水到渠成的专栏 2451

asterisk ami

Asterisk Manager Interface主要提供AST系统监控以及管理功能,它可以要求AST做一些事情,例如发起一个新呼叫。 需要的配置: manager.conf ;  ; 打开AMI并本地访问  [general]  enabled = yes  webenabled = yes  bindaddr = 127.0.0.1  ;  ; 创建用户hello,密码...

whatsyourname的专栏 599

Asterisk-Java

Asterisk-Javahttp://www.asteriskjava.org/latest/ Asterisk-JavaWhat is Asterisk-Java?The Asterisk-Java package consists of a set of Java classes that allow you to easily build Jav

lirengming的专栏 3111

asterisk 扩展应用(1)——AsteriskManager工程包介绍

工程包主要有有两在部分组成AGI服务器和API Manager。 APIManager用来监控Asterisk服务器的事件,包手话机状态,座席状态等。 AGI Server是一个Agi服务器。Asterisk除了调用asterisk本身的应用外,还可以调用第三方的服务器,如果第三方应用和asterisk是同一个进程,可以用AGI协议发送命令。如果第三方应用和asterisk不在同一个机器,可以通过FastAgi协议来进行远程调用。 AsteriskManager主要作用是用来提供asterisk扩展A

u010781280的博客 537
上一篇: Asterisk[1]
下一篇: Eclipse在线安装fatjar插件
pingdouble
博客等级 码龄15年 325粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值