java通过http协议与Freeswitch对接实现动态添加用户

FreeSwitch 支持将话单写入远程的 HTTP 服务器,在哪里你可以使用任何喜欢的编程语言处理话单以及写入任何可能的数据库。有三个模块可以实现他:mod_xml_cdr、mod_json_cdr 以及 mod_format_cdr。前两者分别产生 xml 和 json 格式,最后一个模块则可配置产生 XML 或 JSON 格式。
使用 mod_xml_curl为例:

第一步: 在C:\Program
Files\FreeSWITCH\conf\autoload_configs\modules.conf.xml中释放<load module="mod_xml_curl"/> 的注释。
第二步:② C:\Program
Files\FreeSWITCH\conf\autoload_configs\xml_curl.conf.xml 中添加

 <binding name="directory"> 
      <param name="gateway-url" value="http://localhost:8080/fsapi/" bindings="directory"/> 
	</binding> 

中的value指向你的 HTTP 服务器地址。

第三步:创建并开启HTTP服务

//连接FS服务
connectFSAndSubscibeFSEvent();
ExecutorService  pool = Executors.newCachedThreadPool();
server = HttpServer.create(new InetSocketAddress(8080),10);
server.createContext("/fsapi/", new DirectoryHandler());
//可以通过设置一个线程组由线程来决定执行的过程
server.setExecutor(pool);
server.start();
System.out.println("server started:");

第四步:号码验证

	/**
	 * @author cyq
	 *号码注册认证
	 */
	class DirectoryHandler implements HttpHandler{

		@Override
		public void handle(HttpExchange exc) throws IOException {

			//String uri=exc.getRequestURI().toString();
			//获得输入流
			BufferedReader reader=new BufferedReader(new InputStreamReader(exc.getRequestBody()));
			//用于存储请求信息  请求参数
			String valueString = null;
			StringBuilder sbf=new StringBuilder();
			while ((valueString=reader.readLine())!=null){
				sbf.append(valueString);
			} 
			String param=sbf.toString();
			//System.out.println(param);
			String[] str_= param.split("&");
			@SuppressWarnings("unused")
			String section=null;
			String req_key = null;
			String req_user = null;
			String req_domain = null;
			@SuppressWarnings("unused")
			String req_ip = null;
			String req_callout = null;
			String req_pswd = "1234";
			for(int i=0;i<str_.length;i++){
				String[] str2_ = str_[i].split("=");
				switch (str2_[0]) {

				case "section":
					section=str2_[1];
					break;
				case "key":
					req_key=str2_[1];
					break;
				case "user":
					req_user=str2_[1];
					req_callout=str2_[1];
					break;
				case "domain":
					req_domain=str2_[1];
					break;
				case "ip":
					req_ip=str2_[1];
					break;

				default:
					break;
				}
			}
	//此处查询数据库
DirectoryEntity directorys=directoryManageServerBusiness.selectExtensions(req_user,req_domain);
req_pswd = directorys.get(0).getExtensionPswd();
				responseMessage=
						"<document type='freeswitch/xml'>"+
								"<section name='directory'>" +
								"   <domain name='"+req_domain+"'>"+
								"     <params>"+
								"        <param name='dial-string' " +
								"       value='{presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(${dialed_user}@${dialed_domain})}'/>" +
								"     </params>"+
								"     <groups>"+
								"       <group name='default'>" +
								"        <users>"+
								"          <user id='"+req_user+"'>"+
								"           <params>"+
								"              <param name='password' value='"+req_pswd+"'/>"+
								"              <param name='vm-password' value='"+req_pswd+"'/>"+
								"           </params>" +
								"           <variables>" +
								"              <variable name='toll_allow' value='domestic,international,local'/>"+
								"              <variable name='accountcode' value='"+req_user+"'/>" +
								"              <variable name='user_context' value='default'/>" +
								"              <variable name='effective_caller_id_name' value='"+req_user+"'/>" +
								"              <variable name='effective_caller_id_number' value='"+req_user+"'/>" +
								" 	           <variable name='directory-visible' value='true'/>"+
								"              <variable name='directory-exten-visible' value='true'/>"+
								"              <variable name='limit_max' value='1'/>"+
								"              <variable name='outbound_caller_id_name' value='"+req_callout+"'/>"+
								"              <variable name='outbound_caller_id_number' value='"+req_callout+"'/>"+
								"              <variable name='callgroup' value='techsupport'/>"+
								"           </variables>"+
								"         </user>"+
								"        </users>"+
								"       </group>"+
								"      </groups>" +
								"    </domain>" +
								" </section>" +
								"</document>";
			}else{
				responseMessage=
						" <document type='freeswitch/xml'>" +
								"  <section name='directory'>" +
								"  </section>" +
								" </document>";
			}
			//回应信息
			exc.sendResponseHeaders(HttpURLConnection.HTTP_OK, responseMessage.getBytes().length);
			OutputStream out = exc.getResponseBody(); 
			out.write(responseMessage.getBytes());
			out.flush();
			exc.close();
		}

	}

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程

Java对接FreeSWITCH电话,通常涉及到使用FreeSWITCH提供的API或者协议进行通信。FreeSWITCH是一个开源的电话交换平台,它支持多种协议,如SIP、IAX2、H.323等,可以处理语音、视频和消息等通信类型。在Java中,你可以使用Socket编程或通过第三方库来实现FreeSWITCH的交互。 1. 使用Socket编程:你可以通过Socket来创建与FreeSWITCH服务器的TCP或UDP连接,然后按照FreeSWITCH支持的协议发送和接收数据。例如,如果你使用SIP协议,你可以发送 INVITE 请求来发起呼叫,然后处理通话过程中的各种事件和消息。 2. 使用第三方库:有一些开源库或框架可以帮助你更容易地与FreeSWITCH进行交互。例如,使用 JSIP 库,它是一个Java编写的SIP协议栈,可以用来实现SIP相关的功能。 3. 使用XML-RPC:FreeSWITCH支持通过XML-RPC协议进行远程过程调用。你可以通过这种方式来控制FreeSWITCH的行为,如拨打电话、挂断电话、设置电话会议等。 4. 使用REST API:FreeSWITCH还提供了RESTful API,允许你通过HTTP请求来管理电话呼叫和其他功能。在Java中,可以使用任何HTTP客户端库(如Apache HttpClient)来调用这些API。 在进行上述操作时,需要确保你了解FreeSWITCH的配置和运行机制,以及相关的安全性和认证机制。同时,你可能还需要对网络编程有一定了解,以便于处理网络连接和数据传输的问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值