[msTelegram] Уведомления о заказе в telegram
Небольшой плагин на уведомление о новом заказе в телеграм, отличная замена сервисам смс рассылки.
Сделано на основе гайда от Михаила.
Как получить токен, узнать айди чата и тд так же отлично расписано в гайде.

Плагин вешается на событие msOnCreateOrder.
Сделано на основе гайда от Михаила.
Как получить токен, узнать айди чата и тд так же отлично расписано в гайде.
Плагин вешается на событие msOnCreateOrder.
if($modx->event->name != 'msOnCreateOrder') return;
$token = '<token>';
$contacts = $modx->getObject('msOrderAddress', array('id'=> $msOrder->address));
$_products = $msOrder->getMany('Products');
// Список получателей, у меня их много, если будет один можно обойтись одной переменной и убрать foreach
$recipients = array(
'<chat id>'
);
// Список товаров в заказе
$i = 0;
$products = '';
foreach ($_products as $product) {
$i++;
$products .= "{$i}. {$product->name} ({$product->count} шт.)";
}
// Текст сообщения
$message = "
Новый заказ #{$msOrder->num}
на сумму {$msOrder->cost} р.
-----
{$products}
-----
Телефон: {$contacts->phone}";
$message = urlencode($message);
foreach($recipients as $id){
$url = "https://api.telegram.org/bot{$token}/sendMessage?chat_id={$id}&text={$message}";
$ch = curl_init();
curl_setopt_array($ch, array(CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true));
$result = curl_exec($ch);
curl_close($ch);
}p.s. fopen заменил на curl т.к. на некоторых устройствах получал сообщение в виде urlencode(). Комментарии: 72
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Помогите настроить плагин на работу с Shopkeeper 3? Кто нибудь знает как это сделать?
Подскажите почему может не отображаться почта в сообщении, которую указывает клиент?
то видно что там нет поля email.
нужно получить профиль пользователя и оттуда взять email
Подскажите пожалуйста, что-то не разберусь.
Вот, если сюда эту логику добавить, то как это сделать?
// Текст сообщения
$message = "
Новый заказ #{$msOrder->num}
на сумму {$msOrder->cost} р.
Оплата: {$msOrder->payment}
— {$products}
— Имя: {$contacts->receiver}
Телефон: {$contacts->phone}
Email: {$profile->email}
Улица: {$contacts->street}
Дом: {$contacts->building}
Квартира: {$contacts->room}
Комментарий: {$contacts->comment}";
https://prnt.sc/11t6d3m
Как можно отладить? и проверить?
не проходит
При этом
работает, но это не является решением
Спасибо за Ваш ответ, Николай! Всё работает
Может кто-нибудь подскажет, как можно в телеграм отправлять в том числе опции товара, которые заданы через msOptionsPrice2?
Как получить значение (https://prnt.sc/11vqy4a) size из заказа в формате:Размер: AirPods 1/2
Пробовал {$product['size']}, {$product->size}, $product->Product->get('size')} ничего не работает (
Еще не подскажете пожалуйста как получить и отправить доп. значения из заказа минишоп. Поля созданы как тут https://modx.pro/solutions/10040
select id=«delivery_shop» name=«extfld_delivery_shop» value="{$form['extfld_delivery_shop']}" class=«form-control»
Нужно вот так?
$properties = $msOrder->get('properties');
$delshop = $properties['extfld_delivery_shop'];
И просто вывод {$delshop} )?
$sizePrice = $options['price'];
Выводит цену минишопа, а нужно цену модификации. И сумма тоже считается с минишопа а не с модификации
https://prnt.sc/12331c2
foreach ($_products as $product) {
$i++;
$mod = $modx->getObject('msopModification', array(
'rid' => $product->product_id,
'id' => $option['modification_id'],
));
$price = $mod->get('price');
$products .= "{$i}. {$product->name} ({$product->count} шт.) — {price} грн";
}
У вас почему то запрос к модификации не происходит. Ошибки не будет, но и цену не получите.
Скорее всего неверно $option['modification_id'] написал.
Навскидку не помню как номер модификации в заказе хранится.
Распечатайте посмотрите — и скорректируйте этот момент.
И очень неудобно добавлять постоянно в mstelegram_recipients пользователей. можно ведь как-то автоматизировать процесс.
Кто-то решал такую задачу?
Новый заказ #2111/95
на сумму 560 р.
Оплата: 1
— 1. Товар (1 шт.)2. Товар (1 шт.)
— Телефон: 000000000000
Улица: xxxxxxxxxx
Дом: xxxxxx
Квартира: xxxxxx
Комментарий:
1. Способ оплаты пишет не как надо (например оплата картой), а id.
2. И как добавить что бы показывал вариант доставки.
Вот так у меня:
На
Обратите внимание, что Payment теперь с большой буквы.
Та же история с доставкой
Я делал так, id можно посмотреть в настройках доставки и оплаты
Кроме того у вас ошибка еще и в написании — там не строка, а число. И работало у вас вся эта конструкция только потому что нестрогое сравнение. Корректное написание будет такое:
Остальные поля (область, город, улица, дом, квартира) выводятся по стандарту.
на следующий код
А вот старый код более не работает, начиная с 4 да. По идее его вообще не нужно было использовать в компоненте, так как мой вариант проще, быстрее в написании и до сих пор работает.
Подскажите как сделать перенос строк в сообщении.
Т.е., например, я хочу что бы каждый товар в заказе отображался с новой строки (сейчас все в одну строчку).
Пробовал добавлять br, r/n — что-то не получается.
Плагин настроен так:
Чанк tpl.msOrder.custom
на следующий код
Остальные приходят. В чём может быть причина?
К примеру, сменился статус у заказа, а бот в тг клиенту пишет об этом…
Буду признателен если разъясните, как такое можно реализовать!