-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathCall.php
More file actions
135 lines (135 loc) · 4.21 KB
/
Call.php
File metadata and controls
135 lines (135 loc) · 4.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<?php
/**
*
* Класс для осуществления звонков по VOIP
*
* В папке Call лежит файл linphonerc он является конфигурационным файлом
* для звонилки
*
* @depends linphone-noc
* @depends perl
* @depends lame
* @author NuR
*
*
*/
//TODO: NuR:бОльшая конфигурабельность кода
class Evil_Call implements Evil_TransportInterface
{
/**
* Звонок через VOIP
* @param string $phone
* @param string $file
* @return bool
*/
public static function Call ($phone, $messageToSay)
{
if (self::_validate($phone)) {
$tmpFile = tempnam('', __CLASS__ . '_');
/**
* перегоняем текст в mp3
*/
if (Evil_Speech::textToSpeech($messageToSay, $tmpFile)) {
/**
*
* перегоняем mp3 в wav
* @var string
*/
$prepearedFile = self::_prepareFile($tmpFile);
/**
* если файл сконвертился успешно пытаемся позвонить
*/
if (false !== $prepearedFile) {
/**
* делаем звонок
*/
$folderName = pathinfo(__FILE__, PATHINFO_DIRNAME) . '/Call/';
chdir($folderName);
$linphoneCmd = sprintf('perl %slinphone.pl %s %s',
$folderName, escapeshellarg($phone), $prepearedFile);
/**
* системный вызов нашего скрипта для звонка
*/
ob_start();
system($linphoneCmd, $status);
$output = ob_get_clean();
unlink($prepearedFile);
if (0 == $status) {
return true;
} else {
Evil_Log::log(__CLASS__ . ': ' . $output,
Zend_Log::CRIT);
return false;
}
} else {
Evil_Log::log(
__CLASS__ . ': не смогли сконвертировать mp3 в wav',
Zend_Log::CRIT);
return false;
}
} else {
Evil_Log::log(
__CLASS__ .
': не смогли сконвертировать текст в звуковое сообщение',
Zend_Log::CRIT);
return false;
}
}
}
/**
*
* Звонок для сообщения что осталось жить 7 дней
* @author NuR
* @param string $phone
* @return bool
*/
public static function sevenDays ($phone)
{
return self::Call($phone, 'Тебе осталось жить 7 дней');
}
/**
*
* подготовка файла
* перегонка из mp3 в wav например
* @param string $file
* @return string $file
*/
private static function _prepareFile ($file)
{
$lameCmd = 'lame --decode --mp3input ' . escapeshellarg($file);
ob_start();
system($lameCmd, $status);
$output = ob_get_clean();
unlink($file);
if (0 == $status) {
return $file . '.wav';
}
return false;
}
/**
* отправка сообщения
* @see Evil_TransportInterface::send()
*/
public function send ($to, $message)
{
return $this->Call($to, $message);
}
/**
* (non-PHPdoc)
* @see Evil_TransportInterface::init()
*/
public function init (array $config)
{}
/**
*
* валидация номера телефона
* @param string $phoneNumber
* @return bool
*/
private function _validate ($phoneNumber)
{
$pattern = '/^([0-9]+)([0-9]+)$/';
$vlidator = new Zend_Validate_Regex($pattern);
return $vlidator->isValid($phoneNumber);
}
}