我需要在IVR中拨打分机号。因此,我的freeswitch应用程序将测试PBX扩展。应用程序将拨打IVR(可以运行任何PBX供应商),当PBX接听时,它将拨打分机并运行多个测试,包括测试双向音频,DTMF和其他测试。我的测试方案使用的是正常数字,但是现在我需要扩展它以在IVR中拨打分机号。其中大部分是用Lua编写的
此设置有两个问题:
在建立呼叫后,如何拨打电话分机。尝试了“ send_dtmf”,但是它没有用,或者也许我只是不知道如何使用它。我已经完成了“ send_dtmf”,没有任何反应。 IVR接听电话后拨打分机的最佳方法是什么?
一旦我使这部分工作。我如何等待扩展到 开始执行我的测试脚本之前先回答。我当时想做“ wait_for_silence 200 15 10 5000”,然后执行其余脚本。你怎么看?有更好的方法吗?
答案 0 :(得分:0)
要呼叫键入的分机,应使用名为TIdMessage
或uses
..., IdMessageBuilder;
procedure TfrmSendMail.btnSendClick(Sender: TObject);
var
Strm: TStream;
Bldr: TIdMessageBuilderPlain;
begin
memStatus.Clear;
IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1_2;
IdSSLIOHandlerSocketOpenSSL.SSLOptions.Mode := sslmClient;
IdSSLIOHandlerSocketOpenSSL.SSLOptions.VerifyMode := [];
IdSSLIOHandlerSocketOpenSSL.SSLOptions.VerifyDepth := 0;
IdSMTP.Host := teHost.Text;
IdSMTP.Port := 587;
try
IdMessage.Clear;
IdMessage.From.Address := teFrom.Text;
IdMessage.Recipients.EMailAddresses := teTo.Text;
IdMessage.Subject := teSubject.Text;
Strm := nil;
try
Bldr := TIdMessageBuilderPlain.Create;
try
Bldr.PlainText.Text := memBody.Text;
Bldr.PlainText.Add('Timestamp: ' + FormatDateTime('yyyy-mm-dd hh:nn:ss', Now()));
//if FileExists(beAttachment.Text) then
if not sqlPDFPDF_Incasso.IsNull then
begin
//Bldr.Attachments.Add(beAttachment.Text);
Strm := sqlPDFPDF_Incasso.DataSet.CreateBlobStream(sqlPDFPDF_Incasso, bmRead);
Bldr.Attachments.Add(Strm, 'application/pdf').WantedFileName := 'Invoice.pdf';
end;
Bldr.FillMessage(IdMessage);
finally
Bldr.Free;
end;
finally
Strm.Free;
end;
Screen.Cursor := crHourGlass;
try
IdSMTP.Connect;
try
IdSMTP.Send(IdMessage);
finally
IdSMTP.Disconnect;
end;
memStatus.Lines.Insert(0, 'Email sent - OK.');
finally
Screen.Cursor := crDefault;
end;
except
on E: Exception do
memStatus.Lines.Insert(0, 'ERROR: ' + E.Message);
end;
end;
的应用程序。
接下来,读取所按下的数字,并在此分支上对该数字进行应用(转接/呼叫)。
这不是简单的play and get digits
。
要实现bind digit action
,可以使用名为call extension application
的应用程序。