День добрый!
Подскажите, как реализовать запись разговора при трансфере.
Код.
function bridgedLoopHash(peerLeg) external; function callerLeg(parameters,callPending) external; function recordTalk(maxtime, tosend) forward;
function callNumber(phoneNumber,timeOut,from) forward;
entry Main is
if AcceptCall() != null then stop; end if;
timeOut = 10;
from = "?????????????";
group = NewArray();
group[0] = "?????????????";
group[1] = "?????????????";
count = Length(group);
called = false;
if count > 0 then
index = 0;
shift = RandomNumber() % count;
while index < count and then timeOut > 0 loop
member = group[(index + shift) % count];
called = callNumber(member, timeOut, from);
exitif called;
index = index + 1;
end loop;
end if;
if not called then RejectCall("408-no answer"); end if;
end entry;
function callNumber(phoneNumber,timeOut,from) is parameters = NewDictionary();
parameters.("") = EmailToSIPURI(phoneNumber); parameters.activeSide = false; parameters.From = EmailToSIPURI(from); parameters.("Expires") = timeOut; parameters.bridgedCall = true; parameters.("Call-ID") = PendingRequestData("Call-ID") + ".gr_ser"; parameters.("Max-Forwards") = PendingRequestData("Max-Forwards")-1;
tmp=recordTalk(60, "?????????????");
//<<<----------------------------------
peerLeg = callerLeg(parameters,false);
if not IsTask(peerLeg) then return false; end if;
while IsConnected() loop
input = bridgedLoopHash(peerLeg);
exitif input != "#";
end loop;
return true;
end function;
function recordTalk(maxtime, tosend) is
fromWhom = RemoteURI();
Talk = Record(maxtime);
if IsData(Talk) then
content = NewArray();
textPart = NewDictionary();
textPart.("Content-Type") = "text"; textPart.("Content-Subtype") = "html"; textPart.body = "<HTML><BODY>"+fromWhom+"</BODY></HTML>";content[0] = textPart;
dataPart = NewDictionary();
dataPart.("Content-Type") = "audio"; dataPart.("Content-Subtype") = "wav"; dataPart.body = Talk;
headers = NewDictionary();
headers.("Content-Class") = "message";
tmp=SendEmail(String(tosend),fromWhom,String(tosend),headers,content);
if(tmp) then return true;
else return false;
end if;
end if;
return false;
end function;
В таком виде, CGP начинает запись до соединения, если вставить строчку
tmp=recordTalk(60, "?????????????");
после peerLeg = callerLeg(parameters,false); , то соединение разрывается.
С уважением Никитин Андрей Получено Mon Jun 18 10:15:08 2007
Этот архив был сгенерирован hypermail 2.1.8 : Mon 18 Jun 2007 - 15:13:52 MSD