日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python startswitch_使用python esl 实现FreeSWITCH自动外呼

發布時間:2025/3/15 python 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python startswitch_使用python esl 实现FreeSWITCH自动外呼 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用python esl 實現FreeSWITCH自動外呼

tags:FreeSWITCH python 自動外呼 創建時間:2016-03-19 09:37:39

以下項目開源于:

https://github.com/nwaycn/nway_ac

代碼:

```python

# coding=utf-8

__author__ = 'lihao,18621575908'

''

版權所有:上海寧衛信息技術有限公司

功能說明:本程序只適用于落地與落地間消化話費,而不適用于其它騷擾類型的應用

授權模式:GPL

bug report:lihao@nway.com.cn

''

import time

import thread

import os,sys

import psycopg2

from ESL import *

import string

import datetime

import random

mylock = thread.allocate_lock()

#global var

fs_ip = '127.0.0.1'

fs_esl_port = '8021'

fs_esl_auth = 'ClueCon'

rings = []

global ring_count

ring_count = 0

max_call = 30

base_path = '/usr/local/src/nway_ac/nway_ac/'

gateway_url = 'sofia/gateway/tojp/'

#//global var

def GetDbConn():

conn = psycopg2.connect(database="nway_ac", user="postgres", password="nway_2398488485And", host="127.0.0.1", port="5432")

return conn

def GetCurrentPath():

return os.getcwd()

def SetAllIdle():

conn = GetDbConn()

querysql = 'UPDATE callout_numbers SET callout_state=0, last_call_time=current_timestamp ;'

cur = conn.cursor()

cur.execute(querysql)

conn.commit()

print 'SetNumberIdle:ALL'

cur.close()

conn.close()

def GetBaseConfig():

conn = GetDbConn()

querysql = 'SELECT config_name, config_param FROM base_config;'

cur = conn.cursor()

cur.execute(querysql)

rows = cur.fetchall()

conn.commit()

for row in rows:

config_name = row[0]

if (cmp(config_name , 'max_call') == 0):

max_call = row[1]

if (cmp(config_name , 'base_path')==0):

base_path = row[1]

if (cmp(config_name , 'gateway_url')==0):

gateway_url = row[1]

print 'max_call:' + max_call

print 'base_path:' +base_path

print 'gateway_url:'+ gateway_url

cur.close()

conn.close()

def SetNumberBusy(dest_number):

conn = GetDbConn()

querysql = 'UPDATE callout_numbers SET callout_state=1 WHERE call_numbers =\' + dest_number +'\'

cur = conn.cursor()

cur.execute(querysql)

conn.commit()

print 'SetNumberBusy:' +dest_number

cur.close()

conn.close()

def CheckCallTime():

conn = GetDbConn()

querysql = 'SELECT a.id, a.start_time, a.stop_time,b.id \

FROM time_plan a, nway_call_tasks b where (now()::time > a.start_time ) and ' \

'(now()::time < a.stop_time) and (now() b.begin_time);'

cur = conn.cursor()

cur.execute(querysql)

rows = cur.fetchall()

ret_value = False

if cur.rowcount > 0:

ret_value = True

conn.commit()

cur.close()

conn.close()

return ret_value

def CallOut(dial_string,call_number):

con = ESLconnection(fs_ip, fs_esl_port, fs_esl_auth)

if con.connected():

e = con.api(dial_string)

SetNumberBusy(call_number)

print e.getBody()

else:

print 'not Connected'

con.disconnect();

def GetRingPath():

#print 'ring count:' .join(str(rings.count()))

global ring_count

index = random.randint(0,ring_count -1)

print 'ring count:' + str(ring_count) + ',this index:'+ str(index)

return rings[index]

def GetRandomTimeout():

timeout =500

timeout = random.randint(200,1000)

return timeout

def AutoCall(a,b):

print 'Start Auto Calls'

while True:

try:

conn = GetDbConn()

if CheckCallTime()==True:

querysql = 'SELECT a.id, a.call_numbers,a. call_timeout, a.call_ring_id, a.callout_state, \

a.is_enable, a.last_call_time\

FROM callout_numbers a where a.is_enable=True and' \

' a.callout_state =0 \

OR (ceil(abs(extract(epoch from current_timestamp -a.last_call_time))) > a.call_timeout)'

#print querysql

cur = conn.cursor()

cur.execute(querysql)

rows = cur.fetchall()

for row in rows:

print cur.rowcount

call_number = row[1]

call_timeout = row[2]

call_ring_id = row[3]

ring_path = base_path + GetRingPath()

dial_string = 'originate {execute_on_answer=\'sched_hangup +' + str(GetRandomTimeout()) + '\'}'+gateway_url + \

call_number + ' &endless_playback(\' + ring_path + '\')'

CallOut(dial_string, call_number)

print dial_string

time.sleep(0.060)

SetNumberBusy(call_number)

conn.close()

except:

print 'access database failed\n'

time.sleep(0.10)

#print 'CheckCallTime'

#conn.close()

thread.exit_thread()

def GetAllRings():

conn = GetDbConn()

querysql = 'SELECT ring_path from call_rings;'

cur = conn.cursor()

cur.execute(querysql)

rows = cur.fetchall()

#ring_count = rows.rowcount

#count=0

global ring_count

for row in rows:

rings.append(row[0])

ring_count += 1

# print row[0]

for i in rings:

print i

# ring_count = count

print 'ring_count:' + str(ring_count)

conn.commit()

cur.close()

conn.close()

def SetNumberIdle(dest_number):

conn = GetDbConn()

querysql = 'UPDATE callout_numbers SET callout_state=0, last_call_time=current_timestamp WHERE call_numbers =\' + dest_number +'\'

cur = conn.cursor()

cur.execute(querysql)

conn.commit()

print 'SetNumberIdle:' + dest_number

cur.close()

conn.close()

if __name__ == '__main__':

GetBaseConfig()

#str='python- String function'

#print '%s startwith t=%s' % (str,str.startswith('t'))

#print '%s' % (str.replace('-','))

SetAllIdle()

GetAllRings()

con = ESLconnection(fs_ip, fs_esl_port, fs_esl_auth)

if con.connected():

thread.start_new_thread(AutoCall,(1,1))

e = con.events('plain','CHANNEL_HANGUP_COMPLETE')

while True:

ee = con.recvEvent()

#print ee

if ee:

my_number = ee.getHeader('Caller-Caller-ID-Number')

dest_number = ee.getHeader('Caller-Destination-Number')

if dest_number is None:

continue

SetNumberIdle(dest_number)

#在此處處理掛機事件

con.disconnect();

```

上海老李,QQ:1354608370,FreeSWITCH QQ群:

總結

以上是生活随笔為你收集整理的python startswitch_使用python esl 实现FreeSWITCH自动外呼的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 999成人网| 国产精品野外户外 | 本田岬av| 国产91亚洲 | 动漫av网 | 国产成人免费在线 | 欧美另类videossexo高潮 | 日韩欧美国产电影 | 国产天堂网 | 国偷自拍第113页 | 男性影院| 麻豆成人在线观看 | 免费一级片 | 久久99精品国产91久久来源 | 五月丁香啪啪 | 爱爱激情网 | 91精品国产高清 | 丰满人妻一区二区三区免费视频 | 麻豆精品免费视频 | 国产人妻久久精品一区二区三区 | 麻豆国产91在线播放 | 精品人伦一区二区三区蜜桃免费 | www.youjizz日本| 久久综合干 | 在线观看欧美国产 | 婷婷色五| 欧美视频中文字幕 | 手机看片91| 国产女人被狂躁到高潮小说 | 亚洲热在线观看 | av大全在线 | 日本人妻不卡一区二区三区中文字幕 | 在线99视频| 啪啪网站免费 | 亚洲v日本 | 免费色网址 | 1000部啪啪| 黄页在线观看 | 亚洲精品一二区 | 亚洲欧美不卡 | 99在线精品视频免费观看20 | www.亚洲色图 | 亚洲大逼 | 狠狠精品干练久久久无码中文字幕 | 国产毛片一区二区三区va在线 | 在线观看小视频 | 最新版天堂资源在线 | 岛国精品一区 | wwwww在线观看 | 大胸喷奶水www视频妖精网站 | 亚洲拍拍视频 | 欧美不卡视频在线观看 | 久色婷婷 | 超碰在线网 | 第一色网站 | 亚洲青色在线 | 国产精品黄色大片 | 免费日韩av | 美女的隐私免费看 | 男女一级黄色 | 久久国产美女视频 | 黄色在线不卡 | 日本中文字幕在线 | 久久久久三级 | 99视频在线看 | av片在线免费观看 | 午夜成人亚洲理伦片在线观看 | 五月天综合久久 | 亚洲色图图片区 | 性——交——性——乱免费的 | 男生插女生的网站 | 日av在线播放 | 九九热最新视频 | 在线看片 | 在线观看污视频网站 | 中文字幕在线一区 | 熟睡侵犯の奶水授乳在线 | 九九热在线观看视频 | 亚洲av片一区二区三区 | 亚洲永久免费观看 | 大地资源二中文在线影视观看 | 天堂av资源在线 | 精品一区二区视频在线观看 | av资源网址| 久久久久久久久久久久久久国产 | 午夜资源站| 美女131爽爽爽做爰视频 | 日产精品久久久一区二区 | 美女狂揉羞羞的视频 | 国产吞精囗交久久久 | 一级欧美视频 | 国产精品九九热 | 日韩欧美一区二区三区久久婷婷 | 精品久久久久久久久久久 | 欧美专区日韩专区 | 国产精品伦理一区 | 欧美日韩亚洲国产精品 | 欧美日韩免费观看一区=区三区 | 国产女主播一区 |