使用python代碼調用三匯語音卡硬件撥打電話

def push_notification_by_call(voice, worker_phone_num):
    """
    語音提醒
    :param voice: 音頻文件
    :param worker_phone_num: 用戶電話
    :return:
    """
    phone_num = str(worker_phone_num)
    shap3 = ctypes.cdll.LoadLibrary("C:\Windows\SHP_A3.dll")  # 加載動態鏈接庫
    shap3.SsmStartCti(path.join(src, 'ShCti\ShConfig.ini\0'),
                      path.join(src, 'ShCti\ShIndex.ini\0'))  # 初始化驅動
    ch = shap3.SsmSearchIdleCallOutCh(1, 0)  # 搜索空閒通道
    ret_1 = shap3.SsmAddToFileList(ch, voice, -1, 0, -1)  # 向驅動程序提交一個需要播放的語音文件
    ret_2 = shap3.SsmSetPlayVolume(ch, 3)  # 設置播放語音文件的聲音大小
    ret_3 = shap3.SsmPickup(ch)  # 通道摘機
    # shap3.SsmSetCalleeHookDetectP(ch, 6, 48)  # 增強的遠端摘機檢測器參數設置
    # shap3.SsmStartPickupAnalyze(ch)  # 啓動“增強的遠端摘機檢測器”
    ret_4 = shap3.SsmSetWaitAutoDialAnswerTimeEx(ch, 25)  # 設置一個通道等待被叫用戶摘機的最大等待時間
    ret_5 = shap3.SsmAutoDial(ch, phone_num)  # 撥打電話
    start_time = time.time()
    while True:  # 實時查詢當前通道狀態(時間間隔0.1秒)
        time.sleep(0.1)
        # if shap3.SsmGetPickup(ch) == 1:  # 判斷被叫用戶是否摘機
        ret_7 = shap3.SsmGetChState(ch)
        if shap3.SsmGetChState(ch) == 3:
            shap3.SsmPlayFileList(ch)  # 播放已添加的語音文件
        if shap3.SsmGetChState(ch) == 7:
            ret_6 = shap3.SsmGetPendingReason(ch)
            if ret_6 == 0:
                print "未檢測到撥號音, 請檢查是否插電話線"
            # elif ret_6 == 4:
            #     print "通道在“連接”狀態時檢測到對端用戶掛機"
            shap3.SsmStopPlayFileList(ch)  # 停止播放語音文件
            break
        end_time = time.time()
        max_time = end_time - start_time
        if max_time >= 120:  # 設置通話最大時長
            break
    shap3.SsmHangup(ch)  # 通道掛斷
    shap3.SsmClearFileList(ch)  # 關閉並清除已提交給驅動程序的全部語音文件
    shap3.SsmCloseCti()  # 關閉驅動程序

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章