-
Notifications
You must be signed in to change notification settings - Fork 1
/
ClientVoice.php
185 lines (160 loc) · 7.67 KB
/
ClientVoice.php
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
<?php
/**
* Created by PhpStorm.
* User: Ignatenkov Nikita
* Site: http://IgnatenkovNikita.ru/
* Date: 20.03.2016
* Time: 22:47
*/
namespace ignatenkovnikita\digitaldirectivr;
use yii\base\Component;
use yii\helpers\ArrayHelper;
use yii\httpclient\Client;
use yii\httpclient\Response;
class ClientVoice extends Component
{
/** @var string $login */
public $login;
/** @var string $pass */
public $pass;
/** @var string $url */
public $url;
/** @var Client $_client */
private $_client;
public function init()
{
$this->_client = new Client([
'baseUrl' => $this->url,
'requestConfig' => [
'format' => Client::FORMAT_URLENCODED
],
'responseConfig' => [
'format' => Client::FORMAT_JSON
],
]);
parent::init(); // TODO: Change the autogenerated stub
}
/**
* Private method to send request for all methods
* @param $url
* @param $params
* @param string $format
* @return Response
*/
private function _send($url, $params, $format = 'post')
{
$data = ArrayHelper::merge([
'login' => $this->login,
'pass' => $this->pass
], $params);
return $this->_client->createRequest()->setUrl($url)->setMethod($format)->setData($data)->send();
}
public function sendMessage($params)
{
/** @var Response $response */
$response = $this->_send('submit_acmessage', $params, 'post');
return [
'status' => $response->isOk,
'response' => $response->content,
'message' => $this->getError('errorsForSendMessage', $response->content)
];
}
public function sendMessages()
{
// todo implement
}
public function uploadVoiceFile()
{
// todo implement
}
public function listVoiceFiles()
{
// todo implement
}
public function deleteVoiceFile()
{
// todo implement
}
public function listZoneTariff()
{
// todo implement
}
public function statusOneMessage($mid)
{
/** @var Response $response */
$response = $this->_send('status_acmessage', ['mid' => $mid], 'post');
return [
'status' => $response->isOk,
'response' => $response->content,
'message' => $this->getError('errorsForStatusOneMessage', $response->content)
];
}
public function statusMessages()
{
// todo implement
}
/**
* Method return error text
* @param $name string name array to find
* @param $code integer code error
* @return mixed
*/
public function getError($name, $code)
{
$errors = call_user_func('self::' . $name);
return ArrayHelper::getValue($errors, $code);
}
protected function errorsForSendMessage()
{
return [
1 => 'Внутренняя ошибка',
100 => 'Не все поля (параметры) были указаны',
200 => 'Неверный логин/пароль, либо пользователь не является «особенным» - необходим Статус «привилегированного пользователя»',
210 => 'Запрос с неразрешенного IP',
300 => 'Некорректно введен адрес назначения (длина MSISDN меньше 10 символов или более 12 символов)',
400 => 'Некорректно введен исходный адрес (параметр «from»)',
500 => 'TTS текст сообщения не в utf-8;',
600 => 'tts_text или file_id не были указаны, либо были указаны одновременно',
700 => 'Проблемы с тарификацией сообщений (не достаточно денег, необходимо проверить баланс и соотв. тарифный план)',
800 => 'Некорректно указан адрес назначения (возможная причина - регион получателя не идентифицирован)',
900 => 'Отправить сообщение невозможно (Абонент находится в «черном» списке)',
1000 => 'Неверный формат даты startdate',
1100 => 'Найдены стоп слова',
2100 => 'Отсутствуют права на создание IVR сообщения',
2200 => 'Указанный file_id не найден или некорректен.',
2300 => 'Autocall_successfull_call_le ngth меньше 1, или больше 600',
2500 => 'Указаны menu_button, но не указан tts_menu или file_menu',
2600 => 'Команда для menu_button содержит символы [a-zA-Z], но не является "term" или "repeat"',
2700 => 'Команда для menu_button содержит только цифры, но не является валидным номером телефона',
2800 => 'Значение параметра tts_menu задано в кодировке, отличной от UTF-8',
2900 => 'Файл с указанным id для file_menu не найден',
3000 => 'Запрещена опция перевода звонка на оператора',
3100 => 'При указанном tts_menu или file_menu отсутствует хотя бы один menu_button',
3200 => 'Значение autocall_max_attempts указано вне диапазона [1…12]'
];
}
/**
* Return array errors for one is method
* @return array
*/
protected function errorsForStatusOneMessage()
{
return [
1 => 'Внутренняя ошибка',
100 => 'Не все поля (параметры) были указаны',
200 => 'Неверный логин/пароль, либо пользователь не является «особенным» - необходим Статус «привилегированного пользователя»',
300 => 'MID <= 0 (идентификатор указан некорректно)',
400 => 'Сообщение с указанным ID не найдено или сообщение находится в обработке (т.е. состояние рассылки, в которую входят номера телефонов, имеет одно из состояний: «постановка в очередь», «подтверждена (ожидает начала)» или «завершается»)',
2100 => 'Для пользователя не включен функционал голосовых рассылок'
];
}
protected function successForStatusMessage()
{
return [
0 => 'Успешный звонок (абонент дослушал до successful_call_length)',
1 => 'Не доставлено (не дозвонились + ошибки от шлюза: неверный номер отправителя, неверный номер адресата)',
2 => 'Статус сообщения неизвестен (статистика от шлюза отсутствует)',
3 => 'Звонок доставлен (произошел факт снятия трубки абонентом)',
];
}
}