2namespace Bitrix\MessageService\Providers\Edna;
6use Bitrix\MessageService\Providers;
7use Bitrix\MessageService\Providers\Constants\InternalOption;
8use Bitrix\MessageService\Providers\Edna\Constants;
9use Bitrix\MessageService\Internal\Entity\ChannelTable;
37 return (
new Result())->addError(
new Error(
'Incorrect imType'));
40 $channelResult = $this->gelAllChannelList();
41 if (!$channelResult->isSuccess())
43 return (
new Result())->addError(
new Error(
'Edna service error'));
47 foreach ($channelResult->getData() as $channel)
49 if (is_array($channel) && isset($channel[
'type']) && $channel[
'type'] === $imType)
51 $channelList[] = $channel;
54 if (empty($channelList))
56 return (
new Result())->addError(
new Error(
"There are no $imType channels in your profile"));
91 foreach ($callbackTypes as $callbackType)
93 if (in_array($callbackType, $typeList,
true))
100 return (
new Result())->addError(
new Error(
'Invalid callback types passed'));
107 $this->externalSender->setApiKey($this->optionManager->getOption(InternalOption::API_KEY));
109 return $this->externalSender->callExternalMethod(
'callback/set',
$requestParams);
115 if (!$channelListResult->isSuccess())
117 return $channelListResult;
120 $activeChannelList = [];
121 foreach ($channelListResult->getData() as $channel)
123 if (isset($channel[
'active'], $channel[
'subjectId']) && $channel[
'active'] ===
true)
125 $activeChannelList[] = $channel;
129 if (empty($activeChannelList))
131 return (
new Result())->addError(
new Error(
'There are no active channels'));
134 return (
new Result())->setData($activeChannelList);
139 if (empty($subjectIdList))
145 if (!$channelResult->isSuccess())
150 $checkedChannels = [];
151 foreach ($channelResult->getData() as $channel)
154 isset($channel[
'active'], $channel[
'subjectId'])
155 && $channel[
'active'] ===
true
156 && in_array($channel[
'subjectId'], $subjectIdList,
true)
159 $checkedChannels[] = $channel[
'subjectId'];
163 return count($checkedChannels) ===
count($subjectIdList);
174 if (!$apiResult->isSuccess())
179 $apiData = $apiResult->getData();
181 foreach ($apiData as $cascade)
183 if (is_array($cascade))
185 if ($cascade[
'status'] !==
'ACTIVE' || $cascade[
'stagesCount'] > 1)
189 if ($subjectComparator($cascade[
'stages'][0][
'subject'], $subject))
191 $result->setData([
'cascadeId' => $cascade[
'id']]);
204 private function gelAllChannelList():
Result
206 $this->externalSender->setApiKey($this->optionManager->getOption(InternalOption::API_KEY));
220 if ($activeChannelListResult->isSuccess())
222 $registeredSubjectIdList = $this->optionManager->getOption(
Providers\
Constants\InternalOption::SENDER_ID, []);
224 foreach ($activeChannelListResult->getData() as $channel)
226 if (in_array((
int)$channel[
'subjectId'], $registeredSubjectIdList,
true))
229 'id' => $channel[
'subjectId'],
230 'name' => $channel[
'name'],
231 'channelPhone' => $channel[
'channelAttribute'] ??
'',
235 'EXTERNAL_ID' => $channel[
'subjectId'],
236 'TYPE' => $channelType,
237 'NAME' => $channel[
'name'] ??
'',
238 'ADDITIONAL_PARAMS' => [
239 'channelAttribute' => $channel[
'channelAttribute'] ??
''
245 if (
count($channels) > 0)
247 ChannelTable::reloadChannels($this->providerId, $channelType, $channels);
251 ChannelTable::deleteByFilter([
252 '=SENDER_ID' => $this->providerId,
253 '=TYPE' => $channelType,
263 return (
new Result())->addError(
new Error(
'This provider does not support template creation'));
269 'af',
'sq',
'ar',
'az',
'bn',
270 'bg',
'ca',
'zh_CN',
'zh_HK',
'zh_TW',
271 'hr',
'cs',
'da',
'nl',
'en',
272 'en_GB',
'en_US',
'et',
'fil',
'fi',
273 'fr',
'ka',
'de',
'el',
'gu',
274 'ha',
'he',
'hi',
'hu',
'id',
275 'ga',
'it',
'ja',
'kn',
'kk',
276 'rw_RW',
'ko',
'ky_KG',
'lo',
'lv',
277 'lt',
'mk',
'ms',
'ml',
'mr',
278 'nb',
'fa',
'pl',
'pt_BR',
'pt_PT',
279 'pa',
'ro',
'ru',
'sr',
'sk',
280 'sl',
'es',
'es_AR',
'es_ES',
'es_MX',
281 'sw',
'sv',
'ta',
'te',
'th',
282 'tr',
'uk',
'ur',
'uz',
'vi',
'zu',
285 if (in_array($langCode,
$langs,
true))
297 if (!preg_match(
'/^[0-9a-z_]{1,60}$/i',
$name))
299 return $result->addError(
new Error(
'The template name can only contain Latin letters, numbers and underscore (_). The maximum number of characters is 60'));
308 $cacheManager->deleteValue(
$key);
setCallback(string $callbackUrl, array $callbackTypes, ?int $subjectId=null)
Providers OptionManager $optionManager
getCascadeIdFromSubject($subject, callable $subjectComparator)
validateLanguage(string $langCode)
__construct(string $providerId, Providers\OptionManager $optionManager)
validateTemplateName(string $name)
getActiveChannelList(string $imType)
getMessageTemplates(string $subject='')
sendTemplate(string $name, string $text, array $examples=[], ?string $langCode=null)
getChannelList(string $imType)
initializeDefaultExternalSender()
updateSavedChannelList(string $channelType)
checkActiveChannelBySubjectIdList(array $subjectIdList, string $imType)
Providers ExternalSender $externalSender
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(empty($signedUserToken)) $key
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"