<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">
<HTML>
<HEAD>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=UTF-8">
  <META NAME="GENERATOR" CONTENT="GtkHTML/3.0.4">
</HEAD>
<BODY>
[I tried to submit this last night, but it was too big. I'm splitting my post now into two<BR>
halves, hope they fit. -- SM]<BR>
<BR>
Hello---<BR>
<BR>
Got the itch today, been thinking about it for a while... so I made an attempt at <BR>
finishing the privacy code that Mark started a while back.<BR>
<BR>
I don't know if someone else has already submitted this / is working on this / will be <BR>
insulted if I present this /&nbsp; etc.&nbsp; but here we go...<BR>
<BR>
Caveats:<BR>
<BR>
I just finished writing this stuff up. I haven't really even compiled the stuff yet. I'm submitting<BR>
it just to see if I'm approaching the problem correctly. I could be way off, and before I start <BR>
debugging and spend a week wasting my time on it, I'd at least like to know I'm in the<BR>
ball park! If you think you can just plug this in and recompile asterisk, and it will work, <BR>
you are totally wrong! I'm certain it's full of gaffers so big, I'll be laughed out of programming<BR>
school forever. Don't waste your time. But, if you want to, and tell me about my flaws,<BR>
I'll be thankful. Or, if you think you could do better, feel free to do so, whether you use<BR>
my stuff for a start, or just toss it and recode it up your way, it matters not to me.<BR>
<BR>
<BR>
Explanations:<BR>
<BR>
After thinking things thru, I began to fully (perhaps) comprehend why Mark added the privacy<BR>
option in the dial command. It became clear to me that the point to make a decision about how<BR>
to handle the call would occur after the incoming caller chose an actual extension, and before the<BR>
person being called was actually bridged to the incoming caller channel. This is in the bowels<BR>
of app_dial.c.<BR>
<BR>
So, if the privacy option is set, there are two places in the dial_exec function where you want to<BR>
handle things. The first is near the beginning, where there is already code for the privacy option.<BR>
In this spot, you can check the privacy db against the caller id. If it is KILL or TORTURE, there is <BR>
no point in continuing the dial process. The called person is just not interested in getting this call.<BR>
If the setting is DENY, then, return as if the dial returned with no answer.&nbsp; If UNKNOWN, then here is a<BR>
good time to prompt the caller for his &quot;introduction&quot;, and record his intro to a file, if they haven't<BR>
already done so.<BR>
<BR>
Then, the next place to put code, is just before you bridge the two channels together. At this point, <BR>
the called extension has been rung, and the called person has picked up the line. At this point, the<BR>
&quot;Announce&quot; file is played, and if the Privacy option was set, here is a good point to insert these actions:<BR>
&nbsp;&nbsp;&nbsp; 1. Tell the called person a caller is present, who is not in the database. Play their<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; introduction we just recorded. <BR>
&nbsp;&nbsp;&nbsp; 2. Give the called person a list of options:<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. Caller is OK, mark as ALLOW in db, and finish the bridge.<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. Send this caller to VM now, and forevermore.<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3. Send this caller to the Torture Script context now, and forevermore.<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4. Send this caller a more brief and humane telemarketer &quot;go away and don't come back&quot; <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; context now, and forevermore.<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5. Mark this caller as ALLOW in the db, but send them to voicemail&nbsp; right now.<BR>
&nbsp;&nbsp;&nbsp; 3. Collect the user response, loop the prompt until they give a correct response. Then apply<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the proper action to the response. Let the call bridge for ALLOW.&nbsp; Act like the line was<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unanswered for DENY (should go to VM). Switch context to the &quot;kill_context&quot; for KILL,<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; or the &quot;torture_context&quot; if it is TORTURE. <BR>
<BR>
I added two variables to the privacy.conf file, the &quot;kill_context&quot; and &quot;torture_context&quot; variables. These<BR>
specify a string that should be a defined context in extensions.conf.<BR>
<BR>
Uh, don't think I followed the existing formatting totally, but that's pretty cosmetic. I used existing<BR>
examples in other files to do some tasks, and may have included unnecc. code insodoing.<BR>
<BR>
And, I may be making spectacularly bad structural mistakes, and for this I beg your review, to make<BR>
sure I'm just not hacking it the wrong way, and making a mess of the whole thing for myself.<BR>
<BR>
I don't know what the caller will hear while Asterisk converses with the target called person. Will they <BR>
hear the ringing/ moh?&nbsp; or just Nothing? I'm hoping ringing or moh, because the called user might<BR>
be a bit slow to make a decision... maybe listening to the options two or three times, etc. I haven't coded anything around this, but it may require attention,<BR>
I don't know.<BR>
<BR>
Haven't recorded the prompts yet, but that will be pretty simple, and won't take long... although for <BR>
the sake of Asterisk, getting the same HQ female voice as the voicemail stuff might make it much<BR>
more palatable.<BR>
<BR>
So, is this the right approach, everyone?<BR>
<BR>
murf<BR>
<BR>
</BODY>
</HTML>