Featured image of post Slack API और OAuth2 का उपयोग करके संदेश कैसे पोस्ट करें (C++ कार्यान्वयन उदाहरण)

Slack API और OAuth2 का उपयोग करके संदेश कैसे पोस्ट करें (C++ कार्यान्वयन उदाहरण)

हम Slack App के OAuth टोकन का उपयोग करके Slack Web API के माध्यम से संदेश पोस्ट करने का तरीका बताते हैं। हम स्कोप सेट करने और एक्सेस टोकन प्राप्त करने की प्रक्रिया से लेकर WinHTTP का उपयोग करके C++ में विशिष्ट कार्यान्वयन कोड उदाहरण प्रस्तुत करते हैं।

✅ एक्सेस टोकन का उपयोग करके पोस्ट करने की विधि (Slack Web API)

Slack का “OAuth Token (जैसे xoxb-…)” Slack के Web API का उपयोग करके पोस्ट करने के लिए एक कुंजी है। इस मामले में, Webhook के विपरीत, आप Authorization: Bearer हेडर के साथ Slack API एंडपॉइंट पर POST करते हैं।


🔑 आवश्यक शर्तें

आपको Slack ऐप के OAuth स्कोप में chat:write शामिल करना होगा:

सेटअप प्रक्रिया

  1. https://api.slack.com/apps पर जाएं
  2. एक ऐप बनाएं या मौजूदा ऐप चुनें
  3. “OAuth & Permissions” > Scopes में → chat:write जोड़ें
  4. “Install to Workspace” या “Reinstall” पर जाएं और Access Token प्राप्त करें (उदा: xoxb-xxxxxxxxxx)

💻 C++ कोड (WinHTTP के साथ Slack API पर पोस्ट करना)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <windows.h>
#include <winhttp.h>
#include <iostream>

#pragma comment(lib, "winhttp.lib")

bool PostSlackMessage(const std::wstring& accessToken, const std::string& channel, const std::string& text) {
    const wchar_t* host = L"slack.com";
    const wchar_t* path = L"/api/chat.postMessage";

    HINTERNET hSession = WinHttpOpen(L"SlackPoster/1.0",
                                     WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
                                     WINHTTP_NO_PROXY_NAME,
                                     WINHTTP_NO_PROXY_BYPASS, 0);
    if (!hSession) return false;

    HINTERNET hConnect = WinHttpConnect(hSession, host, INTERNET_DEFAULT_HTTPS_PORT, 0);
    if (!hConnect) return false;

    HINTERNET hRequest = WinHttpOpenRequest(hConnect, L"POST", path,
                                            NULL, WINHTTP_NO_REFERER,
                                            WINHTTP_DEFAULT_ACCEPT_TYPES,
                                            WINHTTP_FLAG_SECURE);

    // Authorization हेडर और Content-Type
    std::wstring headers = L"Content-Type: application/json\r\n";
    headers += L"Authorization: Bearer " + accessToken + L"\r\n";

    // JSON बॉडी
    std::string body = R"({"channel":")" + channel + R"(","text":")" + text + R"("})";

    BOOL result = WinHttpSendRequest(hRequest,
                                     headers.c_str(),
                                     (DWORD)-1,
                                     (LPVOID)body.c_str(),
                                     body.length(),
                                     body.length(),
                                     0);

    if (!result || !WinHttpReceiveResponse(hRequest, NULL)) {
        std::cerr << "भेजने में त्रुटि\n";
        return false;
    }

    // स्थिति कोड की जाँच
    DWORD statusCode = 0;
    DWORD size = sizeof(statusCode);
    WinHttpQueryHeaders(hRequest,
                        WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER,
                        WINHTTP_HEADER_NAME_BY_INDEX,
                        &statusCode, &size, WINHTTP_NO_HEADER_INDEX);

    WinHttpCloseHandle(hRequest);
    WinHttpCloseHandle(hConnect);
    WinHttpCloseHandle(hSession);

    return (statusCode == 200);
}

int main() {
    std::wstring token = L"xoxb-आपका_एक्सेस_टोकन"; // एक्सेस टोकन
    std::string channel = "चैनल_ID_या_#general";       // उदा: "#general" या "C0123456789"
    std::string message = "C++ से Slack पर पोस्ट करने का प्रयास!";

    if (PostSlackMessage(token, channel, message)) {
        std::cout << "पोस्ट सफल!\n";
    } else {
        std::cerr << "पोस्ट विफल।\n";
    }

    return 0;
}

📌 चैनल ID कैसे प्राप्त करें

केवल चैनल नाम (उदा: #general) का उपयोग करने से त्रुटि हो सकती है। सबसे विश्वसनीय तरीका Slack चैनल पृष्ठ URL में ID का उपयोग करना है।

1
2
https://app.slack.com/client/Txxxxx/C0123456789
                                 ↑यह हिस्सा चैनल ID है

✅ टोकन के प्रकार (पूरक)

टोकन प्रारूपउपयोगउदाहरण
xoxb-...Bot Token (अनुशंसित)पोस्ट, संपादित करें, हटाएं
xoxp-...User Token (अनुशंसित नहीं)गैर-बॉट संचालन
Refresh Tokenदीर्घकालिक टोकन अपडेट के लिएआमतौर पर उपयोग नहीं किया जाता है

📝 सारांश

  • C++ से Slack पर पोस्ट करने के लिए, Slack Web API + Bearer Token विधि विश्वसनीय है
  • HTTPS POST के साथ chat.postMessage एंडपॉइंट का उपयोग करें
  • टोकन को Bearer हेडर में भेजा जाना चाहिए
  • चैनल ID निर्दिष्ट करना विश्वसनीय है
comments powered by Disqus