sgcSocial beş dakikada

Bu pakette iki mesajlaşma istemcisi gelir: WhatsApp Business Cloud ve resmi TDLib üzerinde Telegram. WhatsApp daha kısa yoldur, çünkü dağıtılacak hiçbir şey olmayan saf HTTPS'tir; bu nedenle bu sayfa önce bir WhatsApp metin mesajı gönderir, ardından Telegram'ın ek olarak neye ihtiyaç duyduğunu anlatır.

WhatsApp Business Cloud API
Resmi TDLib üzerinde Telegram
WhatsApp Professional'dan, Telegram Standard'dan itibaren

İlk mesaj için gerekenler

Bir bileşen, Meta uygulamanızdan iki değer ve API yanıtını dize olarak döndüren tek bir metot çağrısı.

Bileşen

SGC Social palet sayfasındaki TsgcWhatsApp_Client, sgcLibs.pas içinde TsgcWhatsApp_Client_Base sınıfının yayımlanmış bir sarmalayıcısı olarak bildirilir.

İhtiyacınız olan iki değer

WhatsAppOptions.PhoneNumberId ve WhatsAppOptions.Token; ikisi de Meta geliştirici uygulamanızdan alınır. Göndermek için başka hiçbir şey gerekmez.

Çağrı

SendMessageText(aTo, aMessage), Meta Graph API'sinden gelen ham yanıt gövdesi olan bir string döndürür. Günlüğe yazarsanız gönderimin kabul edilip edilmediğini hemen görebilirsiniz.

Telegram farklıdır

TsgcTDLib_Telegram resmi TDLib'i sarmalar, bu nedenle çalıştırılabilir dosyanızın yanında yerel kitaplığa ihtiyaç duyar. Tek ek adım budur ve aşağıdaki tablo platform başına dosyayı belirtir.

Gereksinimler ve sürümler

Sürüm sütunu, her istemciyi kısıtlayan tanımdır; yanında Source/sgcVer.inc içinde bulunduğu satır yer alır.

Konu Değer
IDE Delphi 7'den RAD Studio 13'e ve C++Builder 2007'den 13'e kadar.
Uses yan tümcesi Palet sınıfları için sgcLibs. Demo, seçenekler ve mesaj türleri için sgcLib_WhatsApp_Client ekler.
WhatsApp sürümü SGC_WHATSAPP, 727. satırdan 758. satıra kadar uzanan {$IFDEF SGC_EDT_PRO} bloğunun içindeki ilk satır olan 728. satırda tanımlanır. Yani Professional ve üzeri.
Telegram sürümü SGC_TELEGRAM, 675. satırdan 724. satıra kadar uzanan {$IFDEF SGC_EDT_STD} bloğunun içinde 677, 680, 683, 687, 691 ve 694. satırlarda tanımlanır. Her biri bir platformla korunduğu için altı satırdır. Yani orada listelenen platformlarda Standard ve üzeri.
Sürüm, bağımsız paket sgcSocial ürünü 860. satırda SGC_PACK_SOCIAL tanımlar ve 968 ile 971. satırlardaki kendi bloğu 969. satırda SGC_TELEGRAM, 970. satırda SGC_WHATSAPP tanımlar. Aynı iki istemci, kitaplığın geri kalanı olmadan.
WhatsApp platformları Yerel bağımlılık ve platform koruması yoktur. Meta Graph API'sine HTTPS'tir, bu nedenle bir TLS arka ucu olan her hedef çalışır.
Telegram platformları İkili dosyanın yanında TDLib JSON kitaplığı gerekir: Windows'ta tdjson.dll, 64 bit macOS'ta libtdjson.dylib, 64 bit Linux'ta ve Lazarus Linux'ta libtdjson.so, Android'de libtdjsonandroid.so. iOS 64'te kitaplık çalışma zamanında yüklenmek yerine libtdjson.a olarak statik bağlanır.

Bir WhatsApp Business Cloud test numarası, kalıcı bir belirteç ve bir telefon numarası kimliği Meta geliştirici konsolundan gelir. Bileşendeki hiçbir şey bunları sizin için oluşturmaz.

Kurun ve palet sayfasını bulun

sgcSocial, sgcWebSockets yükleyicisinin içinde ve ayrıca kendi paketi olarak gelir. Kurulum her iki durumda da aynı biçimdedir.

1. Zip dosyasını açın

İndirdiğiniz dosyayı aşağıda {$DIR} olarak adlandırılan bir klasöre açın.

2. Kitaplık yolu

Tools, Options, Library. {$DIR}\source yolunu ve IDE'niz için lib klasörünü ekleyin; örneğin {$DIR}\libD13\$(Platform).

3. Paketleri derleyin

{$DIR}\Packages\ altında IDE sürümünüz için paket grubunu açın. Önce çalışma zamanı .dpk dosyasını derleyin, ardından tasarım zamanı dcl dosyasını kurun.

4. Paleti kontrol edin

SGC Social adlı bir sayfa görünür. Standard derlemede TsgcTDLib_Telegram bulunur. Professional ve üzerinde ayrıca TsgcWhatsApp_Client da yer alır.

5. Yalnızca Telegram için TDLib'i dağıtın

Platformunuz için TDLib JSON kitaplığını çalıştırılabilir dosyanın yanına kopyalayın. Pakette gelen Telegram demosunun klasöründe tdjson.dll ile birlikte libcrypto-3.dll, libssl-3.dll ve zlib1.dll bulunur; Windows'un ihtiyaç duyduğu küme budur.

Yaklaşık on satırda bir WhatsApp mesajı gönderin

Telefon numarası kimliğini ve belirteci ayarlayın, SendMessageText çağırın ve Graph API'nin geri gönderdiği yanıtı okuyun.

FWhatsApp.pas
uses
  Classes, SysUtils,
  // sgc
  sgcLibs, sgcLib_WhatsApp_Client;

procedure TFRMWhatsApp.btnSendMessageClick(Sender: TObject);
begin
  whatsapp.WhatsAppOptions.PhoneNumberId := '1234567890';
  whatsapp.WhatsAppOptions.Token := GetToken;

  // returns the raw Graph API response body, so log it:
  // a rejected send comes back in there, not as an exception
  DoLog('Message Sent: ' + whatsapp.SendMessageText(
    '+34600000000', 'Hello from Delphi'));
end;

Gönderme yolunun tamamı budur. Başka hiçbir şeyin yapılandırılması gerekmez ve çalışan bir sunucu gerekmez. SendMessageImage, SendMessageDocument, SendMessageLocation, SendMessageContact, SendMessageInteractiveButtons ve SendMessageTemplate aynı biçimi izler.

FWhatsApp.pas
procedure TFRMWhatsApp.FormCreate(Sender: TObject);
begin
  // ... using neAsynchronous to update the memo control
  // ... in production set the value neNoSync
  whatsapp.NotifyEvents := neAsynchronous;

  // the component hosts the Meta webhook itself
  whatsapp.StartServer;
end;

procedure TFRMWhatsApp.whatsappMessageReceived(Sender: TObject;
  const aMessage: TsgcWhatsApp_Receive_Message; var aMarkAsRead: Boolean);
begin
  if aMessage.Messages.Count > 0 then
  begin
    DoLog(aMessage.Messages._Message[0].Text.Body);
    aMarkAsRead := True;
  end;
end;

Almak isteğe bağlıdır. StopServer dinleyiciyi yeniden kapatır ve OnBeforeSubscribe, var Accept: Boolean parametresi aracılığıyla Meta'nın doğrulama isteğini kabul veya reddettiğiniz yerdir.

uTelegram.pas
uses
  Classes, SysUtils,
  // sgc
  sgcLibs, sgcLib_Telegram;

procedure TFRMSGCTelegram.btnStartClick(Sender: TObject);
begin
  // The one thing no other component in the library needs:
  // TDLib is a native library, so say where it is when it is
  // not already beside the executable.
  SetTDJsonPath(ExtractFilePath(ParamStr(0)));

  sgcTelegram.Telegram.API.ApiId := GetApiId;
  sgcTelegram.Telegram.API.ApiHash := GetApiHash;
  sgcTelegram.Telegram.PhoneNumber := '+34600000000';

  sgcTelegram.Active := True;
end;

Bunun yerine bir bot olarak oturum açmak için PhoneNumber değerini boş bırakın ve Telegram.BotToken ayarlayın. Buradan sonra yetkilendirme olay güdümlüdür: OnAuthorizationStatus, OnAuthenticationCode ve OnAuthenticationPassword, TDLib'in sonraki adımda ihtiyaç duyduğu şeyi sizden ister.

İlk iki sekme, form denetimleri sabit değerlerle değiştirilmiş olarak paketle gelen Demos\50.Other\05.WhatsApp\FWhatsApp.pas demosudur. Bu demonun gönder düğmesi aslında SendMessageLocation çağırır; burada gösterilen metin çağrısı aynı dosyanın SendMessageText yoludur. Telegram sekmesi, kitaplıktaki diğer her bileşenden farklı olan tek satırı gösterir.

Mesajın kabul edildiğini kontrol edin

İki düzeyde kanıt: gönderme çağrısının döndürdüğü ve webhook'un sonradan size söylediği.

Dönüş değeri

SendMessageText, Graph API yanıt gövdesini bir string olarak döndürür. Günlüğe yazın. Meta'dan gelen bir hata istisna olarak değil o gövdede gelir; bu nedenle hiçbir şey yapmamış gibi görünen bir gönderimin açıklaması genellikle tam orada yer alır.

OnMessageSent

Bir mesaja sonradan ne olduğunu, bilinmiyordan gönderildi, teslim edildi ve okundu durumuna ilerleyen bir durum değeri aracılığıyla bildirir. Durum gelen bir geri çağrı olarak ulaştığı için webhook sunucusunun çalışıyor olması gerekir.

OnMessageReceived

procedure(Sender: TObject; const aMessage: TsgcWhatsApp_Receive_Message; var aMarkAsRead: Boolean). Mesajı onaylamak için aMarkAsRead değerini ayarlayın; gönderenin ekranında mavi tikleri bu oluşturur.

Telegram

OnConnectionStatus ve OnAuthorizationStatus izlenecek ikisidir. TDLib birkaç adımda oturum açar, bu nedenle durum olayları o dizide nerede olduğunuzu bilmenin tek güvenilir yoludur.

İlk seferde genellikle ne ters gider

Başarısız olan ilk gönderimlerin neredeyse tamamı altı sorundan kaynaklanır.

Bileşen paletde yok

TsgcWhatsApp_Client yalnızca SGC_WHATSAPP tanımlıyken derlenir; bu, Professional bloğunun içinde 728. satırda olur. Standard derlemede Telegram'ı alırsınız, WhatsApp'ı almazsınız.

Gönderim bir şablonla ilgili hata döndürüyor

WhatsApp, serbest biçimli metin mesajına yalnızca kullanıcı size ilk önce mesaj yazdığında açılan müşteri hizmetleri penceresi içinde izin verir. Bunun dışında SendMessageText değil, onaylı bir şablon, yani SendMessageTemplate göndermelisiniz.

Hiçbir şey ulaşmıyor ve hata oluşturulmuyor

Dönüş değerini okuyun. SendMessageText ham Graph API yanıtını bir dize olarak döndürür ve demo onu doğrudan günlüğe yazar. Meta'dan gelen bir hata o gövdede gelir.

Belirteç bir gün sonra sona eriyor

Meta konsolundaki geçici belirteç kısa ömürlüdür. Örneği geride bırakmadan önce bir sistem kullanıcısı için kalıcı bir belirteç oluşturun.

Telegram başlangıçta bir kitaplık hatası veriyor

TDLib bulunamadı. Bileşen onu çalışma zamanında dlopen veya LoadLibrary ile yükler ve bu başarısız olduğunda hata oluşturur. Dosyayı çalıştırılabilir dosyanızın yanına koyun veya arama yolunu SetTDJsonPath ile ayarlayın.

Olaylar yanlış iş parçacığında tetikleniyor

Demo, forma doğrudan dokunabilmek için NotifyEvents := neAsynchronous ayarlar ve kendi yorumu, üretimde neNoSync kullanıp UI iş parçacığına kendiniz aktarmanızı söyler.

İlk mesajın ötesinde

İşin genellikle gittiği dört yön, hepsi aynı paketin içinde.

Daha zengin WhatsApp mesajları

Görüntüler, belgeler, konumlar, kişiler, etkileşimli düğme mesajları ve onaylı şablonların her birinin aynı bileşen üzerinde kendi gönderme metodu vardır.

WhatsApp başvurusu

Yalnızca göndermeyin, alın da

Bileşen webhook uç noktasını kendisi barındırabilir. StartServer onu başlatır, OnBeforeSubscribe doğrulama el sıkışmasını kabul veya reddeder ve OnMessageReceived size gelen her mesajı verir.

WhatsApp başvurusu

Yalnızca botlar değil, tam Telegram uygulamaları

TDLib, resmi Telegram istemcilerinin kullandığı kitaplığın aynısıdır; bu nedenle bileşen yalnızca bot API'sine değil, kullanıcı hesaplarına, sohbetlere, medyaya ve sponsorlu mesajlara da ulaşır.

Telegram başvurusu

Teslimat durumu

OnMessageSent, API'nin tanımladığı durumlar üzerinden, yani bilinmiyor, gönderildi, teslim edildi ve okundu üzerinden, gönderdiğiniz bir mesajın ilerleyişini bildirir.

WhatsApp başvurusu

Başvuru, demolar ve belgeler

Başvuru sayfaları her metodu ve olayı belgelendirir. Demo projeleri indirmenin içinde, Demos\50.Other altında gelir.

Başvuru, WhatsApp istemcisi TsgcWhatsApp_Client üzerindeki her gönderme metodu, seçenek ve olay.
Başvuru, Telegram istemcisi TsgcTDLib_Telegram üzerinde yetkilendirme, sohbetler, mesajlar ve medya.
TsgcWhatsApp_Client bileşen sayfası Her gönderme metodu ve olay; Telegram istemcisi buradan bağlantılıdır.
Denemeyi indirin Üretimle aynı yükleyici, süre sınırlı.
Çevrimiçi yardım Oluşturulan başvuru, her zaman güncel sürümle uyumludur.
Kullanıcı kılavuzu (PDF) Kitaplıktaki her bileşeni kapsayan tam kılavuz.

İlgili okumalar: WhatsApp bileşeni, WhatsApp üzerinden yerel dosya gönderme, Telegram istemcisi ve proxy arkasında Telegram. Her ürünün kendi hızlı başlangıcı vardır ve başlarken sayfasında listelenir.

sgcSocial hızlı başlangıç soruları

SGC Social palet sayfasındaki TsgcWhatsApp_Client. sgcLibs.pas içinde, sgcLib_WhatsApp_Client.pas içinde bildirilen ve gönderme metotlarını taşıyan TsgcWhatsApp_Client_Base sınıfının yayımlanmış bir sarmalayıcısı olarak bildirilir. WhatsAppOptions.PhoneNumberId ve WhatsAppOptions.Token değerlerini ayarlayın, ardından SendMessageText çağırın.
WhatsApp, sgcVer.inc dosyasının 727 ile 758. satırları arasındaki SGC_EDT_PRO bloğunun ilk satırı olan 728. satırda tanımlanan SGC_WHATSAPP ile kısıtlanır. Bu, Professional ve üzeridir. Telegram, 675 ile 724. satırlar arasındaki SGC_EDT_STD bloğunda, 677 ile 694. satırlarda platform başına bir kez olmak üzere altı kez tanımlanan SGC_TELEGRAM ile kısıtlanır. Yani Telegram bir kademe daha aşağıdan başlar. Bağımsız sgcSocial paketi, 968 ile 971. satırlardaki bloğu bunları platform koruması olmadan tanımlayan 860. satırdaki SGC_PACK_SOCIAL ile ikisini de açar.
Meta Graph API'sinden gelen ham yanıt gövdesi olan bir string. Tam imzası function SendMessageText(const aTo, aMessage: string; aPhoneNumberId: string = ''; const aOptions: TsgcWhatsApp_Message_Options = nil): string biçimindedir. Pakette gelen demo dönüş değerini doğrudan günlüğe yazar ve Meta'dan gelen bir hatayı görmenin en hızlı yolu budur, çünkü reddedilen bir gönderim istisna olarak değil gövdede gelir.
Bileşen sunucu olabilir. StartServer çağırın; Meta webhook'unu kendisi dinler. OnBeforeSubscribe doğrulama isteğini kabul veya reddetmenizi sağlar ve OnMessageReceived size gelen her mesajı, onaylamak için ayarlayabileceğiniz bir var aMarkAsRead bayrağıyla birlikte verir. StopServer onu kapatır. Göndermek bunların hiçbirini gerektirmez.
Çalıştırılabilir dosyanızın yanında yerel TDLib JSON kitaplığı. Bileşen onu çalışma zamanında yükler ve platform başına adlandırır: Windows'ta tdjson.dll, 64 bit macOS'ta libtdjson.dylib, 64 bit Linux'ta ve Lazarus Linux'ta libtdjson.so ve Android'de libtdjsonandroid.so. iOS 64 istisnadır; orada kitaplık libtdjson.a olarak statik bağlanır. Eksikse bileşen ilk kullanımda hata oluşturur. SetTDJsonPath onu farklı bir klasöre yöneltir.
Evet, her birinin aynı bileşen üzerinde kendi metodu vardır: SendMessageImage, SendMessageDocument, SendMessageLocation, SendMessageContact, SendMessageInteractiveButtons ve aşırı yüklenmiş olan SendMessageTemplate. MarkMessageRead, gelen bir mesajı okundu olarak işaretler.
İş parçacığı modeli nedeniyle. Pakette gelen demo, işleyicilerinin VCL denetimlerine dokunabilmesi için NotifyEvents := neAsynchronous ayarlar ve kendi yorumu üretimde neNoSync kullanmanızı söyler. neNoSync ile olay çalışan iş parçacığında tetiklenir; bu daha hızlıdır ve bir servis için doğrudur, UI'ye dokunan her şeyi aktarmak ise sizin işiniz olur.
Evet. sgcWebSockets Core çalışma zamanı dahil bağımsız bir pakettir ve ayrıca WhatsApp için Professional'dan, Telegram için Standard'dan itibaren sgcWebSockets'in bir parçasıdır. Kaynakta bağımsız yol, 968 ile 971. satırlardaki bloğu her iki istemciyi tanımlayan sgcVer.inc dosyasının 860. satırındaki SGC_PACK_SOCIAL değeridir.
En avantajlı seçenek: All-AccessTüm eSeGeCe ürünleri, Premium Destek dahil, yılda €1,059'dan itibaren.
All-Access fiyatlarına bakın

Delphi'den müşterilerinize mesaj göndermeye hazır mısınız?

Denemeyi indirin ve bugün ilk WhatsApp mesajınızı gönderin.