Tento článek se zabývá odesíláním zpráv jako stránka na Facebooku pomocí PHP Web SDK. Proces se od doby vydání některých starších tutoriálů mohl změnit, proto se zaměříme na aktuální postupy. Máte dvě možnosti: buď si stáhnete hotový projekt z GitHubu, nebo budete postupovat krok za krokem podle tohoto návodu.
Základy přístupu k API a oprávnění
Rozšířené parametry (Extended Parameters) jsou zajímavým způsobem omezení přístupu k aplikaci (zde termín „aplikace“ označuje to, co zde stavíme) prostřednictvím API. Pokud uživatel nepovolí přístup k určitým částem svého účtu, aplikace nebude moci upravovat ani číst části účtu, i když je ověřená. Rozšířené parametry je třeba explicitně přiřadit v okamžiku ověřování.
První na snímku obrazovky je výchozí požadované oprávnění k přístupu k základním informacím všech uživatelů. Další tři, které potřebujeme k dosažení našich cílů, zahrnují: čtení a zveřejňování aktualizací stavu, stejně jako prohlížení a zveřejňování fotografií. Zde můžete vidět kompletní seznam všech dostupných rozšířených oprávnění. Pokud navštívíte tento odkaz, uvidíte, že existuje mnoho oprávnění. Doporučuji věnovat nějaký čas přečtení jejich popisů, abyste lépe porozuměli, jaké věci můžete s API dělat.
Získání přístupového tokenu stránky s neomezenou platností
Vytvořil jsem novou aplikaci a udělil jí příslušná oprávnění, abych nenarušil jiné úkoly. Poté jsem potřeboval získat přístupový token stránky, který nikdy nevyprší. Z nabídky Get Token vyberte Get Access Token. V dialogovém okně vyberte manage_pages a publish_pages z karty Extended Permissions. Zkopírujte token; je to krátkodobý přístupový token s příslušnými oprávněními pro zveřejňování na vaší stránce. Vytvořte dlouhodobý přístupový token z krátkodobého tokenu. Je to nutné pro vytvoření přístupového tokenu stránky s neomezenou platností. Chcete-li vytvořit přístupový token stránky s neomezenou platností, spusťte tento skript. Zkopírujte access_token příslušné stránky. Je to přístupový token stránky s neomezenou platností. Zkopírujte také ID stránky, pokud ho již nemáte.
Pokud je aplikace v režimu vývoje, což je výchozí nastavení, příspěvky jsou viditelné pouze pro vás. Je důležité si uvědomit, že přístupové tokeny obvykle vydrží jen asi 2 hodiny, takže budete chtít rozšířit krátkodobý přístupový token na dlouhodobý přístupový token. Je to osvědčená praxe požádat o minimální oprávnění, která vaše aplikace potřebuje k fungování, když se uživatel poprvé přihlásí do vaší aplikace. Pokud máte funkci, která zveřejňuje něco na časové ose uživatele jeho jménem, například, budete potřebovat oprávnění publish_actions.
Práce s Graph API
Graph API umožňuje volat různé zdroje, které vám budou vráceny jako JSON objekty. Budete muset strávit nějaký čas na stránce Graph API References, abyste porozuměli různým dostupným objektům, jejich parametrům a požadovaným rozšířeným oprávněním pro přístup k nim. Promluvme si nejprve o objektu User. Pokud se podíváte na referenční stránku pro uživatele, uvidíte, že pro volání objektu uživatele (uživatele, který je ověřen aplikací) byste volali URL Graph API s '/me' na konci. Pokud je volání úspěšné, obdržíte JSON objekt se všemi možnými vlastnostmi definovanými na referenční stránce (pokud jsou nastaveny). Jakmile máte objekt, můžete přistupovat k jeho vlastnostem nebo s ním dělat, co potřebujete.
Nyní se pokusím vysvětlit spojení (connections). Pokud se znovu podíváte na referenční stránku uživatele a posunete se dolů, uvidíte sekci spojení. To jsou objekty, které můžete získat a které patří tomuto uživateli. Pro přístup k těmto objektům byste volali URL /me/object, který chcete. Například, pokud chcete získat alba tohoto uživatele, volali byste /me/albums, a to by vrátilo pole objektů alb, ale nezapomeňte splnit požadované oprávnění. Takže spojení je jen most mezi jedním objektem a druhým. Dalším příkladem by bylo, řekněme, že uděláme to, co jsme udělali výše, a získáme všechna alba uživatele. Nyní chceme vidět všechny fotografie uvnitř každého alba. Pokud se podíváte na objekt alba, všimnete si, že pod spojeními jsou fotografie, které vrací pole objektů fotografií.
Metoda api je to, co budeme používat vždy, když budeme potřebovat zavolat zdroj, a může přijmout tři parametry: zdroj, get/post (výchozí je get) a parametry (pokud nějaké jsou). V tomto případě chceme zavolat spojení statuses v objektu uživatele, které vrací pole zpráv o stavu. Po obdržení zpráv, projdeme každou z nich a vypíšeme je. Pokud chcete vidět všechny vlastnosti každého stavu, stačí provést var_dump na každý stav.
Chceme vytvořit nový příspěvek, takže se podívejme do referenční příručky pro informace o příspěvku a jeho vlastnostech. Přejděte dolů do sekce publikování a všimněte si, že potřebujeme rozšířenou vlastnost publish_stream a můžete vidět všechny různé vlastnosti, které tento objekt podporuje. To je celý kód potřebný k vytvoření příspěvku! Je to tak snadné. Zavoláme metodu api, řekneme jí, že chceme zavolat spojení /me/feed, nastavíme metodu na post a nakonec předáme pole s vlastnostmi, které chceme nastavit - v tomto případě jen vlastnost message. Pokud je volání úspěšné, obdržíte zpět ID, což je ID pro nový příspěvek, který jste právě vytvořili.
V tomto příkladu chceme získat všechna různá alba pro našeho uživatele. Zde voláme spojení albums na uživateli, abychom získali všechny objekty alb. Projdeme každé z nich a pro každé album získáme ID alba, abychom poté zavolali spojení fotografií na objektu alba. Když přemýšlím o spojeních, myslím na joiny v databázi.
S ohledem na čas a složitost přidám jen fotografii bez určení alba. Tento příklad jsem vybral pro lidi, kteří chtějí pochopit, jak zveřejnit soubor prostřednictvím služby, jako je tato. Nejprve začněme nahoře. Musíme specifikovat cestu k obrázku, který chceme nahrát, takže změňte tuto cestu na místo, kde se nachází váš soubor. Obvykle by to byla cesta tmp pro fotografii právě nahranou na váš server prostřednictvím $_FILE. Nezjišťoval jsem tuto metodu příliš, kromě toho, že komentáře říkaly, že je třeba specifikovat server, takže používám SERVER_NAME k označení tohoto serveru. Dále provedeme volání. Voláme /me/photos, protože to je specifikováno na referenční stránce fotografií v sekci publikování. Předáváme dva parametry: message je text, který se zobrazí s obrázkem, a source je obrázek, který chceme nahrát. To je proto, že chceme zveřejnit obsah souboru a nepředávat řetězec, kde se soubor nachází.
Integrace s PHP SDK
PHP SDK 5.0 značně zjednodušuje práci. Nejprve inicializujeme SDK s přístupovým tokenem - pokud token není nastaven, vrátíme se k přístupovému tokenu aplikace. Poté se pokusíme provést požadavek na endpoint /me. Pokud projde, zobrazíme jméno uživatele. Tento skript pouze ukládá přístupový token a přesměruje na login.php. Můžeme použít přístupový token aplikace jako výchozí, protože pokud se uživatel dostane k tomuto skriptu, pravděpodobně nebude mít aktivní token. V mnoha scénářích byste chtěli rozšířit uživatelský token, a s PHP SDK je to docela snadné.
Konfigurace a ověřování
Níže je kód pro soubor config.php. Krátké vysvětlení kódu: Dále voláme getUser(), abychom zjistili, zda jsme již ověřeni - null znamená, že nejsme, jinak obdržíme ID uživatele. URL nám poskytuje metoda getLoginUrl. Posíláme této metodě pole s klíčem req_perms (požadovaná oprávnění) a hodnota je čárkami oddělený seznam všech rozšířených oprávnění, ke kterým chceme mít přístup. Pokuste se přistoupit na tuto stránku ve svém prohlížeči. Poté uvidíte stránku „Žádost o oprávnění“, klikněte na „Povolit“ a budete přesměrováni zpět na stránku config.php na vašem serveru. Tento proces vás vrátí na stránku, která zahájila ověřování, což byla stránka config.php.
Při testování vaší aplikace se můžete rozhodnout, že potřebujete více nebo méně rozšířených oprávnění. V sekci „Applications you use“ byste měli vidět vaši aplikaci v seznamu, klikněte na „edit settings“. Nakonec klikněte na tlačítko „x“ pro smazání, abyste aplikaci ze seznamu odstranili. V inicializačním úryvku doporučuji nastavit volbu cookie na true. To řekne JavaScript SDK, aby nastavilo cookie na vaší doméně s informacemi o uživateli. To vám umožní přístup k ověřovacím datům v back-endu později, například pomocí PHP SDK. Podepsaný požadavek obsahuje datový payload o uživateli, který autorizoval vaši aplikaci. Payload je doručen jako base64-kódovaný JSON řetězec, který byl escapován pro použití v URL.
Po odpovědi uživatele (přijme nebo odmítne) bude přesměrován zpět na URL zpětného volání, které jste zadali v přihlašovacím odkazu. Mnoho z těchto kroků pro vás PHP SDK zpracovává automaticky. Ladění: Pokud $jsHelper->getAccessToken() vrací pouze null a nevyhazuje žádné výjimky, znamená to, že cookie z JavaScript SDK není nastaveno. Ujistěte se, že máte v FB.init() volbu cookie: true, jak bylo popsáno dříve. Vždy, dokud používáme oficiální SDK pro přihlášení uživatele, můžeme si být jisti, že jakmile získáme přístupový token uživatele, můžeme tohoto uživatele označit jako „přihlášeného“ v našem webovém rámci. JavaScript SDK poskytuje metodu pro odhlášení uživatele s názvem FB.logout(). Takže vše, co potřebujete udělat pro odhlášení uživatele, je odhlásit ho pomocí vašeho webového rámce (například smazáním relace nebo jakékoli konvence odhlášení, kterou váš webový rámec používá).
Chybové zprávy
- echo 'Graph returned an error: ' .
- echo 'Error extending the short-lived access token: ' .
- echo 'Request error: ' .
- echo 'ERROR! ' . __LINE__ .
- echo 'ERROR! ' . __LINE__ .
- echo 'Graph returned an error: ' .
- echo '
Error: ' .
- echo '
Code: ' .
- echo '
Reason: ' .
- echo '
Description: ' .
Vytvoření bota pro Facebook stránku
Jedním z prvních nápadů, který mi napadl, když jsem slyšel o PHP botovi, bylo vytvoření bota. Předpokládejme, že Pizza Hut představí bota pro operace související s objednávkami. Mohli by integrovat nebo hostovat svého bota na své oficiální stránce, fanoušek by mohl jednoduše kliknout na tlačítko "Zpráva" a posílat zprávy k objednání pizzy, získání nových nabídek atd., a dostával by zprávy, jako by mu odpovídal lidský zástupce. Vše závisí na efektivitě bota.
Vytvořím bota "Time bot", který vám řekne aktuální čas. Time API poskytuje různé možnosti pro získání času. Pro našeho bota budeme pouze získávat nejnovější (NOW) čas. Nejprve vytvořím stránku bota, tato stránka bude skutečně vstupním bodem pro komunikaci bota s fanoušky/uživateli vaší stránky. Všimněte si, že není nutné vytvářet samostatnou stránku pouze pro účely bota. K tomuto účelu můžete použít stávající fanouškovskou stránku. Pro účely tohoto tutoriálu předpokládám, že jste stránku nikdy předtím nevytvořili. Vybral jsem možnost "Zábava".
Nastavení aplikace a Webhooku
Kliknutím se zobrazí okno s dotazem, jakou aplikaci budete vytvářet. Vybral jsem "Basic Setup" dole. Na levém bočním panelu uvidíte možnost "Messenger". Nyní musíme udělat několik věcí pro nastavení bota. Bude také obsahovat logiku vašeho bota a oprávnění, tj. co by tento bot měl být schopen vykonávat při komunikaci s uživateli. Dobře, nejprve nastavte stránku, kterou jste právě vytvořili. Vybral jsem TimBot.
Nyní musíme nastavit náš Webhook. Můžete buď nahrát svůj skript někam, co umožňuje požadavky založené na SSL, nebo... můžete použít nějaký tunelovací nástroj, který předá vaši zprávu z localhostu do vnějšího světa. Naštěstí jsou takové nástroje k dispozici a jsou také ZDARMA. Pro tento účel bych doporučil nGrok. Jako bezplatný uživatel nemáte povoleno zadat vlastní subdoménu. Jak vidíte, dává vám dvě přesměrované URL. Jelikož nás zajímá ta s https, zaměříme se na ni. nGrok vám také poskytuje rozhraní pro prohlížení požadavků na vaší nově vytvořené doméně. Pomůže vám to při ladění, jak je vaše stránka webhooku přístupná platformou Messenger.
Nyní mám URL, vše, co musím udělat, je nastavit můj Webhook pro Time Bot. Zde jsem zadal URL založenou na nGrok, ověřovací token (Verify Token), který může být libovolný řetězec, a zaškrtl jsem pole pro odběr (subscription fields). Co to znamená? Je čas otevřít IDE a napsat nějaký kód. Vytvořte soubor, v mém případě je to index.php, ve vašem případě to může být jakýkoli jiný soubor.
Vše se zdá být nastaveno, zkusme to znovu! Hurá! Vše se zdá být nastaveno. Než začnete posílat/přijímat zprávy, musíte se k vaší stránce přihlásit. Kde access_token je kód, který jsem získal v předchozím kroku pro stránku Time Bot Page, o který jsem vás požádal, abyste si ho někam uložili. Nyní poznáte sílu webového rozhraní nGrok, zde přijímáme zprávu od bota ve struktuře.
Řešení problémů s PHP 5.6
Deprecated: Automatické naplnění $HTTP_RAW_POST_DATA je zastaralé a bude odstraněno v budoucí verzi. Abyste tomuto varování zabránili, nastavte 'always_populate_raw_data' na '-1' v php.ini a místo toho použijte stream php://input. Tento problém nastává, pokud používáte PHP 5.6. Nyní by chyba měla být pryč. Nastavuji pro svého bota základní pravidla. $message_to_reply = 'Huh! Dobře, teď musíme uživateli odpovědět.
tags: #send #message #as #fb #page #php
