O integraci Telegramu a 1C bylo napsáno mnoho řádků. Ale nikdy jsem neviděl kompletní instrukci k instalaci a nastavení webhooků. Pokusím se ji napsat.
K tomu všemu budeme potřebovat (nebo bude přesněji řečeno, že jsem použil):
- Apache 2.2.24
- OpenSSL (součást instalace Apache)
- 1C (s moduly) webového serveru)
- Vlastní doménu
- Vytvořeného bota v Telegramu (nebudu popisovat jeho vytvoření, protože je to dost triviální)
Předpokládá se, že veškerý software máte nainstalovaný.
Takže začneme získáním certifikátu. Otevřete příkazový řádek a proveďte následující kód:
openssl req -newkey rsa:2048 -sha256 -nodes -keyout YOURPRIVATE.key -x509 -days 365 -out YOURPUBLIC.pem -subj "/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=YOURDOMAIN.EXAMPLE"Kde:
YOURPRIVATE.key — soukromý klíč certifikátu. Bude použit v Apache
YOURPUBLIC.pem — veřejný klíč certifikátu. Bude použit při registraci webhooku
YOURDOMAIN.EXAMPLE — adresa vaší domény s webhookem. Musí se přesně shodovat s adresou webhooku!!!
Po provedení tohoto kódu se ve složce openssl (u mě je to „C:Program FilesApache Software FoundationApache2.2bin“) objeví soubory klíčů.
Kopíroval jsem je do složky conf Apache.
Přejdeme k nastavení Apache.
Viděl jsem mnoho různých způsobů. Mně fungoval následující:
Do httpd.conf byly přidány následující řádky:
Listen 443 aby Apache "poslouchal" port 443.
Blok byl upraven na následující podobu:
SSLMutex default
SSLSessionCache noneNa samotném konci byly přidány řádky, kde uvádím cesty k certifikátu:
SSLEngine On
SSLCertificateFile conf/YOURPUBLIC.pem
SSLCertificateKeyFile conf/YOURPRIVATE.keyA odkomentujte řádku:
LoadModule ssl_module modules/mod_ssl.so V konfiguraci vytváříme HTTP službu. Ta bude odpovídat Telegramu a zpracovávat jeho žádosti.
V mém případě byly uvedeny následující parametry:
Název: TGWebhook
Kořenový URL: webhook
Opakované používání sezení: Nepoužívat (v automatickém režimu mi to nefungovalo)
Životnost: 20
Šablony URL: vytvořena šablona „Jakákoliv“ se dvěma metodami: GET a POST



Zpracovatelé metod jsou vytvářeni automaticky. Do zpracovatele POST přidám následující, jen pro ověření spojení:
Funkce AnyPOST(Request)
OdeslatTestovouZpravu("");
Odpověď = Nová HTTPServisOdpověď(200);
Návrat Odpověď;
KonecFunkce
&NaServeru
Procedura OdeslatTestovouZpravu(Chat)
Zpráva = "Testovací zpráva";
Token = ""; //Váš telegramový token
Server = "api.telegram.org";
Zdroje = "bot" + Token + "\/sendMessage?chat_id=" + ŘetězecNahrazení(Formát(Chat, "ČDЦ=; ČS=; ČРГ=."), ".", "") + "&text=" + Zpráva;
Spojení = Nové HTTPSpojení(Server,443,,,,,Nové ZabezpečenéSpojeníOpenSSL());
Žádost = Nový HTTPŽádost(Zdroje);
Odpověď = Spojení.Získat(Žádost);
KonecProceduryZbývá publikovat databázi a připojit webhook.
Publikace se dělá jako obvykle, stačí přidat zaškrtnutí u publikací HTTP služby:

Posledním krokem připojíme náš 1C k telegramu. Použil jsem k tomu jednoduchou html stránku s následujícím kódem:
<html>
<body>
<form action="https://api.telegram.org/bot<ЗдесьДолженБытьТокен>/setwebhook" method="post" enctype="multipart/form-data">
Vyberte certifikát k nahrání:
<input type="file" name="certificate" id="fileToUpload">
URL: <input type="text" name="url" value="https://<YOURWEBSITE>/<YOUR_PHP_URL>"><br>
<input type="submit" value="Nahrát certifikát" name="submit">
</form>
</body>
</html>V formuláři jednoduše vybereme veřejný klíč a zadáme úplnou cestu k našemu http servisu. Připomínám, že úplná cesta k servisu bude vypadat takto:
Prosím, nekopněte do kódu, některé věci byly úmyslně udělány hardcodem, jelikož to bylo děláno výhradně pro demonstrační účely.
Publikace byla napsána, protože jsem nenašel žádný funkční příklad práce s webhooks na stránkách, kromě Stavitele botů Telegram. Ale ten je placený a možná není pro každého potřebný v této podobě.
V archivu je instalace apache 2.2.24 spolu s Openssl (proč mi hledání té zabralo hodně času), html soubor pro registraci webhooku, konfigurační soubor apache a cf konfigurace s http servisem a příkladem odeslání testovací zprávy. Stáhnout není nutné, protože veškerý obsah je v článku.
Zdroj: habr.com
