Действия в Google - Push-уведомления в C # - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь получить базовое push-уведомление для моего действия.

Я получаю токен доступа как таковой

    private static async Task<string> GetAccessTokenFromJsonKeyAsync(string jsonKeyFilePath, params string[] scopes)
    {
        using (var stream = new FileStream(jsonKeyFilePath, FileMode.Open, FileAccess.Read))
        {
            return await GoogleCredential
                .FromStream(stream) // Loads key file  
                .CreateScoped(scopes) // Gathers scopes requested  
                .UnderlyingCredential // Gets the credentials  
                .GetAccessTokenForRequestAsync(); // Gets the Access Token  
        }
    }

, который возвращает мне токен доступа.

Затем я отправляю следующее уведомление

{
    "customPushMessage": {
        "userNotification":{
            "title":"Notification Title"
        },
        "target":{
             "userId":"ID_FROM_UPDATES_USER_ID",
             "intent":"Notification Intent",
             "locale":"en-US"
        }
    }
}

, используя следующий код

        try
        {
            var accessToken = await GetAccessTokenFromJsonKeyAsync("key.json", "https://www.googleapis.com/auth/actions.fulfillment.conversation");

            var serialized = JsonConvert.SerializeObject(proactiveMessage);
            var payload = "{\"customPushMessage\": " + serialized + "}";

            // Wrap our JSON inside a StringContent which then can be used by the HttpClient class
            var httpContent = new StringContent(payload, Encoding.UTF8, "application/json");

            _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", accessToken);

            var httpResponseMessage = await _httpClient.PostAsync("https://actions.googleapis.com/v2/conversations:send", httpContent);

            Debug.WriteLine(httpResponseMessage.IsSuccessStatusCode ? "Successfully sent notification message." : $"Failed to send notification message with {httpResponseMessage.StatusCode}.");

            return httpResponseMessage;
        }
        catch (Exception ex)
        {
            Debug.WriteLine($"Alexa API Service: Failed to send notification message with exception: {ex.Message}");
            return new HttpResponseMessage(HttpStatusCode.BadRequest);
        }

Код ответа, который я получаю, - 403 Запрещено.

IЯ не уверен, что код токена доступа неверен, структура уведомлений неверна или я что-то упустил.

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Я не запрашивал разрешение должным образом. Этот предоставил мне недостающую часть головоломки.

Требуется

        "updatePermission": {
            "intent": "notification.simple.text"
        }
0 голосов
/ 29 сентября 2018

Тип токена должен быть «Носитель» с капиталом B. Так что строка должна быть

_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
...