Перейти к содержанию
Официальный форум поддержки Simpla

Уведомление о заказах через чат-бота в Telegram


Рекомендуемые сообщения

Всем привет!

Как реализовать, чтобы через чат-бот в Telegram приходили уведомление о заказе обратного звонка?

Спасибо!!! )))

По аналогии с корзиной.
Ссылка на сообщение
Поделиться на другие сайты
  • Ответов 61
  • Дата создания
  • Последний ответ

Лучшие авторы в теме

Лучшие авторы в теме

Информация о заказах на телеграм приходит корректно. По аналогии с корзиной пробовал реализовать сообщения об обратном звонке, но не получается.


1. В файле TgNotify.php создал класс:

 

    public function message_callback($callback_id) {

        if(!($callback = $this->callbacks->get_callback(intval($callback_id)))) {
            return false;
        }
        $this->apiRequest("sendMessage", array('chat_id' => $this->settings->tg_channel, 'parse_mode'=>'HTML', "text" => $text_string));
 
2. В файле View/CartView.php вставил код для уведомления в Телеграмм:
 
    if($this->settings->tg_notify==1)
   $this->tgnotify->message_callback($callback_id);

Что упустил?
Изменено пользователем trener
Ссылка на сообщение
Поделиться на другие сайты

 

Информация о заказах на телеграм приходит корректно. По аналогии с корзиной пробовал реализовать сообщения об обратном звонке, но не получается.

 

1. В файле TgNotify.php создал класс:

 

public function message_callback($callback_id) {

if(!($callback = $this->callbacks->get_callback(intval($callback_id)))) {

return false;

}

$this->apiRequest("sendMessage", array('chat_id' => $this->settings->tg_channel, 'parse_mode'=>'HTML', "text" => $text_string));

 

2. В файле View/CartView.php вставил код для уведомления в Телеграмм:

 

if($this->settings->tg_notify==1)

$this->tgnotify->message_callback($callback_id);

 

Что упустил?

2. В файле View/CartView.php вставил код для уведомления в Телеграмм:

 

if($this->settings->tg_notify==1)

$this->tgnotify->message_callback($callback_id);

 

Это должно быть там, где работает функция обратного звонка. Скорее всего она у вас в view/IndexView.php

Ссылка на сообщение
Поделиться на другие сайты

2. В файле View/CartView.php вставил код для уведомления в Телеграмм:

 

if($this->settings->tg_notify==1)

$this->tgnotify->message_callback($callback_id);

 

Это должно быть там, где работает функция обратного звонка. Скорее всего она у вас в view/IndexView.php

 

Спасибо. Пробовал использовать в данном файле в разделе "Прием данных с формы заказа обратного звонка". Ничего, к сожалению, не получается.

 

Где еще может быть ошибка в моем решении??? (

Ссылка на сообщение
Поделиться на другие сайты

Реализация отправки уведомлений о заказе обратного звонка через чат-бот в 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);

 

Ссылка на сообщение
Поделиться на другие сайты

Всем привет, ссылки из первых постов не работают, может кто нибудь или указать рабочие ссылки или выложить куда нибудь информацию для скачивания.

Заранее благодарю.

Ссылка на сообщение
Поделиться на другие сайты

Всем привет, ссылки из первых постов не работают, может кто нибудь или указать рабочие ссылки или выложить куда нибудь информацию для скачивания.

Заранее благодарю.

 

TgNotify.php  в оригинале  лишнее потрите

<?php

/**
 * Simpla CMS
 *
 * @copyright	2016 Nikolay Valiotti
 * @link		http://valiotti.com
 * @link		http://botmachine.ru
 * @link		https://coffeetrue.ru
 * @author		Nikolay Valiotti
 *
 */

class TgNotify extends Simpla
{

		private function exec_curl_request($handle) {
		 
		  $response = curl_exec($handle);

		  
		  if ($response === false) {
			$errno = curl_errno($handle);
			$error = curl_error($handle);
			error_log("Curl returned error $errno: $error\n");
			curl_close($handle);
			return false;
		  }

		  $http_code = intval(curl_getinfo($handle, CURLINFO_HTTP_CODE));
		  curl_close($handle);

		  if ($http_code >= 500) {
			// do not wat to DDOS server if something goes wrong
			sleep(10);
			return false;
		  } else if ($http_code != 200) {
			$response = json_decode($response, true);
			error_log("Request has failed with error {$response['error_code']}: {$response['description']}\n");
			if ($http_code == 401) {
			  throw new Exception('Invalid access token provided');
			}
			return false;
		  } else {
			$response = json_decode($response, true);
			if (isset($response['description'])) {
			  error_log("Request was successfull: {$response['description']}\n");
			}
			$response = $response['result'];
		  }
		  return $response;
		}

		public function apiRequest($method, $parameters) {
			  if (!is_string($method)) {
				error_log("Method name must be a string\n");
				return false;
			  }
			
			  if (!$parameters) {
				$parameters = array();
			  } else if (!is_array($parameters)) {
				error_log("Parameters must be an array\n");
				return false;
			  }

			  foreach ($parameters as $key => &$val) {
				// encoding to JSON array parameters, for example reply_markup
				if (!is_numeric($val) && !is_string($val)) {
				  $val = json_encode($val);
				}
			  }
			  $url = $this->settings->tg_apiurl.$this->settings->tg_token.'/'.$method.'?'.http_build_query($parameters);
			  
			 
			
			  $handle = curl_init($url);
			  
			  curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
			  curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 5);
			  curl_setopt($handle, CURLOPT_TIMEOUT, 60);

			  return $this->exec_curl_request($handle);
			}

		
		public function message($order_id){
			
			if(!($order = $this->orders->get_order(intval($order_id))))
				return false;
			
			$purchases = $this->orders->get_purchases(array('order_id'=>$order->id));
			
			$products_ids = array();
			$variants_ids = array();
			foreach($purchases as $purchase)
			{
				$products_ids[] = $purchase->product_id;
				$variants_ids[] = $purchase->variant_id;
			}

			$products = array();
			foreach($this->products->get_products(array('id'=>$products_ids)) as $p)
				$products[$p->id] = $p;

			
			$variants = array();
			foreach($this->variants->get_variants(array('id'=>$variants_ids)) as $v)
			{
				$variants[$v->id] = $v;
				$products[$v->product_id]->variants[] = $v;
			}
	
			foreach($purchases as &$purchase)
			{
				if(!empty($products[$purchase->product_id]))
					$purchase->product = $products[$purchase->product_id];
				if(!empty($variants[$purchase->variant_id]))
					$purchase->variant = $variants[$purchase->variant_id];
			}
			$currency=$this->money->get_currency('RUR');
			$total=$this->money->convert($order->total_price).' '.$currency->sign;
			
			if ($order->paid == 1){$text_string='Заказ №'.$order->id.' оплачен'.PHP_EOL; }
			else {$text_string='У вас новый заказ №'.$order->id.' на сумму '.$total.PHP_EOL;}

			$order_labels = array();
			if(isset($order->id))
			foreach($this->orders->get_order_labels($order->id) as $ol)
				$order_labels[] = $ol->id;
			if (in_array(13, $order_labels)) { //ID метки позвонить
				$text_string.=' <b>позвонить по заказу!</b> '.PHP_EOL;
			}
			
			if ($order->status == 0)
				$status='ждет обработки';
			elseif ($order->status == 1)
				$status='в обработке';
			elseif ($order->status == 4)
				$status='подтвержден';
			elseif ($order->status == 2)
				$status='выполнен';
			$text_string.='<b>Статус заказа:</b> '.$status.PHP_EOL;
				
			if ($order->paid == 1)
				$paid='оплачен';
			else {$paid='не оплачен';}
			
			$text_string.='<b>Статус оплаты:</b> '.$paid.PHP_EOL;
				
			if($order->name)
				$text_string.='<b>Клиент:</b> '.$order->name.PHP_EOL;
			if($order->phone)
				$text_string.='<b>Телефон:</b> '.$order->phone.PHP_EOL;
			if($order->email)
				$text_string.='<b>E-mail:</b> '.$order->email.PHP_EOL;
			if($order->address)
				$text_string.='<b>Адрес:</b> '.$order->address.PHP_EOL;
			if($order->comment)
				$text_string.='<b>Комментарий:</b> '.$order->comment.PHP_EOL;

			$text_string.='<b>Клиент заказал:</b> '.PHP_EOL;
			foreach ($purchases as &$purchase){
				$text_string.=$purchase->product->brand.' '.$purchase->product_name.', '.$purchase->variant_name.PHP_EOL;
				$text_string.='<i>тип помола:</i>'.$purchase->grinding.PHP_EOL;
				
				$item_price=$this->money->convert($purchase->price).' '.$currency->sign;
				$text_string.=$purchase->amount.' x '.$item_price.PHP_EOL;
				
			}
			$delivery = $this->delivery->get_delivery($order->delivery_id);
			$text_string.='<b>Доставка:</b> '.$delivery->name.PHP_EOL;
			$delivery_price=$this->money->convert($order->delivery_price).' '.$currency->sign;
			$text_string.='<b>Стоимость:</b> '.$delivery_price;
			$this->apiRequest("sendMessage", array('chat_id' => $this->settings->tg_channel, 'parse_mode'=>'HTML', "text" => $text_string));
		}



}

 

 

Ссылка на сообщение
Поделиться на другие сайты
  • 5 месяцев спустя...

а как сделать, чтобы приходило еще пользователю уведомление о его заказе? 

Имя, спасибо за заказ, ваш номер заказа 100500, и бла бла бла...

Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, get31 сказал:

а как сделать, чтобы приходило еще пользователю уведомление о его заказе? 

Имя, спасибо за заказ, ваш номер заказа 100500, и бла бла бла...

Писать бота Телеграмм, подключать его к базе users. Просить пользователя авторизоваться в боте, бот проверяет пользователя по номеру или по коду. Отправлять уведомление по коду в базе и номеру 

Ссылка на сообщение
Поделиться на другие сайты
12 минут назад, alexivchenko сказал:

Писать бота Телеграмм, подключать его к базе users. Просить пользователя авторизоваться в боте, бот проверяет пользователя по номеру или по коду. Отправлять уведомление по коду в базе и номеру 

а без геморроя никак? в вайбере приходит от большинства магазинов без авторизаций и пр .

сделать проверку если ли этот номер в телеграм, и если есть то прислать смс

Изменено пользователем get31
Ссылка на сообщение
Поделиться на другие сайты
6 минут назад, get31 сказал:

а без геморроя никак? в вайбере приходит от большинства магазинов без авторизаций и пр .

сделать проверку если ли этот номер в телеграм, и если есть то прислать смс

Проще никак, в viber и WhatsApp происходит обмен данными через api и нужен бизнес аккаунт. Тем более данные пользователей у этих месенджеров открыты. Можно также подключить рассылку через посредника, но это тоже через api. 
А в телеграмм, чтобы получить данные пользователя, нужно чтобы пользователь разрешил ими делиться, а это авторизоваться через бот и отправить боту номер телефона, чтобы бот мог проверить или авторизоваться через бот, бот отправит код присвоенный пользователю в базе и проверит его. 

Изменено пользователем alexivchenko
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...