1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
smsmanager.php
См. документацию.
1<?php
2namespace Bitrix\MessageService\Sender;
3
4use Bitrix\Main;
5use Bitrix\Main\Event;
6use Bitrix\Main\EventResult;
7use Bitrix\Main\Result;
8use Bitrix\MessageService\Internal\Entity\MessageTable;
9use Bitrix\MessageService\Message;
10use Bitrix\MessageService\MessageType;
11use Bitrix\Main\ORM\Data\AddResult;
12use Bitrix\MessageService\Sender\Result\SendMessage;
13
15{
16 public const ON_MESSAGE_SUCCESSFULLY_SENT_EVENT = 'OnMessageSuccessfullySent';
17
18 private static $senders;
19
23 public static function getSenders()
24 {
25 if (self::$senders === null)
26 {
27 self::$senders = [];
28
29 if (Sms\Twilio::isSupported())
30 {
31 self::$senders[] = new Sms\Twilio();
32 }
33 if (Sms\Twilio2::isSupported())
34 {
35 self::$senders[] = new Sms\Twilio2();
36 }
37 if (Sms\SmsLineBy::isSupported())
38 {
39 self::$senders[] = new Sms\SmsLineBy();
40 }
41 if (Sms\MfmsRu::isSupported())
42 {
43 self::$senders[] = new Sms\MfmsRu();
44 }
45 if (Sms\Rest::isSupported())
46 {
47 self::$senders[] = new Sms\Rest();
48 }
49 if (Sms\SmscUa::isSupported())
50 {
51 self::$senders[] = new Sms\SmscUa();
52 }
53 if (Sms\ISmsCenter::isSupported())
54 {
55 self::$senders[] = new Sms\ISmsCenter();
56 }
57
58 $sender = new Sms\SmsRu();
59 if (Sms\SmsRu::isSupported() || $sender->isRegistered())
60 {
61 self::$senders[] = $sender;
62 }
63
64 $sender = new Sms\SmsAssistentBy();
65 if (Sms\SmsAssistentBy::isSupported() || $sender->isRegistered())
66 {
67 self::$senders[] = $sender;
68 }
69
70 $sender = new Sms\SmsEdnaru();
71 if (Sms\SmsEdnaru::isSupported() || $sender->isRegistered())
72 {
73 self::$senders[] = $sender;
74 }
75
76 $sender = new Sms\Ednaru();
77 if (Sms\Ednaru::isSupported() || $sender->isRegistered())
78 {
79 self::$senders[] = $sender;
80 }
81
82 $sender = new Sms\EdnaruImHpx();
83 if (Sms\EdnaruImHpx::isSupported() || $sender->isRegistered())
84 {
85 self::$senders[] = $sender;
86 }
87
88 self::fireSendersEvent();
89 }
90 return self::$senders;
91 }
92
93 private static function fireSendersEvent()
94 {
95 $event = new Event('messageservice', 'onGetSmsSenders');
96 $event->send();
97 foreach ($event->getResults() as $result)
98 {
99 if ($result->getType() === EventResult::ERROR)
100 {
101 continue;
102 }
103 $resultData = $result->getParameters();
104 if (is_array($resultData))
105 {
106 foreach ($resultData as $sender)
107 {
108 if (
109 $sender instanceof Base
110 && $sender->getType() === MessageType::SMS
111 && $sender::isSupported()
112 )
113 {
114 self::$senders[] = $sender;
115 }
116 }
117 }
118 }
119 }
120
124 public static function getSenderSelectList()
125 {
126 $select = array();
127 foreach (static::getSenders() as $sender)
128 {
129 $select[$sender->getId()] = $sender->getName();
130 }
131 return $select;
132 }
133
137 public static function getSenderInfoList()
138 {
139 $info = array();
140 foreach (static::getSenders() as $sender)
141 {
142 $info[] = array(
143 'id' => $sender->getId(),
144 'type' => $sender->getType(),
145 'isTemplatesBased' => ($sender->isConfigurable() && $sender->isTemplatesBased()),
146 'name' => $sender->getName(),
147 'shortName' => $sender->getShortName(),
148 'canUse' => $sender->canUse()
149 );
150 }
151 return $info;
152 }
153
158 public static function getSenderById($id)
159 {
160 foreach (static::getSenders() as $sender)
161 {
162 if ($sender->getId() === $id)
163 {
164 return $sender;
165 }
166 }
167 return null;
168 }
169
174 public static function getDefaultSender()
175 {
176 $region = \Bitrix\Main\Application::getInstance()->getLicense()->getRegion();
177
178 if ($region === 'ru')
179 {
180 return static::getSenderById(\Bitrix\MessageService\Sender\Sms\SmsRu::ID);
181 }
182 if ($region === 'by')
183 {
184 return static::getSenderById(\Bitrix\MessageService\Sender\Sms\SmsAssistentBy::ID);
185 }
186
187 return static::getSenders()[0];
188 }
189
193 public static function canUse()
194 {
195 return static::getUsableSender() !== null;
196 }
197
201 public static function getManageUrl()
202 {
204 $defaultProvider = static::getDefaultSender();
205 return $defaultProvider instanceof BaseConfigurable ? $defaultProvider->getManageUrl() : '';
206 }
207
212 public static function getUsableSender()
213 {
214 foreach (static::getSenders() as $sender)
215 {
216 if ($sender->canUse())
217 {
218 return $sender;
219 }
220 }
221 return null;
222 }
223
227 public static function getRegisteredSenderList(): array
228 {
229 $senderList = [];
230 foreach (static::getSenders() as $sender)
231 {
232 if (
233 $sender instanceof BaseConfigurable
234 && $sender->isRegistered()
235 )
236 {
237 $senderList[] = $sender;
238 }
239 }
240
241 return $senderList;
242 }
243
250 public static function createMessage(array $messageFields, Base $sender = null)
251 {
252 if (!$sender && !isset($messageFields['SENDER_ID']))
253 {
254 $sender = static::getUsableSender();
255 }
256
257 if ($sender === null)
258 {
259 $message = new Message($sender);
260 $message->setError(new Main\Error('There are no registered SMS providers.'));
261 }
262
263 if (isset($messageFields['MESSAGE_TO']))
264 {
265 $normalizedTo = \NormalizePhone($messageFields['MESSAGE_TO']);
266 if ($normalizedTo)
267 {
268 $messageFields['MESSAGE_TO'] = '+'.$normalizedTo;
269 }
270 }
271
273 $message->setType(MessageType::SMS);
274
275 $sender = $message->getSender();
276 if ($sender && !$message->getFrom())
277 {
278 $message->setFrom($sender->getDefaultFrom());
279 }
280
281 return $message;
282 }
283
289 public static function createMessageListByTemplate(string $eventName, array $fields = []): array
290 {
291 $messageList = [];
292 $event = new Main\Sms\Event($eventName, $fields);
293 $templateMessageListResult = $event->createMessageList();
294 if (!$templateMessageListResult->isSuccess())
295 {
296 return $messageList;
297 }
298
299 $templateMessages = $templateMessageListResult->getData();
300 $sender = isset($fields['SENDER_ID']) ? static::getSenderById($fields['SENDER_ID']) : static::getUsableSender();
301
303 foreach($templateMessages as $templateMessage)
304 {
306 [
307 'MESSAGE_FROM' => $fields['DEFAULT_FROM'] ?? $sender->getDefaultFrom(),
308 'MESSAGE_TO' => $templateMessage->getReceiver(),
309 'MESSAGE_BODY' => $templateMessage->getText(),
310 ],
311 $sender
312 );
313 $message->setType(MessageType::SMS);
314 $messageList[] = $message;
315 }
316
317 return $messageList;
318 }
319
326 public static function sendMessage(array $messageFields, Base $sender = null)
327 {
328 if (!$sender && isset($messageFields['SENDER_ID']))
329 {
330 $sender = static::getSenderById($messageFields['SENDER_ID']);
331
332 if ($sender === null)
333 {
334 return (new Result())->addError(new Main\Error('Incorrect sender id.'));
335 }
336 }
337 $message = static::createMessage($messageFields, $sender);
338
339 if ($message->getError() !== null)
340 {
341 return (new Result())->addError($message->getError());
342 }
343
344 $result = $message->send();
345
346 if ($result->isSuccess())
347 {
348 (new Event(
349 'messageservice',
350 static::ON_MESSAGE_SUCCESSFULLY_SENT_EVENT,
351 [
352 'ID' => $result->getId(),
353 'ADDITIONAL_FIELDS' => $messageFields['ADDITIONAL_FIELDS'] ?? [],
354 ]
355 ))->send();
356 }
357
358 return $result;
359 }
360
367 public static function sendMessageDirectly(array $messageFields, Base $sender = null)
368 {
369 $message = static::createMessage($messageFields, $sender);
370
371 return $message->sendDirectly();
372 }
373
374 public static function getMessageStatus($messageId)
375 {
376 $message = MessageTable::getById($messageId)->fetch();
377 if (!$message)
378 {
380 $result->setId($messageId);
381 $result->addError(new Main\Error('Message not found'));
382
383 return $result;
384 }
385
387 $sender = static::getSenderById($message['SENDER_ID']);
388 if (!$sender || !$sender->isConfigurable())
389 {
390 $result = new Result\MessageStatus();
391 $result->setId($messageId);
392 $result->addError(new Main\Error('Incorrect sender id.'));
393
394 return $result;
395 }
396
397 return $sender->getMessageStatus($message);
398 }
399}
$messageFields
Определения callback_ednaru.php:22
if(! $messageFields||!isset($messageFields['message_id'])||!isset($messageFields['status'])||!CModule::IncludeModule("messageservice")) $messageId
Определения callback_ismscenter.php:26
static getType()
Определения base.php:27
static getInstance()
Определения application.php:98
Определения error.php:15
Определения event.php:5
static createFromFields(array $fields, Sender\Base $sender=null)
Определения message.php:89
const ON_MESSAGE_SUCCESSFULLY_SENT_EVENT
Определения smsmanager.php:16
static createMessage(array $messageFields, Base $sender=null)
Определения smsmanager.php:250
static sendMessage(array $messageFields, Base $sender=null)
Определения smsmanager.php:326
static getRegisteredSenderList()
Определения smsmanager.php:227
static getSenderById($id)
Определения smsmanager.php:158
static sendMessageDirectly(array $messageFields, Base $sender=null)
Определения smsmanager.php:367
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
$region
Определения .description.php:13
$select
Определения iblock_catalog_list.php:194
if($NS['step']==6) if( $NS[ 'step']==7) if(COption::GetOptionInt('main', 'disk_space', 0) > 0) $info
Определения backup.php:924
NormalizePhone($number, $minLength=10)
Определения tools.php:4959
Определения handlers.php:8
Определения event.php:8
$message
Определения payment.php:8
$event
Определения prolog_after.php:141
$fields
Определения yandex_run.php:501