Jump to content

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


Recommended Posts

Всем привет!

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

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

По аналогии с корзиной.
Link to post
Share on other sites
  • Replies 61
  • Created
  • Last Reply

Top Posters In This Topic

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


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);

Что упустил?
Edited by trener
Link to post
Share on other sites

 

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

 

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

Link to post
Share on other sites

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

 

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

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

 

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

 

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

 

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

Link to post
Share on other sites

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

 

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

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

 

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));
		}



}

 

 

Link to post
Share on other sites
  • 5 months later...

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

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

Link to post
Share on other sites
2 часа назад, get31 сказал:

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

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

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

Link to post
Share on other sites
12 минут назад, alexivchenko сказал:

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

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

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

Edited by get31
Link to post
Share on other sites
6 минут назад, get31 сказал:

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

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

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

Edited by alexivchenko
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...