我的网上记事本
« »

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);
begin

UserMessage := RegisterWindowMessage(UserMessageStr);

end;

  • 与软电话建立通讯。从windows编程的角度上来讲,将自身的句柄通过消息广播的方式传送给软电话,并获取软电话这个进程的句柄。

function TForm1.ConnectToIaxLite():boolean;
var

i : integer;

begin

result:=false;

UserWindowHandle:=0;

try

if UserWindowHandle = 0 then
begin

SendMessage(HWND_BROADCAST,UserMessage,handle,0);
i:=1;
while(i<=20) and (UserWindowHandle=0) do
begin

application.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);
begin

if ((Message.Msg = UserMessage) and (Message.wParam <> Handle)) then
begin

UserWindowHandle := Message.wParam;
ReplyMessage(0);

end;

inherited;

end;

  • 调用 ConnectToIaxLite 函数与iaxLite或sipLite建立联系

procedure TForm1.Button2Click(Sender: TObject);
begin

label1.Caption := ”;

if ConnectToIaxLite()=true then
begin

label1.Caption := ‘iaxLite linked successfully’;

end
else
begin

label1.Caption := ‘Fail to link’;

end;

end;

  • 给iaxLite或sipLite通过 WM_COPYDATA 消息发送数据的例程. 最最重要. 急急如律令 :)

procedure TForm1.SendDataToIaxLite(i_Handle:integer; str_Data:string);
var

ds: 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);
var

str_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);
begin

SendDataToIaxLite(Form1.handle, ‘hangup‘);

end;

  • 发送 DTMF

procedure TForm1.Button7Click(Sender: TObject);
var

chr_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);
var

str_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);
begin

SendDataToIaxLite(Form1.handle,’showsetupdlg‘);

end;

  • 关闭软电话

procedure TForm1.Button5Click(Sender: TObject);
begin

SendDataToIaxLite(Form1.handle, ‘shutdown‘);

end;

  • 接收软电话的呼叫状态

procedure TForm1.Mymessage(var t: TWmCopyData);
var

str_Status:string;

begin

if t.From = UserWindowHandle then
begin

str_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

日志信息 »

该日志于2010-04-07 17:09由 admin 发表在我的作品分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

7条评论

  1. 晨风 说:

    不能下载?正需要这方面的资料。

  2. P2P 说:

    不能下载

  3. admin 说:

    登陆即可下载

发表评论 »

返回顶部