Startowanie Microsoft Flow przez Twitter webhook
Table of Contents
Jedynym wyzwalaczem wbudowanym w Microsoft Flow dla Twittera jest „Kiedy nowy tweet jest opublikowany”. Lista zdarzeń dostępnych w dokumentacji aktywności konta (Account activity) API Twittera jest jednak znacznie szersza i składa się z 19 opcji. Ale jak z nich skorzystać?
Zainspirował mnie także przypadek użycia, który pozwala opublikować tweeta z podziękowaniami po tym, jak użytkownik zacznie followoać innego użytkownika. Rozwiązanie znane mi wykorzystywało jednak płatne rozwiązania online Zapier i Buffer. Zastanawiałem się, czy byłoby to możliwe tylko przy użyciu narzędzi ze środowiska Office 365 / Azure. A odpowiedź brzmiała … tak!
Sreencast
Twitter API
Głównym elementem całego rozwiązania jest oczywiście API Twittera. Aby było to możliwe, musisz najpierw założyć konto programisty, utworzyć aplikację i utworzyć środowisko programistyczne. Oba mogą być używane za darmo.
- Konto programisty (Developer account) utwórz tu: https://developer.twitter.com.
- Aplikację utwórz tu: https://developer.twitter.com/en/apps/create
- Środowisko programistyczne (Developer environment) utwórz tutaj: https://developer.twitter.com/en/account/environments – chodzi o ostatnie: środowisko „Account Activity / API”.
Pamiętaj! Nazwa aplikacji (, której użyjesz, będzie wyświetlona wraz z aktywnością na Twitter, która zostanie przez nią wykonana, np.:
Azure Function
I decided to use Node.js since I do know a little about programming in JavaScript 🙂 The function I created is being trigger via HTTP Request, it listens both to GET and POST requests. I also set it Authorization Level to Function.
Zdecydowałem się użyć Node.js, ponieważ wiem trochę o programowaniu w JavaScript 🙂 Funkcja, którą stworzyłem, jest uruchamiana za pośrednictwem żądania HTTP, nasłuchuje zarówno żądań GET, jak i POST. Ustawiłem także poziom autoryzacji (Authorization Level) na Function.
Kluczowe jest to, że funkcja musi reagować w różny sposób, zależnie od tego, czy odbiera żądanie GET (jest to żądanie CRC do uwierzytelnienia endpoint dla webhooka) i POST (używane przez wywołania API Account Activity).
Obsługa żądań
Jest to kluczowa część, pozwalająca zarejestrować funkcję Azure jako aplikację dla webhook. Co 24 godziny Twitter wysyła do aplikacji Challenge-Response Check (CRC) w celu zweryfikowania jej wiarygodności. Zgodnie z dokumentacją: https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/guides/securing-webhooks, dla każdego takiego żądania Twoja aplikacja musi być w stanie uzyskać parametr crc_token
, a następnie wysłać response_token
zbudowany z crc_token
i consumer_secret_key
shashowany za pomocą HMAC SHA-256 i zakodowanego do łańcucha base64. Spore wyzwanie dla Flow. Ale nie dla funkcji Azure.
Mając to wszystko na uwadze, zbudowana funkcja zawiera blok if-else, który sprawdza rodzaj żądania i otrzymane parametry:
const crypto = require('crypto'); const https = require('https'); if (req.method === 'GET' && req.query.crc_token) { contents.log('CRC_Token: ' + req.query.crc_token); const responseToken = crypto.createHmac('sha256', process.env["Consumer_API_Key_Secret"]). update(req.query.crc_token).digest('base64'); contents.res = { status: 200, headers: { "Content-Type": "application/json" }, body: { "response_token": "sha256=" + responseToken + "" } }; } else if (req.method === 'POST' && req.headers['content-type'] === 'application/json' && req.body) { // handling new account activity calls }
Jeśli żądanie to GET, funkcja odczytuje wartość crc_token
, następnie pobiera Consumer_API_Secret_Key
ze zmiennych środowiskowych i używając biblioteki crypto generuje response_token
, który następnie wysyła z powrotem.
Jeśli żądanie to POST, analizuje przychodzącą zawartość body i uruchamia mój Microsoft Flow, co możesz przeczytać później.
Account Activity Webhook
Aby utworzyć webhook, wykonaj poniższe kroki. Ja użyłem aplikacji Postman, aby je zrealizować.
Zgodnie z dokumentacją: https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/guides/getting-started-with-webhooks należy je wykonać następująco:
1. Zarejestruj swoją aplikację dla webhook poprzez wysłanie żądania POST do https://api.twitter.com/1.1/account_activity/all/{YOUR ENVIRONMENT NAME}/webhooks?url={YOUR APP URL}, zabezpieczonego nagłówkiem OAuth 1.0.
Wykonałem to z użyciem Postman:
- Zdefiniuj szczegóły autoryzacji OAuth 1.0 w zakładce Authorization.
- Usuń wszystkie parametry z zakładki Params.
- Przenieś je do zakładki Body, do opcji
x-www-form-urlencoded
, jak to zostało opisane tutaj: https://github.com/twitterdev/postman-twitter-ads-api/issues/2.
Ważne! Wielokrotnie starałem się zarejestrować aplikację dla webhooka i ciągle otrzymywałem różne błędy z kodem „214”, które były po prostu różnymi opisami kodu „Unauthorized”. W końcu ponownie wygenerowałem wszystkie klucze i proces przeszedł gładko.
2. Dodaj konto (subskrybuj), dla którego działania zostaną przekazane przez webhook. Zrobiłem to również z Postman. Musisz wykonać żądanie POST do adresu URL: https://api.twitter.com/1.1/account_activity/all/{YOUR ENVIRONMENT NAME}/subscriptions.json i zabezpieczyć je nagłówkiem autoryzacji OAuth 1.0.
Słowo na koniec
Pamiętaj, że to rozwiązanie wymaga subskrypcji P1 dla Microsoft Flow, dzięki czemu możliwe jest korzystanie ze wszystkich dobrodziejstw akcji związanych z HTTP.
W ten sposób skonfigurowany wyzwalacz dla Microsoft Flow umożliwi słuchanie i działanie w przypadku wielu zdarzeń na koncie Twitter, takich jak:
- Tweets (by user)
- Tweet deletes (by user)
- @mentions (of user)
- Replies (to or from user)
- Retweets (by user or of user)
- Quote Tweets (by user or of user)
- Retweets of Quoted Tweets (by user or of user)
- Likes (by user or of user)
- Follows (by user or of user)
- Unfollows (by user)
- Blocks (by user)
- Unblocks (by user)
- Mutes (by user)
- Unmutes (by user)
- Direct Messages sent (by user)
- Direct Messages received (by user)
- Typing indicators (to user)
- Read receipts (to user)
- Subscription revokes (by user)
Co więcej, jeśli funkcja Azure została już skonfigurowana i Flow obsługuje żądania, możesz rozszerzyć swoje rozwiązanie tak jak ja. Napisałem drugą funkcję, która jest wywoływana przez Flow, aby opublikować tweeta z wiadomością z podziękowaniami dla każdego użytkownika, który zdecyduje się mnie obserwować na Twitter.
Ważne! Upewnij się, że Twoje rozwiązanie jest zgodne z najlepszymi praktykami i zasadami automatyzacji opisanymi poniżej:
https://help.twitter.com/en/rules-and-policies/twitter-rules-and-best-practices
https://help.twitter.com/en/rules-and-policies/twitter-automation
Mam nadzieję, że to rozwiązanie Ci się podoba i uznasz je za przydatne. Jeśli chcesz, abym pomógł Ci w implementacji tego rozwiązania w twoim projekcie lub aby dowiedzieć się więcej, złap mnie przez formularz kontaktowy lub zostaw komentarz. Dzięki!