[asterisk-users] URgent - capturing 'answered'

Zarko Zivanovic outlaw011 at gmail.com
Mon Jul 26 12:06:52 CDT 2010


Hello Steve,
I did as you said - no luck. here's a snippet from the script that i use and
the code you sent is in there:






class TvrClient

	
	
########## LOKAL	
	private	
	def lokal
		call_log_id = nil
		begin
			call_log_id = call_log()
		
			$agi.answer
		
		
			local_channels = get_locals()
			dial_params = local_channels.join('&')
			dial_params << "||m(moh-0900-#{@moh_id})" if
moh_available?()

			1.times do
				r = $agi.exec('DIAL', dial_params)
				r = $agi.get_variable('DIALSTATUS')
				$agi.execute('Set(LOC=${CDR(dstchannel)})')
				retry if r.message.include?('BUSY')
			end
			

		ensure
			call_log(call_log_id) unless call_log_id.nil?
		end
	end
	 
	private
	def get_locals
		local_channels = @locals.map { |x| 'SIP/vaso&Zap/' + x.strip
}
		# FIX - 
		raise " settings for telephone_id =
#{@settings_row['telephone_id']}" if local_channels.empty?
		local_channels
	end	


##########


	private
	def moh_available?	
		return false if @settings_row['moh'].strip.empty?
		moh_file = $config[:tvr][:user_sounds_base_folder] + '/' +
@tel_serv_row['tel.account_id'] + '/' + @settings_row['moh'].strip
		File.exists?(moh_file)
	end
	
	private
	def get_moh_file
		moh_file = $config[:tvr][:user_sounds_base_folder] + '/' +
@tel_serv_row['tel.account_id'] + '/' +
File.basename(@settings_row['moh'].strip, '.*')
	end

	private
	def call_log(call_log_id=nil)
		if call_log_id.nil?
			query = <<-QUERY
				INSERT INTO call_log SET
					starttime = NOW(),
					account_id =
#{@tel_serv_row['tel.account_id']},
					telephone_id = #{@tel_id},
					
					service_id =
#{@tel_serv_row['tel.service_id']},
					service_name =
'#{$my.quote(@tel_serv_row["ser.name"].to_s)}',
					service_type =
'#{$my.quote(@tel_serv_row["ser.type"].to_s)}',
					tvr_type =
#{@settings_row['tvr_type']},
					
					category_id =
#{@tel_serv_row['tel.category_id']},
					category_asw =
#{@categories_row['asw']},
					category_telekom =
#{@categories_row['telekom']},
					
					price =
#{@tel_serv_row['tel.price']},
					
					request =
'#{$my.quote($agi.request.to_s)}',
					channel =
'#{$my.quote($agi.channel.to_s)}',
					language =
'#{$my.quote($agi.language.to_s)}',
					type =
'#{$my.quote($agi.type.to_s)}',
					uniqueid =
'#{$my.quote($agi.uniqueid.to_s)}',
					callerid =
'#{$my.quote($agi.callerid.to_s)}',
					dnid =
'#{$my.quote($agi.dnid.to_s)}',
					rdnid =
'#{$my.quote($agi.rdnid.to_s)}',
					context =
'#{$my.quote($agi.context.to_s)}',
					extension =
'#{$my.quote($agi.extension.to_s)}',
					priority =
'#{$my.quote($agi.priority.to_s)}',
					enhanced =
'#{$my.quote($agi.enhanced.to_s)}',
					accountcode =
'#{$my.quote($agi.accountcode.to_s)}',
					callingpres =
'#{$my.quote($agi.callingpres.to_s)}',
					callingani2 =
'#{$my.quote($agi.callingani2.to_s)}',
					callington =
'#{$my.quote($agi.callington.to_s)}',
					callingtns =
'#{$my.quote($agi.callingtns.to_s)}'
				QUERY
		
			$my.select_db('tvr2')
			$my.query(query)
			raise 'Ne mogu da se upisem u call_log!' if
$my.affected_rows() != 1
			return $my.insert_id
		else
			$my.select_db('tvr2')
			loc = $agi.get_variable('LOC')
			$my.query("UPDATE call_log SET local = #{loc},
endtime = NOW() WHERE id = #{call_log_id}")
			raise 'Ne mogu da se ispisem iz call_log-a:
call_log_id = #{call_log_id}' if $my.affected_rows() != 1
		end
		nil
	end


end








Maybe you figure out something.

Zarko








-----Original Message-----
From: asterisk-users-bounces at lists.digium.com
[mailto:asterisk-users-bounces at lists.digium.com] On Behalf Of Steve Davies
Sent: Monday, July 26, 2010 6:48 PM
To: Asterisk Users Mailing List - Non-Commercial Discussion
Subject: Re: [asterisk-users] URgent - capturing 'answered'

On 26 July 2010 17:27, Zarko Zivanovic <outlaw011 at gmail.com> wrote:
> I tried this:
>
>
>
> loc = $agi.get_variable('EXTEN')
>
> $my.query("UPDATE call_log SET local = #{loc}, endtime = NOW() WHERE id =
> #{call_log_id}")
>
>
>
> No success. Anybody please help!
>
>
> -----Original Message-----
> From: asterisk-users-bounces at lists.digium.com
> [mailto:asterisk-users-bounces at lists.digium.com] On Behalf Of Leif Madsen
> Sent: Monday, July 26, 2010 3:44 PM
> To: asterisk-users at lists.digium.com
> Subject: Re: [asterisk-users] URgent - capturing 'answered'
>
> On 10-07-26 08:10 AM, Zarko Zivanovic wrote:
>> Hello Steve and thanks for your answer,
>> However I tried:
>>
>> $my.query("UPDATE call_log SET local='#{CDR(dstchannel)}', endtime =
NOW()
>> WHERE id = #{call_log_id}")
>>
>> And it does write nothing to the database.
>>
>> I guess there is a error in ruby expression above but I am not sure what
> is
>> wrong - if you have any idea please help.
>
> If that is your literal quote, then I think you need to change the # to a
$
> as
> Asterisk dialplan functions and variables start with ${ vs #{
>
> Unless that is some special indication in SQL that I'm unfamiliar with.
>
> Leif Madsen.


The "#" prefix is probably something to do with the combination of
Ruby, MySQL and AGI - I am not particularly familiar with Ruby.

You do not say at what stage when you call your AGI in the call path,
and at what stage you access the database.

1) Use AGI In order to make the call, and do not exit AGI until after
the call is over:
2) Call AGI after call is over

In case 1) you'll need the following somewhere in your script after
the call is answered or completed.
    $agi.execute('Set(LOC=${CDR(dstchannel)})')
In case 2) just put
    Set(LOC=${CDR(dstchannel)})
in your dialplan before calling the AGI

Then in your script try:
   loc = $agi.get_variable('LOC')

CDR() is a built-in function rather than a variable, hence the need
for the indirection.

I am still guessing a bit here... Good luck.

Cheers,
Steve

-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
New to Asterisk? Join us for a live introductory webinar every Thurs:
               http://www.asterisk.org/hello

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users
 

__________ Information from ESET NOD32 Antivirus, version of virus signature
database 5314 (20100726) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com
 
 

__________ Information from ESET NOD32 Antivirus, version of virus signature
database 5315 (20100726) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com
 




More information about the asterisk-users mailing list