Телеграмм бот с оповещением о заказе (порт с Simpla cms)

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

sergresso M
Аватара
sergresso M
Возраст: 38
Репутация: 6
Сообщения: 21
Зарегистрирован: 21.01.2019
С нами: 5 лет 1 месяц

Сообщение #1 sergresso » 24.01.2019, 15:42

Автор: nikolayv
ссылка: http://forum.simplacms.ru/topic/12048-уведомление ... зах-через-чат-бота-в-telegram/

1) Создадим бота через Bot Father, подробно описано в Telegram Bot API. Запишем токен созданного бота.
2) Создадим публичный канал и установим для него username (название канала).
3) Добавим в канал созданного бота. Добавлять не как пользователя, а как администратора, иначе будет ошибка!
4) Перейдём по ссылке

Код: Выделить всё

https://api.telegram.org/bot[ТОКЕН_БОТА]/sendMessage?chat_id=@[USERNAME_КАНАЛА]&text=тест
 


5) После перехода по ссылке будет выведен id канала, сохраним его.

В настройках канала сделаем его приватным.

6) Заходим в папку API и заливаем туда файл TgNotify.php (во вложении архив TgNotify.7z)

7) Открываем файл API/Okay.php
после строки

Код: Выделить всё

'notify' => 'Notify',

добавим

Код: Выделить всё

'tgnotify' => 'TgNotify',


8) Открываем View/CartView.php

Ищем код

Код: Выделить всё

                // Отправляем письмо пользователю
                $this->notify->email_order_user($order->id);
                // Отправляем письмо администратору
                $this->notify->email_order_admin($order->id);


Перед ним вставляем:

Код: Выделить всё

//Уведомим в Telegram
if($this->settings->tg_notify==1)
$this->tgnotify->message($order->id);
 


9) В субд выполняем следующий код

Код: Выделить всё

INSERT INTO ok_settings (name, value) VALUES ('tg_notify', 1);
INSERT INTO ok_settings (name, value) VALUES('tg_token', 'ВАШ ТОКЕН');
INSERT INTO ok_settings (name, value) VALUES ('tg_apiurl', 'https://api.telegram.org/bot');
INSERT INTO ok_settings (name, value) VALUES ('tg_channel', 'ВАШ ID КАНАЛА');


10) Открываем файл /backend/core/SettingsNotifyAdmin.php
ищем строчки

Код: Выделить всё

           
            $this->settings->order_email = $this->request->post('order_email');
            $this->settings->comment_email = $this->request->post('comment_email');
            $this->settings->notify_from_email = $this->request->post('notify_from_email');
           


добавляем

Код: Выделить всё

$this->settings->tg_notify= ($this->request->post('tg_notify')==NULL) ? '0' : '1';
$this->settings->tg_token = $this->request->post('tg_token');
$this->settings->tg_apiurl = $this->request->post('tg_apiurl');
$this->settings->tg_channel = $this->request->post('tg_channel');



Дальше автор предлагает прописать в админку, но я себе не делал. Кто хочет может сам посидеть и прописать.
Вложения
TgNotify.7z
(1.74 КБ) 411 скачиваний

Julius123 M
Julius123 M
Репутация: 20
Сообщения: 225
Зарегистрирован: 05.02.2017
С нами: 7 лет 1 месяц

Сообщение #2 Julius123 » 27.07.2019, 19:29

Подскажите, как подвязать чтобы были уведомления не только о заказах, но и обратный звонок, комментарии?

madflava
madflava
Репутация: 0
Сообщения: 2
Зарегистрирован: 15.09.2018
С нами: 5 лет 6 месяцев

Сообщение #3 madflava » 19.12.2019, 04:07

что-то я запрос в СУБД выполнить не могу

1054 ошибка вылезает c отсылом на то, что поля 'name' не существует

Добавлено спустя 42 минуты 45 секунд:
вообщем, в PHPMyAdmin добавлять в ok_settings вручную и бинго!

+ в последних версиях 2.X /backend/core/SettingsNotifyAdmin.php
примерный код:

Код: Выделить всё

    /*Настройки уведомлений*/
    public function fetch() {
        if($this->request->method('POST')) {
            $this->settings->order_email = $this->request->post('order_email');
            $this->settings->comment_email = $this->request->post('comment_email');
            $this->settings->notify_from_email = $this->request->post('notify_from_email');
            $this->settings->update('notify_from_name', $this->request->post('notify_from_name'));
            $this->settings->email_lang = $this->request->post('email_lang');
            $this->settings->auto_approved = $this->request->post('auto_approved');
       $this->settings->tg_notify= ($this->request->post('tg_notify')==NULL) ? '0' : '1';
            $this->settings->tg_token = $this->request->post('tg_token');
            $this->settings->tg_apiurl = $this->request->post('tg_apiurl');
            $this->settings->tg_channel = $this->request->post('tg_channel');

wolf
wolf
Репутация: 3
Сообщения: 27
Зарегистрирован: 27.01.2017
С нами: 7 лет 1 месяц

Сообщение #4 wolf » 24.08.2020, 14:44

Julius123 писал(а):Подскажите, как подвязать чтобы были уведомления не только о заказах, но и обратный звонок, комментарии?

Может кому пригодится, реализовал отправку уведомлений о заказе обратного звонка через чат-бот в Telegram.


1. Настраиваем уведомление о заказах через чат-бота в Telegram, как указано автором данной темы в первом посте.


2. В конце файла TgNotify.php

создаем класс:

Код: Выделить всё

public function message_callback($callback_id) {
        if(!($callback = $this->callbacks->get_callback(intval($callback_id))))
        return false;
        $text_string='Заказ обратного звонка с сайта'.PHP_EOL;
             if($callback->phone)
                   $text_string.='<b>Телефон:</b> '.$callback->phone.PHP_EOL;
             if($callback->url)
                   $text_string.='<b>Заявка была отправлена со страницы:</b> '.$callback->url.PHP_EOL;
            $this->apiRequest("sendMessage", array('chat_id' => $this->settings->tg_channel, 'parse_mode'=>'HTML', "text" => $text_string));
         }


3. В файле view/IndexView.php

после строки

Код: Выделить всё

// Отправляем email администратору о заказе обратного звонка

         $this->notify->email_callback_admin($callback_id);
            } else {
         $this->design->assign('call_error', 'unknown error');
            }


вставляем

Код: Выделить всё

//Отправляем уведомление в Telegram
   if($this->settings->tg_notify==1)
            $this->tgnotify->message_callback($callback_id);

muno
muno
Репутация: 1
Сообщения: 18
Зарегистрирован: 20.08.2020
С нами: 3 года 6 месяцев

Сообщение #5 muno » 19.09.2020, 15:54

Ошибка 1054 в базе данных не вылезает, если код SQL запроса чуть подправить:

Код: Выделить всё

INSERT INTO ok_settings (param, value) VALUES ('tg_notify', 1);
INSERT INTO ok_settings (param, value) VALUES('tg_token', 'ВАШ ТОКЕН');
INSERT INTO ok_settings (param, value) VALUES ('tg_apiurl', 'https://api.telegram.org/bot');
INSERT INTO ok_settings (param, value) VALUES ('tg_channel', 'ВАШ ID КАНАЛА');

impulze101
impulze101
Репутация: 0
Сообщения: 11
Зарегистрирован: 15.05.2018
С нами: 5 лет 10 месяцев

Сообщение #6 impulze101 » 15.01.2021, 22:02

Добавил ещё Способ оплаты.
В файле TgNotify.php

перед

Код: Выделить всё

$delivery = $this->delivery->get_delivery($order->delivery_id);
$text_string.='<b>Доставка:</b> '.$delivery->name.PHP_EOL;


добавить

Код: Выделить всё

$payment_method = $this->payment->get_payment_method($order->payment_method_id);
$text_string.='<b>Оплата:</b> '.$payment_method->name.PHP_EOL;

lain
lain
Репутация: 0
Сообщения: 11
Зарегистрирован: 31.08.2021
С нами: 2 года 6 месяцев

Сообщение #7 lain » 29.09.2021, 15:18

Ребята, подскажите, может кто-то переделывал этот мод под 4ю версию движка? Дело в том, что в четвертой версии API/Okay.php уже не существует


Название раздела: Полезные решения для OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Полезные решения для OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 2 гостя