iaxLite sipLite 软电话 二次开发接口及实例代码
本开发接口适用于 iaxLite软电话 (公版)、sipLite软电话 (公版)、sipLite软电话for代码人生博客专用版。也就是说,该接口对于上述三个版本的软电话是通用的。
功能:
1, 呼叫 (call)
2, 挂机 (hangup)
3, 发送 DTMF (senddtmf)
4, 弹出软电话配置对话框 (showsetupdlg)
5, 注册软电话 (register)
6, 关闭软电话 (shutdown)
7, 返回软电话呼叫状态 (WM_COPYDATA)
原理:
基于windows的消息机制,实现进程间通讯。
步骤:
1,注册windows消息。该消息的名称是:iaxtalk@gmail.com
2,用消息广播的方式查找并返回 iaxLite或sipLite软电话的句柄
3,对软电话句柄发送消息实现上述列举的call , hangup等各种操作
4,接收从软电话返回的呼叫状态
接口详解:
如下以Delphi语言代码片段描述如何使用该开发接口。
- 定义消息、句柄等有关常量变量。
const
UserMessageStr = ‘iaxtalk@gmail.com‘;
NewMessage = WM_USER + 20;var
Form1: TForm1;
UserWindowHandle : THandle = 0;
UserMessage : UINT;
- 注册消息
procedure TForm1.Button1Click(Sender: TObject);
beginUserMessage := RegisterWindowMessage(UserMessageStr);
end;
- 与软电话建立通讯。从windows编程的角度上来讲,将自身的句柄通过消息广播的方式传送给软电话,并获取软电话这个进程的句柄。
function TForm1.ConnectToIaxLite():boolean;
vari : integer;
begin
result:=false;
UserWindowHandle:=0;
try
if UserWindowHandle = 0 then
beginSendMessage(HWND_BROADCAST,UserMessage,handle,0);
i:=1;
while(i<=20) and (UserWindowHandle=0) do
beginapplication.ProcessMessages;
sleep(100);
i := i+1;end;
if UserWindowHandle=0 then
begin
exit;
end;
application.ProcessMessages;
end;
result:=true;
except
end;
end;
procedure TForm1.WndProc(var Message: TMessage);
beginif ((Message.Msg = UserMessage) and (Message.wParam <> Handle)) then
beginUserWindowHandle := Message.wParam;
ReplyMessage(0);end;
inherited;
end;
- 调用 ConnectToIaxLite 函数与iaxLite或sipLite建立联系
procedure TForm1.Button2Click(Sender: TObject);
beginlabel1.Caption := ”;
if ConnectToIaxLite()=true then
beginlabel1.Caption := ‘iaxLite linked successfully’;
end
else
beginlabel1.Caption := ‘Fail to link’;
end;
end;
- 给iaxLite或sipLite通过 WM_COPYDATA 消息发送数据的例程. 最最重要. 急急如律令
procedure TForm1.SendDataToIaxLite(i_Handle:integer; str_Data:string);
vards: TCopyDataStruct;
begin
ds.cbData := Length (str_Data) + 1;
GetMem (ds.lpData, ds.cbData );
StrCopy (ds.lpData, PChar (str_Data));
SendMessage(UserWindowHandle,WM_COPYDATA,i_Handle,Cardinal(@ds));
freemem(ds.lpdata);end;
上面是一系列的准备铺垫工作。 下面要来真格的了。请注意发送的消息内容。
- 呼叫指定的号码
procedure TForm1.Button3Click(Sender: TObject);
varstr_Callee:string;
begin
str_Callee := trim(edit1.text);
if str_Callee = ” then
exit;
SendDataToIaxLite(Form1.handle, ‘call:‘+ str_Callee);
end;
- 挂断电话
procedure TForm1.Button4Click(Sender: TObject);
beginSendDataToIaxLite(Form1.handle, ‘hangup‘);
end;
- 发送 DTMF
procedure TForm1.Button7Click(Sender: TObject);
varchr_DTMF:string;
begin
chr_DTMF := trim(edit2.text);
if chr_DTMF = ” then
exit;
SendDataToIaxLite(Form1.handle, ‘senddtmf:‘+ chr_DTMF);
end;
- 注册到服务器。
关于这个消息,我想说两句。 通常你可以在软电话设置对话框中设置帐号密码server信息,以注册到 sip server 或 asterisk 等。这个消息的作用是临时地注册到服务器,不用在软电话中填写注册信息。
procedure TForm1.Button8Click(Sender: TObject);
varstr_Account:string;
str_Passwd:string;
str_ServerAddr:string;begin
str_Account := trim(edit3.text);
if str_Account = ” then
exit;
str_Passwd := trim(edit4.text);
str_ServerAddr := trim(edit5.text);
if str_ServerAddr = ” then
exit;
SendDataToIaxLite(Form1.handle, ‘register:‘ + str_Account + ‘:‘ + str_Passwd + ‘:‘ + str_ServerAddr);
end;
- 弹出软电话设置对话框
procedure TForm1.Button6Click(Sender: TObject);
beginSendDataToIaxLite(Form1.handle,’showsetupdlg‘);
end;
- 关闭软电话
procedure TForm1.Button5Click(Sender: TObject);
beginSendDataToIaxLite(Form1.handle, ‘shutdown‘);
end;
- 接收软电话的呼叫状态
procedure TForm1.Mymessage(var t: TWmCopyData);
varstr_Status:string;
begin
if t.From = UserWindowHandle then
beginstr_Status := strpas(t.CopyDataStruct^.lpData);
if str_Status = ‘canceled‘ then
begin
;
end
else if str_Status = ‘answered‘ then
begin
;
end
else if str_Status = ‘finish‘ then
begin
;
end
else if str_Status = ‘pickup‘ then
begin
;
end
else if str_Status = ‘ringback‘ then
begin
;
end
else if str_Status = ‘hangup‘ then
begin
;
end;Memo1.lines.add(str_Status);
end;
end;
注意,若想启用该功能,需要在软电话的设置对话框中,选中 “通过 IPC反馈呼叫结果”。如下图所示:
上面是关于软电话接口二次开发的详细说明。软件开发者可以利用它来做好多应用:
USB phone生产厂家或开发者可以让自己的产品无缝支持 sip 软电话或 iax 软电话。
呼叫中心开发者可以在座席端集成sipLite或iaxLite软电话。
做CRM软件的公司可以在自己的软件中集成软电话。
TeleMarketing电话营销行业,可以基于上述接口让软电话自动外拨号码簿。
UniDialer 电话营销助理 是基于本API开发的外拨软件。
严正声明:
sipLite或iaxLite以及本开发接口不得用于呼死你、一声响等恶意骚扰或电话欺诈等任何违法活动。否则,一切后果自负。本站及本人不负任何连带责任。(2010年4月8日 特此声明)
运行上述demo程序后,显示如下窗体:
运行sipLite或iaxLite软电话。
按下上图中的 [RegisterMessage] 按钮,在系统中注册一个windows消息。
按下上图中的 [ConnectToIaxLite] 按钮。若无错误,Label1 将显示为 [iaxLite linked successfully]。 若有错误,Label1 将显示为 [Fail to link]。注意,这一步成功执行是如下其他操作的前提。
假定你的软电话早就注册到asterisk或别的sip 服务器,则在上图中[Phone number to call:]输入框中输入想要呼叫的电话号码后,按下上图中的[call]按钮,将会看到软电话开始呼叫,并且本软件的 Memo1这个列表框中输出软电话的当前呼叫状态。
呼叫接通后,在DTMF digit输入框中输入1位 DTMF 码,按下[senddtmf]键,即可将DTMF送出。需要注意的是,并不是所有的voip中继都支持DTMF。所以,若测试没打到你预期的效果,请先确认你连到的voip服务器线路支持DTMF发送。
按下上图中的[hangup]键,将挂断或取消当前呼叫。
在上图中帐号、密码、服务器地址输入框中输入有效的信息然后按下[register]键,你将看到软电话以你输入的信息注册。该注册信息是暂时的。也就是说,软电话并没有在配置信息中保存该帐号密码等。
按下上图中的[showsetupdlg]键,将弹出软电话设置对话框。
按下上图中的[shutdowniaxLite]键,将关闭 iaxLite 或 sipLite 软电话。
下载:
本文章中描述的完整例子代码
iaxLite sipLite软电话二次开发接口demo源代码 (24)更新日期:2010-04-08


7条评论 ▼