|
8 | 8 |
|
9 | 9 | class Hm_Telegram_Webhook { |
10 | 10 |
|
11 | | - /* webhook_token value */ |
12 | | - private $webhook_token; |
13 | | - |
14 | | - private $prefix_ui = 'https://api.telegram.org/'; |
| 11 | + const PREFIX_URI = 'https://api.telegram.org/'; |
15 | 12 |
|
16 | | - /** |
17 | | - * Load webhook token |
18 | | - * @param string $webhook_token |
19 | | - */ |
20 | | - public function __construct($webhook_token) { |
21 | | - $this->webhook_token = $webhook_token; |
22 | | - } |
23 | | - |
24 | | - // Function to send Telegram notification |
25 | 13 | /** |
26 | 14 | * send telegram notiofication using curl |
27 | 15 | * @param array $extracted_msgs |
28 | 16 | */ |
29 | | - public function send(array $extracted_msgs) { |
30 | | - // Delete the webhook |
31 | | - if ($this->delete_webhook($this->webhook_token)) { |
32 | | - // Get the chat ID |
33 | | - $chatId = $this->get_chat_id(); |
34 | | - if ($chatId) { |
35 | | - $text = "New Message\nFrom: {$extracted_msgs['from']}\nSubject: {$extracted_msgs['subject']}\nContent: {$extracted_msgs['body']}"; |
36 | | - |
37 | | - $curl_handle = curl_init(); |
38 | | - curl_setopt($curl_handle, CURLOPT_URL, "{$this->prefix_uri}bot{$this->webhook_token}/sendMessage"); |
39 | | - curl_setopt($curl_handle, CURLOPT_POST, true); |
40 | | - curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true); |
41 | | - curl_setopt($curl_handle, CURLOPT_POSTFIELDS, http_build_query(['chat_id' => $chatId, 'text' => $text])); |
42 | | - curl_setopt($curl_handle, CURLOPT_HTTPHEADER, ["Content-Type: application/x-www-form-urlencoded"]); |
43 | | - |
44 | | - $response = curl_exec($curl_handle); |
45 | | - if (curl_errno($ch)) { |
46 | | - Hm_Msgs::add('ERRError:' . curl_error($curl_handle)); |
47 | | - } else { |
48 | | - $response_data = json_decode($response, true); |
49 | | - if (!$response_data['ok']) { |
50 | | - Hm_Msgs::add('ERRFailed to send message: ' . $response_data['description']); |
51 | | - } |
| 17 | + public static function send(array $extracted_msgs, $webhook_token) { |
| 18 | + self::delete_webhook($webhook_token); |
| 19 | + // Get the chat ID |
| 20 | + $chatId = self::get_chat_id($webhook_token); |
| 21 | + if (!empty($chatId)) { |
| 22 | + $text = "New Message\nFrom: {$extracted_msgs['from']}\nSubject: {$extracted_msgs['subject']}\nTo: {$extracted_msgs['to']}"; |
| 23 | + $curl_handle = Hm_Functions::c_init(); |
| 24 | + Hm_Functions::c_setopt($curl_handle, CURLOPT_URL, static::PREFIX_URI.'bot'.$webhook_token.'/sendMessage'); |
| 25 | + Hm_Functions::c_setopt($curl_handle, CURLOPT_POST, true); |
| 26 | + Hm_Functions::c_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true); |
| 27 | + Hm_Functions::c_setopt($curl_handle, CURLOPT_POSTFIELDS, http_build_query(['chat_id' => $chatId, 'text' => $text])); |
| 28 | + Hm_Functions::c_setopt($curl_handle, CURLOPT_HTTPHEADER, ["Content-Type: application/x-www-form-urlencoded"]); |
| 29 | + $curl_result = Hm_Functions::c_exec($curl_handle); |
| 30 | + if (trim($curl_result)) { |
| 31 | + $response_data = json_decode($curl_result, true); |
| 32 | + if (!$response_data['ok']) { |
| 33 | + |
52 | 34 | } |
53 | | - curl_close($curl_handle); |
54 | | - unset($curl_handle); |
55 | 35 | } |
56 | 36 | } |
57 | 37 | } |
58 | 38 |
|
59 | 39 | /** |
60 | 40 | * get the chat ID using webhook_token |
| 41 | + * @param string $webhook_token |
61 | 42 | */ |
62 | | - private function get_chat_id() { |
63 | | - $curl_handle = curl_init(); |
64 | | - curl_setopt($curl_handle, CURLOPT_URL, "{$this->prefix_ui}/bot{$this->webhook_token}/getUpdates"); |
65 | | - curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true); |
66 | | - $response = curl_exec($curl_handle); |
67 | | - |
68 | | - if (curl_errno($curl_handle)) { |
69 | | - Hm_Msgs::add('ERRError:' . curl_error($curl_handle)); |
70 | | - return false; |
71 | | - } else { |
72 | | - $response_data = json_decode($response, true); |
73 | | - if ($response_data['ok']) { |
74 | | - if (!empty($response_data['result'])) { |
75 | | - $chatId = $response_data['result'][0]['message']['chat']['id']; |
76 | | - return $chatId; |
77 | | - } else { |
78 | | - Hm_Msgs::add('ERRNo messages found. Please send a message to your bot first.<br>'); |
79 | | - return false; |
80 | | - } |
| 43 | + private static function get_chat_id($webhook_token) { |
| 44 | + $curl_handle = Hm_Functions::c_init(); |
| 45 | + Hm_Functions::c_setopt($curl_handle, CURLOPT_URL, static::PREFIX_URI.'bot'.$webhook_token.'/getUpdates'); |
| 46 | + Hm_Functions::c_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true); |
| 47 | + $curl_result = Hm_Functions::c_exec($curl_handle); |
| 48 | + if (trim($curl_result)) { |
| 49 | + $response_data = json_decode($curl_result, true); |
| 50 | + if(!empty($chatId = $response_data['result'][0]['message']['chat']['id'])){ |
| 51 | + return $chatId; |
81 | 52 | } else { |
82 | | - Hm_Msgs::add('ERRFailed to get chat ID: ' . $response_data['description'] . '<br>'); |
83 | | - return false; |
| 53 | + Hm_Msgs::add('ERRNo messages found. Please send a message to your bot first.<br>'); |
| 54 | + return ''; |
84 | 55 | } |
85 | 56 | } |
86 | | - |
87 | | - curl_close($curl_handle); |
88 | | - unset($curl_handle); |
89 | 57 | } |
90 | 58 |
|
91 | 59 | /** |
92 | 60 | * This function is usefull when trying to resend, we need to delete old webhook before we send a new one |
93 | | - * delete the webhook using webhook_token |
| 61 | + * delete the webhook using webhook_token if there is one |
| 62 | + * sometimes the webhook is not deleted, so we need to delete it manually |
| 63 | + * and sometines we are gettiting not found error |
| 64 | + * @param string $webhook_token |
94 | 65 | */ |
95 | | - private function delete_webhook() { |
96 | | - $curl_handle = curl_init(); |
97 | | - curl_setopt($curl_handle, CURLOPT_URL, "{$this->prefix_ui}bot{$this->webhook_token}/delete_webhook"); |
98 | | - curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true); |
99 | | - $response = curl_exec($curl_handle); |
100 | | - |
101 | | - if (curl_errno($curl_handle)) { |
102 | | - Hm_Msgs::add('ERRError:' . curl_error($curl_handle)); |
103 | | - return false; |
104 | | - } else { |
105 | | - $response_data = json_decode($response, true); |
106 | | - if ($response_data['ok']) { |
107 | | - Hm_Msgs::add('ERRWebhook was deleted successfully.<br>'); |
108 | | - return true; |
109 | | - } else { |
110 | | - Hm_Msgs::add('ERRFailed to delete webhook: ' . $response_data['description'] . '<br>'); |
111 | | - return false; |
112 | | - } |
113 | | - } |
114 | | - |
115 | | - curl_close($curl_handle); |
116 | | - unset($curl_handle); |
| 66 | + private static function delete_webhook($webhook_token) { |
| 67 | + $curl_handle = Hm_Functions::c_init(); |
| 68 | + Hm_Functions::c_setopt($curl_handle, CURLOPT_URL, static::PREFIX_URI.'bot'.$webhook_token.'/delete_webhook'); |
| 69 | + Hm_Functions::c_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true); |
| 70 | + Hm_Functions::c_exec($curl_handle); |
117 | 71 | } |
118 | 72 | } |
0 commit comments